public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2014-04-23 15:41 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2014-04-23 15:41 UTC (permalink / raw
  To: gentoo-commits

commit:     c187ceb3c356bd8a728bcac24eb70622638a7ebf
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 23 15:09:35 2014 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Wed Apr 23 15:39:01 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=c187ceb3

[kde-base/kdelibs] Rebase MIME types patch due to upstream changes wrt bug #508518.

Package-Manager: portage-2.2.8-r1

---
 .../kdelibs/files/kdelibs-4.14.0-mimetypes.patch   | 39 ++++++++++++++++++++++
 kde-base/kdelibs/kdelibs-9999.ebuild               |  2 +-
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.14.0-mimetypes.patch b/kde-base/kdelibs/files/kdelibs-4.14.0-mimetypes.patch
new file mode 100644
index 0000000..5e54390
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.14.0-mimetypes.patch
@@ -0,0 +1,39 @@
+Remove fake MIME types that cause warnings.
+
+The offending MIME types are commented out rather than
+physically removed because doing so would cause the patch
+to be too large.
+
+diff --git a/mimetypes/kde.xml b/mimetypes/kde.xml
+index 76303db..23351c4 100644
+--- a/mimetypes/kde.xml
++++ b/mimetypes/kde.xml
+@@ -1783,8 +1783,8 @@ Notes:
+     </magic>
+     <glob pattern="*.abc"/>
+   </mime-type>
+-
+-  <!-- all/ fake mime types -->
++<!--
++  all/ fake mime types
+   <mime-type type="all/all">
+     <comment>all files and folders</comment>
+     <comment xml:lang="ar">كل الملفات و المجلدات</comment>
+@@ -1902,7 +1902,7 @@ Notes:
+     <comment xml:lang="zh_TW">所有檔案</comment>
+   </mime-type>
+ 
+-  <!-- uri/ fake mime types -->
++  uri/ fake mime types
+   <mime-type type="uri/mms">
+     <comment>mms: URIs</comment>
+     <comment xml:lang="ar">mms: وصلات</comment>
+@@ -2245,7 +2245,7 @@ Notes:
+     <comment xml:lang="zh_CN">rtspu: 地址</comment>
+     <comment xml:lang="zh_TW">rtspu: 網址</comment>
+   </mime-type>
+-
++-->
+   <mime-type type="application/vnd.kde.fontspackage">
+     <sub-class-of type="application/zip"/>
+     <comment>fonts package</comment>

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 8f77154..c22f10c 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -127,7 +127,7 @@ PDEPEND="
 PATCHES=(
 	"${FILESDIR}/dist/01_gentoo_set_xdg_menu_prefix-1.patch"
 	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
-	"${FILESDIR}/${PN}-4.7.96-mimetypes.patch"
+	"${FILESDIR}/${PN}-4.14.0-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2015-10-15 19:10 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2015-10-15 19:10 UTC (permalink / raw
  To: gentoo-commits

commit:     460630fff44ed3aff2de695658b224d4fce9536d
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 15 19:09:06 2015 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Thu Oct 15 19:10:38 2015 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=460630ff

kde-base/kdelibs: make Qt selection patch actually work

Package-Manager: portage-2.2.20.1

 ...4-FindQt4.patch => kdelibs-4.14.13-FindQt4.patch} | 20 ++++++++++----------
 kde-base/kdelibs/kdelibs-4.9999.ebuild               |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.14.14-FindQt4.patch b/kde-base/kdelibs/files/kdelibs-4.14.13-FindQt4.patch
similarity index 73%
rename from kde-base/kdelibs/files/kdelibs-4.14.14-FindQt4.patch
rename to kde-base/kdelibs/files/kdelibs-4.14.13-FindQt4.patch
index 3994e20..4d413b7 100644
--- a/kde-base/kdelibs/files/kdelibs-4.14.14-FindQt4.patch
+++ b/kde-base/kdelibs/files/kdelibs-4.14.13-FindQt4.patch
@@ -12,12 +12,12 @@ Gentoo-bug: 562746
 
 --- cmake/modules/FindQt4.cmake
 +++ cmake/modules/FindQt4.cmake
-@@ -446,6 +446,23 @@ GET_FILENAME_COMPONENT(qt_install_version "[HKEY_CURRENT_USER\\Software\\trollte
+@@ -446,6 +446,15 @@ GET_FILENAME_COMPONENT(qt_install_version "[HKEY_CURRENT_USER\\Software\\trollte
  # check for qmake
  # Debian uses qmake-qt4
  # macports' Qt uses qmake-mac
 +if(CMAKE_BUILD_TYPE STREQUAL Gentoo)
-+  find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
++  find_program(QT_QMAKE_EXECUTABLE NAMES qmake
 +    PATHS
 +      /usr/${CMAKE_INSTALL_LIBDIR}/qt4/bin
 +      /usr/bin
@@ -25,14 +25,14 @@ Gentoo-bug: 562746
 +    DOC "The qmake executable for the Qt installation to use"
 +  )
 +else()
-+  find_program(QT_QMAKE_EXECUTABLE NAMES ${QMAKE_NAME}
-+    PATHS
-+      ENV QTDIR
-+      "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]"
-+    PATH_SUFFIXES bin
-+    DOC "The qmake executable for the Qt installation to use"
-+  )
-+endif()
  FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake4 qmake-qt4 qmake-mac PATHS
    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
    "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin"
+@@ -453,6 +462,7 @@ FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake4 qmake-qt4 qmake-mac PATHS
+   $ENV{QTDIR}/bin
+   DOC "The qmake executable for the Qt installation to use"
+ )
++endif()
+ 
+ IF (QT_QMAKE_EXECUTABLE)
+ 

diff --git a/kde-base/kdelibs/kdelibs-4.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9999.ebuild
index 4cecc61..6201109 100644
--- a/kde-base/kdelibs/kdelibs-4.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9999.ebuild
@@ -133,7 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
 	"${FILESDIR}/${PN}-4.10.0-udisks.patch"
-	"${FILESDIR}/${PN}-4.14.14-FindQt4.patch"
+	"${FILESDIR}/${PN}-4.14.13-FindQt4.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2015-03-21 18:24 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2015-03-21 18:24 UTC (permalink / raw
  To: gentoo-commits

commit:     85d2ef91690b22551e579ecfd5fc7f9dbe5fb44f
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 21 18:19:51 2015 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Sat Mar 21 18:19:51 2015 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=85d2ef91

[kde-base/kdelibs] Moved to main tree.

Package-Manager: portage-2.2.18

 .../kdelibs/files/kdelibs-4.15.6-fix-bic.patch     |  47 ----
 kde-base/kdelibs/kdelibs-4.14.6-r1.ebuild          | 307 ---------------------
 2 files changed, 354 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.15.6-fix-bic.patch b/kde-base/kdelibs/files/kdelibs-4.15.6-fix-bic.patch
deleted file mode 100644
index 585ce51..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.15.6-fix-bic.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff --git a/khtml/dom/dom_string.h b/khtml/dom/dom_string.h
-index 087f697..b269213 100644
---- a/khtml/dom/dom_string.h
-+++ b/khtml/dom/dom_string.h
-@@ -124,10 +124,23 @@ public:
-     bool endsWith(const DOMString& str) const;
-     bool startsWith(const DOMString& str) const;
- 
--    // http://www.w3.org/TR/html/infrastructure.html#urls
-+    /**
-+     * Return a parsed url.
-+     * Used to parse SRC url attribute,
-+     * see http://www.w3.org/TR/html/infrastructure.html#urls
-+     *
-+     * @since 4.14.6
-+     */
-     DOMString parsedUrl() const;
- 
-     /**
-+     * @deprecated, use parsedUrl()
-+     */
-+#ifndef KDE_NO_DEPRECATED
-+    KDE_DEPRECATED DOMString trimSpaces() const;
-+#endif
-+
-+    /**
-      * @internal get a handle to the imlementation of the DOMString
-      * Use at own risk!!!
-      */
-diff --git a/khtml/dom/dom_string.cpp b/khtml/dom/dom_string.cpp
-index a3c4abd..4da676b 100644
---- a/khtml/dom/dom_string.cpp
-+++ b/khtml/dom/dom_string.cpp
-@@ -336,6 +336,13 @@ DOMString DOMString::parsedUrl() const
-     return out;
- }
- 
-+#ifndef KDE_NO_DEPRECATED
-+DOMString DOMString::trimSpaces() const
-+{
-+    return parsedUrl();
-+}
-+#endif
-+
- // ------------------------------------------------------------------------
- 
- bool DOM::strcasecmp( const DOMString &as, const DOMString &bs )

diff --git a/kde-base/kdelibs/kdelibs-4.14.6-r1.ebuild b/kde-base/kdelibs/kdelibs-4.14.6-r1.ebuild
deleted file mode 100644
index 8ca2f8f..0000000
--- a/kde-base/kdelibs/kdelibs-4.14.6-r1.ebuild
+++ /dev/null
@@ -1,307 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: $
-
-EAPI=5
-
-CPPUNIT_REQUIRED="optional"
-DECLARATIVE_REQUIRED="always"
-OPENGL_REQUIRED="optional"
-KDE_HANDBOOK="optional"
-inherit kde4-base fdo-mime multilib toolchain-funcs flag-o-matic
-
-EGIT_BRANCH="KDE/4.14"
-
-DESCRIPTION="KDE libraries needed by all KDE programs"
-
-KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux"
-LICENSE="LGPL-2.1"
-IUSE="cpu_flags_x86_3dnow acl alsa altivec +bzip2 +crypt debug doc fam jpeg2k
-kerberos lzma cpu_flags_x86_mmx nepomuk nls openexr +policykit spell
-cpu_flags_x86_sse cpu_flags_x86_sse2 ssl +udev +udisks +upower zeroconf"
-
-REQUIRED_USE="
-	udisks? ( udev )
-	upower? ( udev )
-"
-
-# needs the kate regression testsuite from svn
-RESTRICT="test"
-
-COMMONDEPEND="
-	>=app-misc/strigi-0.7.7
-	app-text/docbook-xml-dtd:4.2
-	app-text/docbook-xsl-stylesheets
-	>=dev-libs/libattica-0.4.2
-	>=dev-libs/libdbusmenu-qt-0.3.2[qt4(+)]
-	dev-libs/libpcre[unicode]
-	dev-libs/libxml2
-	dev-libs/libxslt
-	media-libs/fontconfig
-	media-libs/freetype:2
-	media-libs/giflib
-	media-libs/libpng:0=
-	media-libs/phonon[qt4]
-	sys-libs/zlib
-	virtual/jpeg:0
-	>=x11-misc/shared-mime-info-0.60
-	acl? ( virtual/acl )
-	alsa? ( media-libs/alsa-lib )
-	!aqua? (
-		x11-libs/libICE
-		x11-libs/libSM
-		x11-libs/libX11
-		x11-libs/libXau
-		x11-libs/libXcursor
-		x11-libs/libXdmcp
-		x11-libs/libXext
-		x11-libs/libXfixes
-		x11-libs/libXft
-		x11-libs/libXpm
-		x11-libs/libXrender
-		x11-libs/libXScrnSaver
-		x11-libs/libXtst
-		!kernel_SunOS? (
-			|| (
-				sys-libs/libutempter
-				>=sys-freebsd/freebsd-lib-9.0
-			)
-		)
-	)
-	bzip2? ( app-arch/bzip2 )
-	crypt? ( app-crypt/qca:2[qt4(+)] )
-	fam? ( virtual/fam )
-	jpeg2k? ( media-libs/jasper )
-	kerberos? ( virtual/krb5 )
-	nepomuk? (
-		>=dev-libs/shared-desktop-ontologies-0.11.0
-		>=dev-libs/soprano-2.9.0[dbus,raptor,redland]
-	)
-	openexr? (
-		media-libs/openexr:=
-		media-libs/ilmbase:=
-	)
-	policykit? ( >=sys-auth/polkit-qt-0.103.0 )
-	spell? ( app-text/enchant )
-	ssl? ( dev-libs/openssl:0 )
-	udev? ( virtual/udev )
-	zeroconf? ( net-dns/avahi[mdnsresponder-compat] )
-"
-DEPEND="${COMMONDEPEND}
-	doc? ( app-doc/doxygen )
-	nls? ( virtual/libintl )
-"
-RDEPEND="${COMMONDEPEND}
-	!dev-qt/qtphonon
-	!<=kde-base/plasma-workspace-4.7.1:4
-	!<=kde-base/kcontrol-4.4.50:4
-	>=app-crypt/gnupg-2.0.11
-	app-misc/ca-certificates
-	$(add_kdebase_dep kde-env '' 4.14.3)
-	sys-apps/dbus[X]
-	!aqua? (
-		udisks? ( sys-fs/udisks:2 )
-		x11-apps/iceauth
-		x11-apps/rgb
-		>=x11-misc/xdg-utils-1.0.2-r3
-		upower? ( || ( >=sys-power/upower-0.9.23 sys-power/upower-pm-utils ) )
-	)
-	udev? ( app-misc/media-player-info )
-"
-PDEPEND="
-	$(add_kdebase_dep katepart '' 4.14.3)
-	|| (
-		$(add_kdebase_dep kfmclient '' 4.14.3)
-		x11-misc/xdg-utils
-	)
-	handbook? (
-		|| (
-			$(add_kdebase_dep khelpcenter '' 4.14.3)
-			kde-plasma/khelpcenter:5[compat(+)]
-		)
-	)
-	nepomuk? (
-		$(add_kdebase_dep nepomuk-core '' 4.14.3)
-		$(add_kdebase_dep nepomuk-widgets '' 4.14.3)
-	)
-	policykit? ( || (
-		>=sys-auth/polkit-kde-agent-0.99
-		kde-plasma/polkit-kde-agent
-	) )
-"
-
-PATCHES=(
-	"${FILESDIR}/dist/01_gentoo_set_xdg_menu_prefix-1.patch"
-	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
-	"${FILESDIR}/${PN}-4.14.5-fatalwarnings.patch"
-	"${FILESDIR}/${PN}-4.14.5-mimetypes.patch"
-	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
-	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
-	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-	"${FILESDIR}/${PN}-4.9.3-werror.patch"
-	"${FILESDIR}/${PN}-4.10.0-udisks.patch"
-	"${FILESDIR}/${PN}-4.15.6-fix-bic.patch"
-)
-
-pkg_pretend() {
-	if [[ ${MERGE_TYPE} != binary ]]; then
-		[[ $(gcc-major-version) -lt 4 ]] || \
-				( [[ $(gcc-major-version) -eq 4 && $(gcc-minor-version) -le 3 ]] ) \
-			&& die "Sorry, but gcc-4.3 and earlier won't work for KDE SC 4.6 (see bug #354837)."
-	fi
-}
-
-src_prepare() {
-	kde4-base_src_prepare
-
-	# Rename applications.menu (needs 01_gentoo_set_xdg_menu_prefix-1.patch to work)
-	sed -e 's|FILES[[:space:]]applications.menu|FILES applications.menu RENAME kde-4-applications.menu|g' \
-		-i kded/CMakeLists.txt || die "Sed on CMakeLists.txt for applications.menu failed."
-
-	if use aqua; then
-		sed -i -e \
-			"s:BUNDLE_INSTALL_DIR \"/Applications:BUNDLE_INSTALL_DIR \"${EPREFIX}/${APP_BUNDLE_DIR}:g" \
-			cmake/modules/FindKDE4Internal.cmake || die "failed to sed FindKDE4Internal.cmake"
-
-		#if [[ ${CHOST} == *-darwin8 ]]; then
-		sed -i -e \
-			"s:set(_add_executable_param MACOSX_BUNDLE):remove(_add_executable_param MACOSX_BUNDLE):g" \
-			cmake/modules/KDE4Macros.cmake || die "failed to sed KDE4Macros.cmake"
-		#fi
-
-		# solid/solid/backends/iokit doesn't properly link, so disable it.
-		sed -e "s|\(APPLE\)|(FALSE)|g" -i solid/solid/CMakeLists.txt \
-			|| die "disabling solid/solid/backends/iokit failed"
-		sed -e "s|m_backend = .*Backends::IOKit.*;|m_backend = 0;|g" -i solid/solid/managerbase.cpp \
-			|| die "disabling solid/solid/backends/iokit failed"
-
-		# There's no fdatasync on OSX and the check fails to detect that.
-		sed -e "/HAVE_FDATASYNC/ d" -i config.h.cmake \
-			|| die "disabling fdatasync failed"
-
-		# Fix nameser include to nameser8_compat
-		sed -e "s|nameser8_compat.h|nameser_compat.h|g" -i kio/misc/kpac/discovery.cpp \
-			|| die "fixing nameser include failed"
-		append-flags -DHAVE_ARPA_NAMESER8_COMPAT_H=1
-
-		# Try to fix kkeyserver_mac
-		epatch "${FILESDIR}"/${PN}-4.3.80-kdeui_util_kkeyserver_mac.patch
-	fi
-}
-
-src_configure() {
-	local mycmakeargs=(
-		-DWITH_HSPELL=OFF
-		-DWITH_ASPELL=OFF
-		-DWITH_DNSSD=OFF
-		-DKDE_DEFAULT_HOME=.kde4
-		-DKAUTH_BACKEND=POLKITQT-1
-		-DBUILD_libkactivities=OFF
-		$(cmake-utils_use_build handbook doc)
-		$(cmake-utils_use_has cpu_flags_x86_3dnow X86_3DNOW)
-		$(cmake-utils_use_has altivec PPC_ALTIVEC)
-		$(cmake-utils_use_has cpu_flags_x86_mmx X86_MMX)
-		$(cmake-utils_use_has cpu_flags_x86_sse X86_SSE)
-		$(cmake-utils_use_has cpu_flags_x86_sse2 X86_SSE2)
-		$(cmake-utils_use_with acl)
-		$(cmake-utils_use_with alsa)
-		$(cmake-utils_use_with bzip2 BZip2)
-		$(cmake-utils_use_with crypt QCA2)
-		$(cmake-utils_use_with fam)
-		$(cmake-utils_use_with jpeg2k Jasper)
-		$(cmake-utils_use_with kerberos GSSAPI)
-		$(cmake-utils_use_with lzma LibLZMA)
-		$(cmake-utils_use_with nepomuk Soprano)
-		$(cmake-utils_use_with nepomuk SharedDesktopOntologies)
-		$(cmake-utils_use_with nls Libintl)
-		$(cmake-utils_use_with openexr OpenEXR)
-		$(cmake-utils_use_with opengl OpenGL)
-		$(cmake-utils_use_with policykit PolkitQt-1)
-		$(cmake-utils_use_with spell ENCHANT)
-		$(cmake-utils_use_with ssl OpenSSL)
-		$(cmake-utils_use_with udev UDev)
-		$(cmake-utils_use_with udisks SOLID_UDISKS2)
-		$(cmake-utils_use_with zeroconf Avahi)
-	)
-	kde4-base_src_configure
-}
-
-src_compile() {
-	kde4-base_src_compile
-
-	# The building of apidox is not managed anymore by the build system
-	if use doc; then
-		einfo "Building API documentation"
-		cd "${S}"/doc/api/
-		./doxygen.sh "${S}" || die "APIDOX generation failed"
-	fi
-}
-
-src_install() {
-	kde4-base_src_install
-
-	# use system certificates
-	rm -f "${ED}"/usr/share/apps/kssl/ca-bundle.crt || die
-	dosym /etc/ssl/certs/ca-certificates.crt /usr/share/apps/kssl/ca-bundle.crt
-
-	if use doc; then
-		einfo "Installing API documentation. This could take a bit of time."
-		cd "${S}"/doc/api/
-		docinto /HTML/en/kdelibs-apidox
-		dohtml -r ${P}-apidocs/*
-	fi
-
-	if use aqua; then
-		einfo "fixing ${PN} plugins"
-
-		local _PV=${PV:0:3}.0
-		local _dir=${EPREFIX}/usr/$(get_libdir)/kde4/plugins/script
-
-		install_name_tool -id \
-			"${_dir}/libkrossqtsplugin.${_PV}.dylib" \
-			"${D}/${_dir}/libkrossqtsplugin.${_PV}.dylib" \
-			|| die "failed fixing libkrossqtsplugin.${_PV}.dylib"
-
-		einfo "fixing ${PN} cmake detection files"
-		#sed -i -e \
-		#	"s:if (HAVE_XKB):if (HAVE_XKB AND NOT APPLE):g" \
-		echo -e "set(XKB_FOUND FALSE)\nset(HAVE_XKB FALSE)" > \
-			"${ED}"/usr/share/apps/cmake/modules/FindXKB.cmake \
-			|| die "failed fixing FindXKB.cmake"
-	fi
-
-	einfo Installing environment file.
-	# Since 44qt4 is sourced earlier QT_PLUGIN_PATH is defined.
-	echo "COLON_SEPARATED=QT_PLUGIN_PATH" > "${T}/77kde"
-	echo "QT_PLUGIN_PATH=${EPREFIX}/usr/$(get_libdir)/kde4/plugins" >> "${T}/77kde"
-	doenvd "${T}/77kde"
-}
-
-pkg_postinst() {
-	fdo-mime_mime_database_update
-
-	if use zeroconf; then
-		echo
-		elog "To make zeroconf support available in KDE make sure that the avahi daemon"
-		elog "is running."
-		echo
-		einfo "If you also want to use zeroconf for hostname resolution, emerge sys-auth/nss-mdns"
-		einfo "and enable multicast dns lookups by editing the 'hosts:' line in /etc/nsswitch.conf"
-		einfo "to include 'mdns', e.g.:"
-		einfo "	hosts: files mdns dns"
-		echo
-	fi
-
-	kde4-base_pkg_postinst
-}
-
-pkg_prerm() {
-	# Remove ksycoca4 global database
-	rm -f "${EROOT}${PREFIX}"/share/kde4/services/ksycoca4
-}
-
-pkg_postrm() {
-	fdo-mime_mime_database_update
-
-	kde4-base_pkg_postrm
-}


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2013-02-08 12:46 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2013-02-08 12:46 UTC (permalink / raw
  To: gentoo-commits

commit:     f883abbf7693dacf60f700498ba496c69c2aeac8
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Thu Feb  7 17:18:17 2013 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Fri Feb  8 12:46:05 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=f883abbf

[kde-base/kdelibs] Add patch by Franz Fellner <alpine.art.de <AT> googlemail.com> to make udisks support optional, wrt bug #455792.

Package-Manager: portage-2.1.11.50

---
 kde-base/kdelibs/files/kdelibs-4.10.0-udisks.patch |   51 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild       |   10 ++--
 kde-base/kdelibs/kdelibs-9999.ebuild               |    8 ++-
 kde-base/kdelibs/metadata.xml                      |    1 +
 4 files changed, 63 insertions(+), 7 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.10.0-udisks.patch b/kde-base/kdelibs/files/kdelibs-4.10.0-udisks.patch
new file mode 100644
index 0000000..7de5ec9
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.10.0-udisks.patch
@@ -0,0 +1,51 @@
+udisks1 is deprecated and going away, so removing this clause
+will permit us to build without udisks at all.
+
+--- solid/solid/CMakeLists.txt
++++ solid/solid/CMakeLists.txt
+@@ -283,20 +283,6 @@
+            backends/udisks2/udisksgenericinterface.cpp
+            backends/udisks2/dbus/manager.cpp
+            )
+-       else ( WITH_SOLID_UDISKS2 )
+-           message(STATUS "Building Solid UDisks backend." )
+-           set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-           backends/udisks/udisksmanager.cpp
+-           backends/udisks/udisksdevice.cpp
+-           backends/udisks/udisksblock.cpp
+-           backends/udisks/udisksstoragevolume.cpp
+-           backends/udisks/udisksdeviceinterface.cpp
+-           backends/udisks/udisksopticaldisc.cpp
+-           backends/udisks/udisksopticaldrive.cpp
+-           backends/udisks/udisksstoragedrive.cpp
+-           backends/udisks/udisksstorageaccess.cpp
+-           backends/udisks/udisksgenericinterface.cpp
+-          )
+        endif ( WITH_SOLID_UDISKS2 )
+    endif (CMAKE_SYSTEM_NAME MATCHES Linux)
+
+--- solid/solid/managerbase.cpp
++++ solid/solid/managerbase.cpp
+@@ -33,8 +33,6 @@
+ #include "backends/hal/halmanager.h"
+ #if defined (WITH_SOLID_UDISKS2)
+ #include "backends/udisks2/udisksmanager.h"
+-#else
+-#include "backends/udisks/udisksmanager.h"
+ #endif
+ #include "backends/upower/upowermanager.h"
+ 
+@@ -88,11 +86,9 @@
+                     m_backends << new Solid::Backends::UDev::UDevManager(0);
+ #               endif
+ #		if defined(WITH_SOLID_UDISKS2)
+-                m_backends << new Solid::Backends::UDisks2::Manager(0)
+-#		else
+-                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
++                m_backends << new Solid::Backends::UDisks2::Manager(0);
+ #		endif
+-                           << new Solid::Backends::UPower::UPowerManager(0)
++                m_backends << new Solid::Backends::UPower::UPowerManager(0)
+                            << new Solid::Backends::Fstab::FstabManager(0);
+             }
+ #        endif

diff --git a/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild
index ca8a960..7aabd7e 100644
--- a/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild
@@ -10,17 +10,18 @@ OPENGL_REQUIRED="optional"
 KDE_HANDBOOK="optional"
 inherit kde4-base fdo-mime multilib toolchain-funcs flag-o-matic
 
-EGIT_BRANCH="master"
+EGIT_BRANCH="KDE/4.10"
 
 DESCRIPTION="KDE libraries needed by all KDE programs."
 
 KEYWORDS=""
 LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam jpeg2k kerberos lzma
-mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev
+mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
 +upower upnp zeroconf"
 
 REQUIRED_USE="
+	udisks? ( udev )
 	upower? ( udev )
 "
 
@@ -98,7 +99,7 @@ RDEPEND="${COMMONDEPEND}
 	$(add_kdebase_dep kde-env)
 	sys-apps/dbus[X]
 	!aqua? (
-		sys-fs/udisks:2
+		udisks? ( sys-fs/udisks:2 )
 		x11-apps/iceauth
 		x11-apps/rgb
 		>=x11-misc/xdg-utils-1.0.2-r3
@@ -137,6 +138,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
+	"${FILESDIR}/${PN}-4.10.0-udisks.patch"
 )
 
 pkg_pretend() {
@@ -191,7 +193,6 @@ src_configure() {
 		-DWITH_HSPELL=OFF
 		-DWITH_ASPELL=OFF
 		-DWITH_DNSSD=OFF
-		-DWITH_SOLID_UDISKS2=ON
 		-DKDE_DEFAULT_HOME=.kde4
 		-DKAUTH_BACKEND=POLKITQT-1
 		-DBUILD_libkactivities=OFF
@@ -217,6 +218,7 @@ src_configure() {
 		$(cmake-utils_use_with spell ENCHANT)
 		$(cmake-utils_use_with ssl OpenSSL)
 		$(cmake-utils_use_with udev UDev)
+		$(cmake-utils_use_with udisks SOLID_UDISKS2)
 		$(cmake-utils_use_with upnp HUpnp)
 		$(cmake-utils_use_with zeroconf Avahi)
 	)

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index ca8a960..ed576e6 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -17,10 +17,11 @@ DESCRIPTION="KDE libraries needed by all KDE programs."
 KEYWORDS=""
 LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam jpeg2k kerberos lzma
-mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev
+mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
 +upower upnp zeroconf"
 
 REQUIRED_USE="
+	udisks? ( udev )
 	upower? ( udev )
 "
 
@@ -98,7 +99,7 @@ RDEPEND="${COMMONDEPEND}
 	$(add_kdebase_dep kde-env)
 	sys-apps/dbus[X]
 	!aqua? (
-		sys-fs/udisks:2
+		udisks? ( sys-fs/udisks:2 )
 		x11-apps/iceauth
 		x11-apps/rgb
 		>=x11-misc/xdg-utils-1.0.2-r3
@@ -137,6 +138,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
+	"${FILESDIR}/${PN}-4.10.0-udisks.patch"
 )
 
 pkg_pretend() {
@@ -191,7 +193,6 @@ src_configure() {
 		-DWITH_HSPELL=OFF
 		-DWITH_ASPELL=OFF
 		-DWITH_DNSSD=OFF
-		-DWITH_SOLID_UDISKS2=ON
 		-DKDE_DEFAULT_HOME=.kde4
 		-DKAUTH_BACKEND=POLKITQT-1
 		-DBUILD_libkactivities=OFF
@@ -217,6 +218,7 @@ src_configure() {
 		$(cmake-utils_use_with spell ENCHANT)
 		$(cmake-utils_use_with ssl OpenSSL)
 		$(cmake-utils_use_with udev UDev)
+		$(cmake-utils_use_with udisks SOLID_UDISKS2)
 		$(cmake-utils_use_with upnp HUpnp)
 		$(cmake-utils_use_with zeroconf Avahi)
 	)

diff --git a/kde-base/kdelibs/metadata.xml b/kde-base/kdelibs/metadata.xml
index 5f0250f..ea382c5 100644
--- a/kde-base/kdelibs/metadata.xml
+++ b/kde-base/kdelibs/metadata.xml
@@ -4,6 +4,7 @@
   <herd>kde</herd>
   <use>
 	<flag name="opengl">Enable OpenGL support for Plasma (GLApplet)</flag>
+	<flag name="udisks">Use udisks for block device access (e.g., automounting)</flag>
 	<flag name="upower">Use upower for power management</flag>
 	<flag name="upnp">Build the Solid backend to provide information about UPnP devices on the network</flag>
   </use>


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2013-01-31 16:15 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2013-01-31 16:15 UTC (permalink / raw
  To: gentoo-commits

commit:     797e8400f92c9d8d723ecce57f17871b42e4f898
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 31 16:14:58 2013 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Thu Jan 31 16:14:58 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=797e8400

[kde-base/kdelibs] Remove unused patches. Clean metadata.

Package-Manager: portage-2.1.11.50

---
 .../files/kdelibs-4.8.95-udisks2-includes.patch    |   48 ----
 .../kdelibs/files/kdelibs-4.9.90-findkipi.patch    |  242 --------------------
 .../files/kdelibs-4.9.95-findsomething.patch       |  242 --------------------
 kde-base/kdelibs/metadata.xml                      |    2 -
 4 files changed, 0 insertions(+), 534 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2-includes.patch b/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2-includes.patch
deleted file mode 100644
index d8ece11..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2-includes.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp	2012-06-28 00:14:38.443073422 +0200
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.cpp	2012-06-28 00:18:20.459086056 +0200
-@@ -27,7 +27,7 @@
- #include <QtCore/QFile>
- #include <QtDBus/QDBusConnection>
- 
--#include "../shared/udevqtclient.h"
-+#include "../shared/udevqt.h"
- 
- #include "udisks2.h"
- #include "udisksopticaldisc.h"
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-28 00:14:38.444073422 +0200
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-28 00:15:14.569076596 +0200
-@@ -24,7 +24,7 @@
- 
- #include <solid/ifaces/opticaldisc.h>
- 
--#include "../shared/udevqtdevice.h"
-+#include "../shared/udevqt.h"
- 
- #include "udisksstoragevolume.h"
- #include "udisksdevice.h"
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp	2012-06-28 00:14:38.445073422 +0200
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.cpp	2012-06-28 00:18:02.424084839 +0200
-@@ -21,7 +21,7 @@
- 
- #include "udisksstoragedrive.h"
- 
--#include "../shared/udevqtclient.h"
-+#include "../shared/udevqt.h"
- 
- #include <QtCore/QDebug>
- #include <QtCore/QFile>
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-28 00:14:38.445073422 +0200
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-28 00:15:14.569076596 +0200
-@@ -24,7 +24,7 @@
- 
- #include <ifaces/storagedrive.h>
- 
--#include "../shared/udevqtdevice.h"
-+#include "../shared/udevqt.h"
- 
- #include "udisksblock.h"
- 

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.90-findkipi.patch b/kde-base/kdelibs/files/kdelibs-4.9.90-findkipi.patch
deleted file mode 100644
index 050262f..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.9.90-findkipi.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-diff -ruN kdelibs-4.9.90.orig/cmake/modules/FindKipi.cmake kdelibs-4.9.90/cmake/modules/FindKipi.cmake
---- kdelibs-4.9.90.orig/cmake/modules/FindKipi.cmake	2012-11-14 16:58:29.000000000 +0100
-+++ kdelibs-4.9.90/cmake/modules/FindKipi.cmake	2012-12-17 22:21:25.000000000 +0100
-@@ -1,116 +1,133 @@
--# - Try to find the Kipi library
-+# Module that tries to find the Kipi library
- #
--# If you have put a local version of libkipi into your source tree,
--# set KIPI_LOCAL_DIR to the relative path to the local directory.
-+# Input values :
- #
--# Once done this will define
-+# KIPI_LOCAL_DIR    - If you have put a local version of libkipi into your source tree,
-+#                     set this variable to the relative path from the local directory.
- #
--#  KIPI_FOUND - system has libkipi
--#  KIPI_INCLUDE_DIR - the libkipi include directory
--#  KIPI_LIBRARIES - Link these to use libkipi
-+# Output values :
-+#
-+#  KIPI_FOUND       - System has libkipi
-+#  KIPI_INCLUDE_DIR - The libkipi include directory
-+#  KIPI_LIBRARIES   - Link these to use libkipi
- #  KIPI_DEFINITIONS - Compiler switches required for using libkipi
-+#  KIPI_VERSION     - The release version of the Kipi library
-+#  KIPI_SO_VERSION  - The binary SO version of the Kipi library
- #
- 
--# Copyright (c) 2008, Gilles Caulier, <caulier.gilles@gmail.com>
-+# Copyright (c) 2012, Victor Dodon <dodonvictor at gmail dot com>
-+# Copyright (c) 2012, Gilles Caulier <caulier dot gilles at gmail dot com>
- #
- # Redistribution and use is allowed according to the terms of the BSD license.
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
- 
--if (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS)
--
--  message(STATUS "Found Kipi library in cache: ${KIPI_LIBRARIES}")
--
--  # in cache already
--  set(KIPI_FOUND TRUE)
--
--else (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS)
-+IF(${Kipi_FIND_VERSION} STREQUAL "")
-+    SET(Kipi_FIND_VERSION "1.2.0")
-+    MESSAGE(STATUS "No Kipi library version required. Check default version : ${Kipi_FIND_VERSION}")
-+ELSE()
-+    MESSAGE(STATUS "Kipi library version required : ${Kipi_FIND_VERSION}")
-+ENDIF()
-+
-+IF(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)
-+
-+  IF(NOT Kipi_FIND_QUIETLY)
-+    MESSAGE(STATUS "Found kipi library in cache ${KIPI_LIBRARIES}")
-+  ENDIF(NOT Kipi_FIND_QUIETLY)
-+  # Already in cache
-+  SET(KIPI_FOUND TRUE)
-+
-+ELSE(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)
-+
-+  IF(NOT Kipi_FIND_QUIETLY)
-+    MESSAGE(STATUS "Check Kipi library in local sub-folder...")
-+  ENDIF(NOT Kipi_FIND_QUIETLY)
-+
-+  IF(KIPI_LOCAL_DIR)
-+    FIND_FILE(KIPI_LOCAL_FOUND libkipi/version.h.cmake ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR} NO_DEFAULT_PATH)
-+    IF(NOT KIPI_LOCAL_FOUND)
-+      MESSAGE(WARNING "KIPI_LOCAL_DIR specified as \"${KIPI_LOCAL_DIR}\" but libkipi could not be found there.")
-+    ENDIF(NOT KIPI_LOCAL_FOUND)
-+  ELSE(KIPI_LOCAL_DIR)
-+    FIND_FILE(KIPI_LOCAL_FOUND libkipi/version.h.cmake ${CMAKE_SOURCE_DIR}/libkipi NO_DEFAULT_PATH)
-+    IF(KIPI_LOCAL_FOUND)
-+      SET(KIPI_LOCAL_DIR libkipi)
-+    ENDIF(KIPI_LOCAL_FOUND)
-+
-+    FIND_FILE(KIPI_LOCAL_FOUND libkipi/version.h.cmake ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
-+    IF(KIPI_LOCAL_FOUND)
-+      SET(KIPI_LOCAL_DIR libs/libkipi)
-+    ENDIF(KIPI_LOCAL_FOUND)
-+  ENDIF(KIPI_LOCAL_DIR)
-+
-+  IF(KIPI_LOCAL_FOUND)
-+
-+    SET(KIPI_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
-+    SET(KIPI_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
-+    SET(KIPI_LIBRARIES kipi)
-+    IF(NOT Kipi_FIND_QUIETLY)
-+      MESSAGE(STATUS "Found Kipi library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}")
-+    ENDIF(NOT Kipi_FIND_QUIETLY)
-+    SET(KIPI_FOUND TRUE)
-+    SET(KIPI_VERSION_H_FILENAME "${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}/libkipi/version.h")
-+
-+  ELSE(KIPI_LOCAL_FOUND)
-+
-+    IF(NOT WIN32)
-+      IF(NOT Kipi_FIND_QUIETLY)
-+        MESSAGE(STATUS "Check Kipi library using pkg-config...")
-+      ENDIF(NOT Kipi_FIND_QUIETLY)
-+
-+      INCLUDE(FindPkgConfig)
-+      PKG_CHECK_MODULES(KIPI libkipi>=${Kipi_FIND_VERSION})
-+    ENDIF(NOT WIN32)
-+
-+    FIND_LIBRARY(KIPI_LIBRARIES NAMES libkipi PATHS ${KIPI_LIBRARY_DIRS} ${LIB_INSTALL_DIR} ${KDE4_LIB_DIR})
-+    FIND_PATH(KIPI_INCLUDE_DIR NAMES libkipi/version.h PATHS ${KIPI_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} ${KDE4_INCLUDE_DIR})
-+    SET(KIPI_VERSION_H_FILENAME "${KIPI_INCLUDE_DIR}/libkipi/version.h")
-+    SET(KIPI_DEFINITIONS ${KIPI_CFLAGS} CACHE STRING "Kipi defintions")
-+
-+    INCLUDE(FindPackageHandleStandardArgs)
-+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(KIPI DEFAULT_MSG KIPI_LIBRARIES KIPI_INCLUDE_DIR)
-+
-+  ENDIF(KIPI_LOCAL_FOUND)
-+
-+  IF(KIPI_FOUND)
-+
-+    IF(NOT KIPI_VERSION)
-+      FILE(READ "${KIPI_VERSION_H_FILENAME}" KIPI_VERSION_H_CONTENT)
-+      STRING(REGEX REPLACE ".*static +const +char +kipi_version\\[\\] += +\"([^\"]+)\".*" "\\1" KIPI_VERSION "${KIPI_VERSION_H_CONTENT}")
-+      MESSAGE(STATUS "Kipi library version: ${KIPI_VERSION}")
-+    ENDIF(NOT KIPI_VERSION)
-+
-+    IF(NOT KIPI_SO_VERSION)
-+      FILE(READ "${KIPI_VERSION_H_FILENAME}" KIPI_VERSION_H_CONTENT)
-+      STRING(REGEX REPLACE
-+             ".*static +const +int +kipi_binary_version +=  ([^ ;]+).*"
-+             "\\1"
-+             KIPI_SO_VERSION_FOUND
-+             "${KIPI_VERSION_H_CONTENT}"
-+            )
-+      SET(KIPI_SO_VERSION ${KIPI_SO_VERSION_FOUND} CACHE STRING "libkipi so version")
-+      MESSAGE(STATUS "Kipi library SO binary version: ${KIPI_SO_VERSION}")
-+    ENDIF(NOT KIPI_SO_VERSION)
-+
-+    UNSET(KIPI_VERSION_H_CONTENT)
-+    UNSET(KIPI_VERSION_H_FILENAME)
-+  ENDIF(KIPI_FOUND)
-+
-+  IF(KIPI_FOUND)
-+    MESSAGE(STATUS "libkipi: Found version ${KIPI_VERSION} (required: ${Kipi_FIND_VERSION})")
-+    IF(${KIPI_VERSION} VERSION_LESS ${Kipi_FIND_VERSION})
-+        SET(KIPI_FOUND FALSE)
-+    ELSE()
-+        MARK_AS_ADVANCED(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS KIPI_VERSION KIPI_SO_VERSION)
-+    ENDIF()
-+  ELSE(KIPI_FOUND)
-+    UNSET(KIPI_INCLUDE_DIR)
-+    UNSET(KIPI_LIBRARIES)
-+    UNSET(KIPI_DEFINITIONS)
-+    UNSET(KIPI_VERSION)
-+    UNSET(KIPI_SO_VERSION)
-+  ENDIF(KIPI_FOUND)
- 
--  message(STATUS "Check Kipi library in local sub-folder...")
--
--  # Check if library is not in local sub-folder
--
--  if (KIPI_LOCAL_DIR)
--    set (KIPI_LOCAL_FOUND TRUE)
--  else (KIPI_LOCAL_DIR)
--    find_file(KIPI_LOCAL_FOUND libkipi/kipi.h ${CMAKE_SOURCE_DIR}/libkipi ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
--
--    if (KIPI_LOCAL_FOUND)
--      # Was it found in libkdcraw/ or in libs/libkdcraw?
--      find_file(KIPI_LOCAL_FOUND_IN_LIBS libkipi/kipi.h ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
--      if (KIPI_LOCAL_FOUND_IN_LIBS)
--        set(KIPI_LOCAL_DIR libs/libkipi)
--      else (KIPI_LOCAL_FOUND_IN_LIBS)
--        set(KIPI_LOCAL_DIR libkipi)
--      endif (KIPI_LOCAL_FOUND_IN_LIBS)
--    endif (KIPI_LOCAL_FOUND)
--  endif (KIPI_LOCAL_DIR)
--
--  if (KIPI_LOCAL_FOUND)
--    # we need two include directories: because the version.h file is put into the build directory
--    # TODO KIPI_INCLUDE_DIR sounds like it should contain only one directory...
--    set(KIPI_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR} ${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR})
--    set(KIPI_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
--    set(KIPI_LIBRARIES kipi)
--    message(STATUS "Found Kipi library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}")
--    set(KIPI_FOUND TRUE)
--    mark_as_advanced(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS)
--
--  else (KIPI_LOCAL_FOUND)
--
--    if (NOT WIN32)
--      message(STATUS "Check Kipi library using pkg-config...")
--
--      # use pkg-config to get the directories and then use these values
--      # in the FIND_PATH() and FIND_LIBRARY() calls
--      include(UsePkgConfig)
--
--      PKGCONFIG(libkipi _KIPIIncDir _KIPILinkDir _KIPILinkFlags _KIPICflags)
--
--      if (_KIPILinkFlags)
--        # query pkg-config asking for a libkipi >= 0.2.0
--        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkipi RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
--        if (_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkipi release >= 0.2.0")
--            set(KIPI_VERSION_GOOD_FOUND TRUE)
--        else (_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkipi release < 0.2.0, too old")
--            set(KIPI_VERSION_GOOD_FOUND FALSE)
--            set(KIPI_FOUND FALSE)
--        endif (_return_VALUE STREQUAL "0")
--      else (_KIPILinkFlags)
--        set(KIPI_VERSION_GOOD_FOUND FALSE)
--        set(KIPI_FOUND FALSE)
--      endif (_KIPILinkFlags)
--    else (NOT WIN32)
--      set(KIPI_VERSION_GOOD_FOUND TRUE)
--    endif (NOT WIN32)
--    if (KIPI_VERSION_GOOD_FOUND)
--        set(KIPI_DEFINITIONS ${_KIPICflags})
--
--        find_path(KIPI_INCLUDE_DIR NAMES libkipi/version.h PATHS ${KDE4_INCLUDE_DIR} ${_KIPIIncDir})
--        find_library(KIPI_LIBRARIES NAMES kipi PATHS ${KDE4_LIB_DIR} ${_KIPILinkDir})
--
--        if (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES)
--            set(KIPI_FOUND TRUE)
--        endif (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES)
--      endif (KIPI_VERSION_GOOD_FOUND)
--      if (KIPI_FOUND)
--          if (NOT Kipi_FIND_QUIETLY)
--              message(STATUS "Found libkipi: ${KIPI_LIBRARIES}")
--          endif (NOT Kipi_FIND_QUIETLY)
--      else (KIPI_FOUND)
--          if (Kipi_FIND_REQUIRED)
--              if (NOT KIPI_INCLUDE_DIR)
--                  message(FATAL_ERROR "Could NOT find libkipi header files")
--              endif (NOT KIPI_INCLUDE_DIR)
--              if (NOT KIPI_LIBRARIES)
--                  message(FATAL_ERROR "Could NOT find libkipi library")
--              endif (NOT KIPI_LIBRARIES)
--          endif (Kipi_FIND_REQUIRED)
--      endif (KIPI_FOUND)
--
--    mark_as_advanced(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS)
--
--  endif (KIPI_LOCAL_FOUND)
--  
--endif (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS)
-+ENDIF(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.95-findsomething.patch b/kde-base/kdelibs/files/kdelibs-4.9.95-findsomething.patch
deleted file mode 100644
index 9963130..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.9.95-findsomething.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-diff -wruN kdelibs-4.9.95.orig/cmake/modules/FindKdcraw.cmake kdelibs-4.9.95/cmake/modules/FindKdcraw.cmake
---- kdelibs-4.9.95.orig/cmake/modules/FindKdcraw.cmake	2012-12-17 15:14:16.000000000 +0100
-+++ kdelibs-4.9.95/cmake/modules/FindKdcraw.cmake	2012-12-28 21:20:21.000000000 +0100
-@@ -1,107 +1,121 @@
--# - Try to find the Kdcraw library
-+# Try to find the Kdcraw library
- #
--# If you have put a local version of libkdcraw into your source tree,
--# set KDCRAW_LOCAL_DIR to the relative path to the local directory.
-+# Parameters:
-+#  KDCRAW_LOCAL_DIR - If you have put a local version of libkdcraw into
-+#                     your source tree, set KDCRAW_LOCAL_DIR to the
-+#                     relative path from the root of your source tree
-+#                     to the libkdcraw local directory.
- #
- # Once done this will define
- #
--#  KDCRAW_FOUND - system has libkdcraw
--#  KDCRAW_INCLUDE_DIR - the libkdcraw include directory
-+#  KDCRAW_FOUND - System has libkdcraw
-+#  KDCRAW_INCLUDE_DIR - The libkdcraw include directory/directories (for #include <libkdcraw/...> style)
- #  KDCRAW_LIBRARIES - Link these to use libkdcraw
- #  KDCRAW_DEFINITIONS - Compiler switches required for using libkdcraw
-+#  KDCRAW_VERSION - Version of libkdcraw which was found
- #
--
--# Copyright (c) 2008, Gilles Caulier, <caulier.gilles@gmail.com>
-+# Copyright (c) 2008-2011, Gilles Caulier, <caulier.gilles@gmail.com>
-+# Copyright (c) 2011, Michael G. Hansen, <mike@mghansen.de>
- #
- # Redistribution and use is allowed according to the terms of the BSD license.
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
- 
-+# Kdcraw_FIND_QUIETLY and Kdcraw_FIND_REQUIRED may be defined by CMake.
- 
--if (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS)
-+if (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS AND KDCRAW_VERSION)
- 
-+  if (NOT Kdcraw_FIND_QUIETLY)
-   message(STATUS "Found Kdcraw library in cache: ${KDCRAW_LIBRARIES}")
-+  endif (NOT Kdcraw_FIND_QUIETLY)
- 
-   # in cache already
-   set(KDCRAW_FOUND TRUE)
- 
--else (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS)
-+else (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS AND KDCRAW_VERSION)
- 
--  message(STATUS "Check Kdcraw library in local sub-folder...")
--
--  # Check if library is not in local sub-folder
-+  if (NOT Kdcraw_FIND_QUIETLY)
-+    message(STATUS "Check for Kdcraw library in local sub-folder...")
-+  endif (NOT Kdcraw_FIND_QUIETLY)
- 
-+  # Check for a local version of the library.
-   if (KDCRAW_LOCAL_DIR)
--    set (KDCRAW_LOCAL_FOUND TRUE)
-+    find_file(KDCRAW_LOCAL_FOUND libkdcraw/version.h.cmake ${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR} NO_DEFAULT_PATH)
-+    if (NOT KDCRAW_LOCAL_FOUND)
-+      message(WARNING "KDCRAW_LOCAL_DIR specified as \"${KDCRAW_LOCAL_DIR}\" but libkdcraw could not be found there.")
-+    endif (NOT KDCRAW_LOCAL_FOUND)
-   else (KDCRAW_LOCAL_DIR)
--    find_file(KDCRAW_LOCAL_FOUND libkdcraw/kdcraw.h ${CMAKE_SOURCE_DIR}/libkdcraw ${CMAKE_SOURCE_DIR}/libs/libkdcraw NO_DEFAULT_PATH)
--
-+    find_file(KDCRAW_LOCAL_FOUND libkdcraw/version.h.cmake ${CMAKE_SOURCE_DIR}/libkdcraw NO_DEFAULT_PATH)
-     if (KDCRAW_LOCAL_FOUND)
--      # Was it found in libkdcraw/ or in libs/libkdcraw?
--      find_file(KDCRAW_LOCAL_FOUND_IN_LIBS libkdcraw/kdcraw.h ${CMAKE_SOURCE_DIR}/libs/libkdcraw NO_DEFAULT_PATH)
--      if (KDCRAW_LOCAL_FOUND_IN_LIBS)
--        set(KDCRAW_LOCAL_DIR libs/libkdcraw)
--      else (KDCRAW_LOCAL_FOUND_IN_LIBS)
-         set(KDCRAW_LOCAL_DIR libkdcraw)
--      endif (KDCRAW_LOCAL_FOUND_IN_LIBS)
-+    endif (KDCRAW_LOCAL_FOUND)
-+    find_file(KDCRAW_LOCAL_FOUND libkdcraw/version.h.cmake ${CMAKE_SOURCE_DIR}/libs/libkdcraw NO_DEFAULT_PATH)
-+    if (KDCRAW_LOCAL_FOUND)
-+      set(KDCRAW_LOCAL_DIR libs/libkdcraw)
-     endif (KDCRAW_LOCAL_FOUND)
-   endif (KDCRAW_LOCAL_DIR)
- 
-   if (KDCRAW_LOCAL_FOUND)
--
--    # we need two include directories: because the version.h file is put into the build directory
-+    # We need two include directories: because the version.h file is put into the build directory
-     # TODO KDCRAW_INCLUDE_DIR sounds like it should contain only one directory...
-     set(KDCRAW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR} ${CMAKE_BINARY_DIR}/${KDCRAW_LOCAL_DIR})
-     set(KDCRAW_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KDCRAW_LOCAL_DIR}")
-     set(KDCRAW_LIBRARIES kdcraw)
-+    if (NOT Kdcraw_FIND_QUIETLY)
-     message(STATUS "Found Kdcraw library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR}")
-+    endif (NOT Kdcraw_FIND_QUIETLY)
-     set(KDCRAW_FOUND TRUE)
--    mark_as_advanced(KDCRAW_INCLUDE_DIR KDCRAW_LIBRARIES KDCRAW_DEFINITIONS)
- 
--  else(KDCRAW_LOCAL_FOUND)
-+    set(kdcraw_version_h_filename "${CMAKE_BINARY_DIR}/${KDCRAW_LOCAL_DIR}/libkdcraw/version.h")
- 
--    message(STATUS "Check Kdcraw library using pkg-config...")
-+  else (KDCRAW_LOCAL_FOUND)
-     if (NOT WIN32)
--      # use pkg-config to get the directories and then use these values
--      # in the FIND_PATH() and FIND_LIBRARY() calls
--      include(UsePkgConfig)
--    
--      PKGCONFIG(libkdcraw _KDCRAWIncDir _KDCRAWLinkDir _KDCRAWLinkFlags _KDCRAWCflags)
--    
--      if (_KDCRAWLinkFlags)
--        # query pkg-config asking for a libkdcraw >= 0.2.0
--        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkdcraw RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
--        if (_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkdcraw release >= 0.2.0")
--            set(KDCRAW_VERSION_GOOD_FOUND TRUE)
--        else (_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkdcaw release < 0.2.0, too old")
-+      if (NOT Kdcraw_FIND_QUIETLY)
-+        message(STATUS "Check Kdcraw library using pkg-config...")
-+      endif (NOT Kdcraw_FIND_QUIETLY)
-+
-+      # use FindPkgConfig to get the directories and then use these values
-+      # in the find_path() and find_library() calls
-+      include(FindPkgConfig)
-+
-+      pkg_check_modules(PC_KDCRAW libkdcraw)
-+
-+      if (PC_KDCRAW_FOUND)
-+        # make sure the version is >= 0.2.0
-+        # TODO: WHY?
-+        if (PC_KDCRAW_VERSION VERSION_LESS 0.2.0)
-+          message(STATUS "Found libkdcraw release < 0.2.0, too old")
-             set(KDCRAW_VERSION_GOOD_FOUND FALSE)
-             set(KDCRAW_FOUND FALSE)
--        endif (_return_VALUE STREQUAL "0")
--      else (_KDCRAWLinkFlags)
-+        else (PC_KDCRAW_VERSION VERSION_LESS 0.2.0)
-+          set(KDCRAW_VERSION "${PC_KDCRAW_VERSION}")
-+          if (NOT Kdcraw_FIND_QUIETLY)
-+            message(STATUS "Found libkdcraw release ${KDCRAW_VERSION}")
-+          endif (NOT Kdcraw_FIND_QUIETLY)
-+          set(KDCRAW_VERSION_GOOD_FOUND TRUE)
-+        endif (PC_KDCRAW_VERSION VERSION_LESS 0.2.0)
-+      else (PC_KDCRAW_FOUND)
-         set(KDCRAW_VERSION_GOOD_FOUND FALSE)
--        set(KDCRAW_FOUND FALSE)
--      endif (_KDCRAWLinkFlags)
-+      endif (PC_KDCRAW_FOUND)
-     else (NOT WIN32)
-+      # TODO: Why do we just assume the version is good?
-       set(KDCRAW_VERSION_GOOD_FOUND TRUE)
-     endif (NOT WIN32)
- 
-     if (KDCRAW_VERSION_GOOD_FOUND)
--        set(KDCRAW_DEFINITIONS "${_KDCRAWCflags}")
-+      set(KDCRAW_DEFINITIONS "${PC_KDCRAW_CFLAGS_OTHER}")
-+
-+      find_path(KDCRAW_INCLUDE_DIR libkdcraw/version.h ${PC_KDCRAW_INCLUDE_DIRS})
-+      set(kdcraw_version_h_filename "${KDCRAW_INCLUDE_DIR}/libkdcraw/version.h")
-     
--        find_path(KDCRAW_INCLUDE_DIR libkdcraw/version.h
--        ${_KDCRAWIncDir}
--        )
--    
--        find_library(KDCRAW_LIBRARIES NAMES kdcraw
--        PATHS
--        ${_KDCRAWLinkDir}
--        )
-+      find_library(KDCRAW_LIBRARIES NAMES kdcraw HINTS ${PC_KDCRAW_LIBRARY_DIRS})
-     
-         if (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES)
-             set(KDCRAW_FOUND TRUE)
-+      else (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES)
-+        set(KDCRAW_FOUND FALSE)
-         endif (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES)
-      endif (KDCRAW_VERSION_GOOD_FOUND) 
-+
-      if (KDCRAW_FOUND)
-          if (NOT Kdcraw_FIND_QUIETLY)
-              message(STATUS "Found libkdcraw: ${KDCRAW_LIBRARIES}")
-@@ -109,16 +123,35 @@
-      else (KDCRAW_FOUND)
-          if (Kdcraw_FIND_REQUIRED)
-              if (NOT KDCRAW_INCLUDE_DIR)
--                 message(FATAL_ERROR "Could NOT find libkdcraw header files")
-+          message(FATAL_ERROR "Could NOT find libkdcraw header files.")
-+        else(NOT KDCRAW_INCLUDE_DIR)
-+          message(FATAL_ERROR "Could NOT find libkdcraw library.")
-              endif (NOT KDCRAW_INCLUDE_DIR)
--             if (NOT KDCRAW_LIBRARIES)
--                 message(FATAL_ERROR "Could NOT find libkdcraw library")
--             endif (NOT KDCRAW_LIBRARIES)
-          endif (Kdcraw_FIND_REQUIRED)
-      endif (KDCRAW_FOUND)
-     
--    mark_as_advanced(KDCRAW_INCLUDE_DIR KDCRAW_LIBRARIES KDCRAW_DEFINITIONS)
--
-   endif(KDCRAW_LOCAL_FOUND)
-   
--endif (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS)
-+  if (KDCRAW_FOUND)
-+    # Find the version information, unless that was reported by pkg_search_module.
-+    if (NOT KDCRAW_VERSION)
-+      file(READ "${kdcraw_version_h_filename}" kdcraw_version_h_content)
-+      # This is the line we are trying to find: static const char kdcraw_version[] = "1.22.4-beta_5+dfsg";
-+      string(REGEX REPLACE ".*char +kdcraw_version\\[\\] += +\"([^\"]+)\".*" "\\1" KDCRAW_VERSION "${kdcraw_version_h_content}")
-+      unset(kdcraw_version_h_content)
-+
-+    endif (NOT KDCRAW_VERSION)
-+    unset(kdcraw_version_h_filename)
-+  endif (KDCRAW_FOUND)
-+
-+  if (KDCRAW_FOUND)
-+    mark_as_advanced(KDCRAW_INCLUDE_DIR KDCRAW_LIBRARIES KDCRAW_DEFINITIONS KDCRAW_VERSION KDCRAW_FOUND)
-+  else (KDCRAW_FOUND)
-+    # The library was not found, reset all related variables.
-+    unset(KDCRAW_INCLUDE_DIR)
-+    unset(KDCRAW_LIBRARIES)
-+    unset(KDCRAW_DEFINITIONS)
-+    unset(KDCRAW_VERSION)
-+  endif (KDCRAW_FOUND)
-+
-+endif (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS AND KDCRAW_VERSION)
-diff -wruN kdelibs-4.9.95.orig/cmake/modules/FindKexiv2.cmake kdelibs-4.9.95/cmake/modules/FindKexiv2.cmake
---- kdelibs-4.9.95.orig/cmake/modules/FindKexiv2.cmake	2012-12-17 15:14:16.000000000 +0100
-+++ kdelibs-4.9.95/cmake/modules/FindKexiv2.cmake	2012-12-28 21:19:39.000000000 +0100
-@@ -67,13 +67,13 @@
-       PKGCONFIG(libkexiv2 _KEXIV2IncDir _KEXIV2LinkDir _KEXIV2LinkFlags _KEXIV2Cflags)
-     
-       if(_KEXIV2LinkFlags)
--        # query pkg-config asking for a libkexiv2 >= 0.2.0
--        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
-+        # query pkg-config asking for a libkexiv2 >= 1.0.0
-+        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=1.0.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
-         if(_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkexiv2 release >= 0.2.0")
-+            message(STATUS "Found libkexiv2 release >= 1.0.0")
-             set(KEXIV2_VERSION_GOOD_FOUND TRUE)
-         else(_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkexiv2 release < 0.2.0, too old")
-+            message(STATUS "Found libkexiv2 release < 1.0.0, too old")
-             set(KEXIV2_VERSION_GOOD_FOUND FALSE)
-             set(KEXIV2_FOUND FALSE)
-         endif(_return_VALUE STREQUAL "0")

diff --git a/kde-base/kdelibs/metadata.xml b/kde-base/kdelibs/metadata.xml
index 5dfbf53..5f0250f 100644
--- a/kde-base/kdelibs/metadata.xml
+++ b/kde-base/kdelibs/metadata.xml
@@ -4,8 +4,6 @@
   <herd>kde</herd>
   <use>
 	<flag name="opengl">Enable OpenGL support for Plasma (GLApplet)</flag>
-	<flag name="udisks">Use udisks for block device access (e.g., automounting)</flag>
-	<flag name="udisks2">Use the udisks2 support backported from kf5</flag>
 	<flag name="upower">Use upower for power management</flag>
 	<flag name="upnp">Build the Solid backend to provide information about UPnP devices on the network</flag>
   </use>


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-12-28 20:22 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-12-28 20:22 UTC (permalink / raw
  To: gentoo-commits

commit:     a8861d0fd0c91d8e1075ad0370ae04fab1e06f3d
Author:     Andreas K. Huettel (dilfridge) <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 28 20:23:01 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Fri Dec 28 20:23:01 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=a8861d0f

[kde-base/kdelibs] Properly patch Findkexiv2 and FindKdcraw to newest version

---
 .../kdelibs/files/kdelibs-4.9.95-findkexiv2.patch  |   22 --
 .../files/kdelibs-4.9.95-findsomething.patch       |  242 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.9.95.ebuild             |    2 +-
 3 files changed, 243 insertions(+), 23 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.95-findkexiv2.patch b/kde-base/kdelibs/files/kdelibs-4.9.95-findkexiv2.patch
deleted file mode 100644
index 1161ed2..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.9.95-findkexiv2.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/cmake/modules/FindKexiv2.cmake b/cmake/modules/FindKexiv2.cmake
-index 4487537..8edd591 100644
---- a/cmake/modules/FindKexiv2.cmake
-+++ b/cmake/modules/FindKexiv2.cmake
-@@ -67,13 +67,13 @@ else (KEXIV2_INCLUDE_DIR AND KEXIV2_LIBRARIES AND KEXIV2_DEFINITIONS)
-       PKGCONFIG(libkexiv2 _KEXIV2IncDir _KEXIV2LinkDir _KEXIV2LinkFlags _KEXIV2Cflags)
- 
-       if(_KEXIV2LinkFlags)
--        # query pkg-config asking for a libkexiv2 >= 0.2.0
--        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
-+        # query pkg-config asking for a libkexiv2 >= 1.0.0
-+        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=1.0.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
-         if(_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkexiv2 release >= 0.2.0")
-+            message(STATUS "Found libkexiv2 release >= 1.0.0")
-             set(KEXIV2_VERSION_GOOD_FOUND TRUE)
-         else(_return_VALUE STREQUAL "0")
--            message(STATUS "Found libkexiv2 release < 0.2.0, too old")
-+            message(STATUS "Found libkexiv2 release < 1.0.0, too old")
-             set(KEXIV2_VERSION_GOOD_FOUND FALSE)
-             set(KEXIV2_FOUND FALSE)
-         endif(_return_VALUE STREQUAL "0")

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.95-findsomething.patch b/kde-base/kdelibs/files/kdelibs-4.9.95-findsomething.patch
new file mode 100644
index 0000000..9963130
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.9.95-findsomething.patch
@@ -0,0 +1,242 @@
+diff -wruN kdelibs-4.9.95.orig/cmake/modules/FindKdcraw.cmake kdelibs-4.9.95/cmake/modules/FindKdcraw.cmake
+--- kdelibs-4.9.95.orig/cmake/modules/FindKdcraw.cmake	2012-12-17 15:14:16.000000000 +0100
++++ kdelibs-4.9.95/cmake/modules/FindKdcraw.cmake	2012-12-28 21:20:21.000000000 +0100
+@@ -1,107 +1,121 @@
+-# - Try to find the Kdcraw library
++# Try to find the Kdcraw library
+ #
+-# If you have put a local version of libkdcraw into your source tree,
+-# set KDCRAW_LOCAL_DIR to the relative path to the local directory.
++# Parameters:
++#  KDCRAW_LOCAL_DIR - If you have put a local version of libkdcraw into
++#                     your source tree, set KDCRAW_LOCAL_DIR to the
++#                     relative path from the root of your source tree
++#                     to the libkdcraw local directory.
+ #
+ # Once done this will define
+ #
+-#  KDCRAW_FOUND - system has libkdcraw
+-#  KDCRAW_INCLUDE_DIR - the libkdcraw include directory
++#  KDCRAW_FOUND - System has libkdcraw
++#  KDCRAW_INCLUDE_DIR - The libkdcraw include directory/directories (for #include <libkdcraw/...> style)
+ #  KDCRAW_LIBRARIES - Link these to use libkdcraw
+ #  KDCRAW_DEFINITIONS - Compiler switches required for using libkdcraw
++#  KDCRAW_VERSION - Version of libkdcraw which was found
+ #
+-
+-# Copyright (c) 2008, Gilles Caulier, <caulier.gilles@gmail.com>
++# Copyright (c) 2008-2011, Gilles Caulier, <caulier.gilles@gmail.com>
++# Copyright (c) 2011, Michael G. Hansen, <mike@mghansen.de>
+ #
+ # Redistribution and use is allowed according to the terms of the BSD license.
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+ 
++# Kdcraw_FIND_QUIETLY and Kdcraw_FIND_REQUIRED may be defined by CMake.
+ 
+-if (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS)
++if (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS AND KDCRAW_VERSION)
+ 
++  if (NOT Kdcraw_FIND_QUIETLY)
+   message(STATUS "Found Kdcraw library in cache: ${KDCRAW_LIBRARIES}")
++  endif (NOT Kdcraw_FIND_QUIETLY)
+ 
+   # in cache already
+   set(KDCRAW_FOUND TRUE)
+ 
+-else (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS)
++else (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS AND KDCRAW_VERSION)
+ 
+-  message(STATUS "Check Kdcraw library in local sub-folder...")
+-
+-  # Check if library is not in local sub-folder
++  if (NOT Kdcraw_FIND_QUIETLY)
++    message(STATUS "Check for Kdcraw library in local sub-folder...")
++  endif (NOT Kdcraw_FIND_QUIETLY)
+ 
++  # Check for a local version of the library.
+   if (KDCRAW_LOCAL_DIR)
+-    set (KDCRAW_LOCAL_FOUND TRUE)
++    find_file(KDCRAW_LOCAL_FOUND libkdcraw/version.h.cmake ${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR} NO_DEFAULT_PATH)
++    if (NOT KDCRAW_LOCAL_FOUND)
++      message(WARNING "KDCRAW_LOCAL_DIR specified as \"${KDCRAW_LOCAL_DIR}\" but libkdcraw could not be found there.")
++    endif (NOT KDCRAW_LOCAL_FOUND)
+   else (KDCRAW_LOCAL_DIR)
+-    find_file(KDCRAW_LOCAL_FOUND libkdcraw/kdcraw.h ${CMAKE_SOURCE_DIR}/libkdcraw ${CMAKE_SOURCE_DIR}/libs/libkdcraw NO_DEFAULT_PATH)
+-
++    find_file(KDCRAW_LOCAL_FOUND libkdcraw/version.h.cmake ${CMAKE_SOURCE_DIR}/libkdcraw NO_DEFAULT_PATH)
+     if (KDCRAW_LOCAL_FOUND)
+-      # Was it found in libkdcraw/ or in libs/libkdcraw?
+-      find_file(KDCRAW_LOCAL_FOUND_IN_LIBS libkdcraw/kdcraw.h ${CMAKE_SOURCE_DIR}/libs/libkdcraw NO_DEFAULT_PATH)
+-      if (KDCRAW_LOCAL_FOUND_IN_LIBS)
+-        set(KDCRAW_LOCAL_DIR libs/libkdcraw)
+-      else (KDCRAW_LOCAL_FOUND_IN_LIBS)
+         set(KDCRAW_LOCAL_DIR libkdcraw)
+-      endif (KDCRAW_LOCAL_FOUND_IN_LIBS)
++    endif (KDCRAW_LOCAL_FOUND)
++    find_file(KDCRAW_LOCAL_FOUND libkdcraw/version.h.cmake ${CMAKE_SOURCE_DIR}/libs/libkdcraw NO_DEFAULT_PATH)
++    if (KDCRAW_LOCAL_FOUND)
++      set(KDCRAW_LOCAL_DIR libs/libkdcraw)
+     endif (KDCRAW_LOCAL_FOUND)
+   endif (KDCRAW_LOCAL_DIR)
+ 
+   if (KDCRAW_LOCAL_FOUND)
+-
+-    # we need two include directories: because the version.h file is put into the build directory
++    # We need two include directories: because the version.h file is put into the build directory
+     # TODO KDCRAW_INCLUDE_DIR sounds like it should contain only one directory...
+     set(KDCRAW_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR} ${CMAKE_BINARY_DIR}/${KDCRAW_LOCAL_DIR})
+     set(KDCRAW_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KDCRAW_LOCAL_DIR}")
+     set(KDCRAW_LIBRARIES kdcraw)
++    if (NOT Kdcraw_FIND_QUIETLY)
+     message(STATUS "Found Kdcraw library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KDCRAW_LOCAL_DIR}")
++    endif (NOT Kdcraw_FIND_QUIETLY)
+     set(KDCRAW_FOUND TRUE)
+-    mark_as_advanced(KDCRAW_INCLUDE_DIR KDCRAW_LIBRARIES KDCRAW_DEFINITIONS)
+ 
+-  else(KDCRAW_LOCAL_FOUND)
++    set(kdcraw_version_h_filename "${CMAKE_BINARY_DIR}/${KDCRAW_LOCAL_DIR}/libkdcraw/version.h")
+ 
+-    message(STATUS "Check Kdcraw library using pkg-config...")
++  else (KDCRAW_LOCAL_FOUND)
+     if (NOT WIN32)
+-      # use pkg-config to get the directories and then use these values
+-      # in the FIND_PATH() and FIND_LIBRARY() calls
+-      include(UsePkgConfig)
+-    
+-      PKGCONFIG(libkdcraw _KDCRAWIncDir _KDCRAWLinkDir _KDCRAWLinkFlags _KDCRAWCflags)
+-    
+-      if (_KDCRAWLinkFlags)
+-        # query pkg-config asking for a libkdcraw >= 0.2.0
+-        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkdcraw RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
+-        if (_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkdcraw release >= 0.2.0")
+-            set(KDCRAW_VERSION_GOOD_FOUND TRUE)
+-        else (_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkdcaw release < 0.2.0, too old")
++      if (NOT Kdcraw_FIND_QUIETLY)
++        message(STATUS "Check Kdcraw library using pkg-config...")
++      endif (NOT Kdcraw_FIND_QUIETLY)
++
++      # use FindPkgConfig to get the directories and then use these values
++      # in the find_path() and find_library() calls
++      include(FindPkgConfig)
++
++      pkg_check_modules(PC_KDCRAW libkdcraw)
++
++      if (PC_KDCRAW_FOUND)
++        # make sure the version is >= 0.2.0
++        # TODO: WHY?
++        if (PC_KDCRAW_VERSION VERSION_LESS 0.2.0)
++          message(STATUS "Found libkdcraw release < 0.2.0, too old")
+             set(KDCRAW_VERSION_GOOD_FOUND FALSE)
+             set(KDCRAW_FOUND FALSE)
+-        endif (_return_VALUE STREQUAL "0")
+-      else (_KDCRAWLinkFlags)
++        else (PC_KDCRAW_VERSION VERSION_LESS 0.2.0)
++          set(KDCRAW_VERSION "${PC_KDCRAW_VERSION}")
++          if (NOT Kdcraw_FIND_QUIETLY)
++            message(STATUS "Found libkdcraw release ${KDCRAW_VERSION}")
++          endif (NOT Kdcraw_FIND_QUIETLY)
++          set(KDCRAW_VERSION_GOOD_FOUND TRUE)
++        endif (PC_KDCRAW_VERSION VERSION_LESS 0.2.0)
++      else (PC_KDCRAW_FOUND)
+         set(KDCRAW_VERSION_GOOD_FOUND FALSE)
+-        set(KDCRAW_FOUND FALSE)
+-      endif (_KDCRAWLinkFlags)
++      endif (PC_KDCRAW_FOUND)
+     else (NOT WIN32)
++      # TODO: Why do we just assume the version is good?
+       set(KDCRAW_VERSION_GOOD_FOUND TRUE)
+     endif (NOT WIN32)
+ 
+     if (KDCRAW_VERSION_GOOD_FOUND)
+-        set(KDCRAW_DEFINITIONS "${_KDCRAWCflags}")
++      set(KDCRAW_DEFINITIONS "${PC_KDCRAW_CFLAGS_OTHER}")
++
++      find_path(KDCRAW_INCLUDE_DIR libkdcraw/version.h ${PC_KDCRAW_INCLUDE_DIRS})
++      set(kdcraw_version_h_filename "${KDCRAW_INCLUDE_DIR}/libkdcraw/version.h")
+     
+-        find_path(KDCRAW_INCLUDE_DIR libkdcraw/version.h
+-        ${_KDCRAWIncDir}
+-        )
+-    
+-        find_library(KDCRAW_LIBRARIES NAMES kdcraw
+-        PATHS
+-        ${_KDCRAWLinkDir}
+-        )
++      find_library(KDCRAW_LIBRARIES NAMES kdcraw HINTS ${PC_KDCRAW_LIBRARY_DIRS})
+     
+         if (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES)
+             set(KDCRAW_FOUND TRUE)
++      else (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES)
++        set(KDCRAW_FOUND FALSE)
+         endif (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES)
+      endif (KDCRAW_VERSION_GOOD_FOUND) 
++
+      if (KDCRAW_FOUND)
+          if (NOT Kdcraw_FIND_QUIETLY)
+              message(STATUS "Found libkdcraw: ${KDCRAW_LIBRARIES}")
+@@ -109,16 +123,35 @@
+      else (KDCRAW_FOUND)
+          if (Kdcraw_FIND_REQUIRED)
+              if (NOT KDCRAW_INCLUDE_DIR)
+-                 message(FATAL_ERROR "Could NOT find libkdcraw header files")
++          message(FATAL_ERROR "Could NOT find libkdcraw header files.")
++        else(NOT KDCRAW_INCLUDE_DIR)
++          message(FATAL_ERROR "Could NOT find libkdcraw library.")
+              endif (NOT KDCRAW_INCLUDE_DIR)
+-             if (NOT KDCRAW_LIBRARIES)
+-                 message(FATAL_ERROR "Could NOT find libkdcraw library")
+-             endif (NOT KDCRAW_LIBRARIES)
+          endif (Kdcraw_FIND_REQUIRED)
+      endif (KDCRAW_FOUND)
+     
+-    mark_as_advanced(KDCRAW_INCLUDE_DIR KDCRAW_LIBRARIES KDCRAW_DEFINITIONS)
+-
+   endif(KDCRAW_LOCAL_FOUND)
+   
+-endif (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS)
++  if (KDCRAW_FOUND)
++    # Find the version information, unless that was reported by pkg_search_module.
++    if (NOT KDCRAW_VERSION)
++      file(READ "${kdcraw_version_h_filename}" kdcraw_version_h_content)
++      # This is the line we are trying to find: static const char kdcraw_version[] = "1.22.4-beta_5+dfsg";
++      string(REGEX REPLACE ".*char +kdcraw_version\\[\\] += +\"([^\"]+)\".*" "\\1" KDCRAW_VERSION "${kdcraw_version_h_content}")
++      unset(kdcraw_version_h_content)
++
++    endif (NOT KDCRAW_VERSION)
++    unset(kdcraw_version_h_filename)
++  endif (KDCRAW_FOUND)
++
++  if (KDCRAW_FOUND)
++    mark_as_advanced(KDCRAW_INCLUDE_DIR KDCRAW_LIBRARIES KDCRAW_DEFINITIONS KDCRAW_VERSION KDCRAW_FOUND)
++  else (KDCRAW_FOUND)
++    # The library was not found, reset all related variables.
++    unset(KDCRAW_INCLUDE_DIR)
++    unset(KDCRAW_LIBRARIES)
++    unset(KDCRAW_DEFINITIONS)
++    unset(KDCRAW_VERSION)
++  endif (KDCRAW_FOUND)
++
++endif (KDCRAW_INCLUDE_DIR AND KDCRAW_LIBRARIES AND KDCRAW_DEFINITIONS AND KDCRAW_VERSION)
+diff -wruN kdelibs-4.9.95.orig/cmake/modules/FindKexiv2.cmake kdelibs-4.9.95/cmake/modules/FindKexiv2.cmake
+--- kdelibs-4.9.95.orig/cmake/modules/FindKexiv2.cmake	2012-12-17 15:14:16.000000000 +0100
++++ kdelibs-4.9.95/cmake/modules/FindKexiv2.cmake	2012-12-28 21:19:39.000000000 +0100
+@@ -67,13 +67,13 @@
+       PKGCONFIG(libkexiv2 _KEXIV2IncDir _KEXIV2LinkDir _KEXIV2LinkFlags _KEXIV2Cflags)
+     
+       if(_KEXIV2LinkFlags)
+-        # query pkg-config asking for a libkexiv2 >= 0.2.0
+-        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
++        # query pkg-config asking for a libkexiv2 >= 1.0.0
++        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=1.0.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
+         if(_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkexiv2 release >= 0.2.0")
++            message(STATUS "Found libkexiv2 release >= 1.0.0")
+             set(KEXIV2_VERSION_GOOD_FOUND TRUE)
+         else(_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkexiv2 release < 0.2.0, too old")
++            message(STATUS "Found libkexiv2 release < 1.0.0, too old")
+             set(KEXIV2_VERSION_GOOD_FOUND FALSE)
+             set(KEXIV2_FOUND FALSE)
+         endif(_return_VALUE STREQUAL "0")

diff --git a/kde-base/kdelibs/kdelibs-4.9.95.ebuild b/kde-base/kdelibs/kdelibs-4.9.95.ebuild
index 3d763b3..f2860f1 100644
--- a/kde-base/kdelibs/kdelibs-4.9.95.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.95.ebuild
@@ -146,7 +146,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
 	"${FILESDIR}/${PN}-4.9.90-findkipi.patch"
-	"${FILESDIR}/${PN}-4.9.95-findkexiv2.patch"
+	"${FILESDIR}/${PN}-4.9.95-findsomething.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-12-28 20:15 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-12-28 20:15 UTC (permalink / raw
  To: gentoo-commits

commit:     ae1d2487279309c9173bde74a92dc5881d55496c
Author:     Andreas K. Huettel (dilfridge) <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 28 20:16:00 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Fri Dec 28 20:16:00 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=ae1d2487

[kde-base/kdelibs] Update FindKexiv2.cmake to digikam sc version

---
 .../kdelibs/files/kdelibs-4.9.95-findkexiv2.patch  |   22 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.9.95.ebuild             |    1 +
 2 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.95-findkexiv2.patch b/kde-base/kdelibs/files/kdelibs-4.9.95-findkexiv2.patch
new file mode 100644
index 0000000..1161ed2
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.9.95-findkexiv2.patch
@@ -0,0 +1,22 @@
+diff --git a/cmake/modules/FindKexiv2.cmake b/cmake/modules/FindKexiv2.cmake
+index 4487537..8edd591 100644
+--- a/cmake/modules/FindKexiv2.cmake
++++ b/cmake/modules/FindKexiv2.cmake
+@@ -67,13 +67,13 @@ else (KEXIV2_INCLUDE_DIR AND KEXIV2_LIBRARIES AND KEXIV2_DEFINITIONS)
+       PKGCONFIG(libkexiv2 _KEXIV2IncDir _KEXIV2LinkDir _KEXIV2LinkFlags _KEXIV2Cflags)
+ 
+       if(_KEXIV2LinkFlags)
+-        # query pkg-config asking for a libkexiv2 >= 0.2.0
+-        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
++        # query pkg-config asking for a libkexiv2 >= 1.0.0
++        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=1.0.0 libkexiv2 RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
+         if(_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkexiv2 release >= 0.2.0")
++            message(STATUS "Found libkexiv2 release >= 1.0.0")
+             set(KEXIV2_VERSION_GOOD_FOUND TRUE)
+         else(_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkexiv2 release < 0.2.0, too old")
++            message(STATUS "Found libkexiv2 release < 1.0.0, too old")
+             set(KEXIV2_VERSION_GOOD_FOUND FALSE)
+             set(KEXIV2_FOUND FALSE)
+         endif(_return_VALUE STREQUAL "0")

diff --git a/kde-base/kdelibs/kdelibs-4.9.95.ebuild b/kde-base/kdelibs/kdelibs-4.9.95.ebuild
index c126bea..3d763b3 100644
--- a/kde-base/kdelibs/kdelibs-4.9.95.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.95.ebuild
@@ -146,6 +146,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
 	"${FILESDIR}/${PN}-4.9.90-findkipi.patch"
+	"${FILESDIR}/${PN}-4.9.95-findkexiv2.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-12-17 21:26 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-12-17 21:26 UTC (permalink / raw
  To: gentoo-commits

commit:     b11d08ac65a1d2cd83f1e9f54dd2fa008de90b5b
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Mon Dec 17 21:26:08 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Mon Dec 17 21:26:08 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=b11d08ac

[kde-base/kdelibs] Update FindKipi.cmake to current kdegraphics version, otherwise some software bails out because of missing variables

Package-Manager: portage-2.2.0_alpha148

---
 .../kdelibs/files/kdelibs-4.9.90-findkipi.patch    |  242 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild       |    1 +
 kde-base/kdelibs/kdelibs-4.9.90.ebuild             |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 4 files changed, 245 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.90-findkipi.patch b/kde-base/kdelibs/files/kdelibs-4.9.90-findkipi.patch
new file mode 100644
index 0000000..050262f
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.9.90-findkipi.patch
@@ -0,0 +1,242 @@
+diff -ruN kdelibs-4.9.90.orig/cmake/modules/FindKipi.cmake kdelibs-4.9.90/cmake/modules/FindKipi.cmake
+--- kdelibs-4.9.90.orig/cmake/modules/FindKipi.cmake	2012-11-14 16:58:29.000000000 +0100
++++ kdelibs-4.9.90/cmake/modules/FindKipi.cmake	2012-12-17 22:21:25.000000000 +0100
+@@ -1,116 +1,133 @@
+-# - Try to find the Kipi library
++# Module that tries to find the Kipi library
+ #
+-# If you have put a local version of libkipi into your source tree,
+-# set KIPI_LOCAL_DIR to the relative path to the local directory.
++# Input values :
+ #
+-# Once done this will define
++# KIPI_LOCAL_DIR    - If you have put a local version of libkipi into your source tree,
++#                     set this variable to the relative path from the local directory.
+ #
+-#  KIPI_FOUND - system has libkipi
+-#  KIPI_INCLUDE_DIR - the libkipi include directory
+-#  KIPI_LIBRARIES - Link these to use libkipi
++# Output values :
++#
++#  KIPI_FOUND       - System has libkipi
++#  KIPI_INCLUDE_DIR - The libkipi include directory
++#  KIPI_LIBRARIES   - Link these to use libkipi
+ #  KIPI_DEFINITIONS - Compiler switches required for using libkipi
++#  KIPI_VERSION     - The release version of the Kipi library
++#  KIPI_SO_VERSION  - The binary SO version of the Kipi library
+ #
+ 
+-# Copyright (c) 2008, Gilles Caulier, <caulier.gilles@gmail.com>
++# Copyright (c) 2012, Victor Dodon <dodonvictor at gmail dot com>
++# Copyright (c) 2012, Gilles Caulier <caulier dot gilles at gmail dot com>
+ #
+ # Redistribution and use is allowed according to the terms of the BSD license.
+ # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+ 
+-if (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS)
+-
+-  message(STATUS "Found Kipi library in cache: ${KIPI_LIBRARIES}")
+-
+-  # in cache already
+-  set(KIPI_FOUND TRUE)
+-
+-else (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS)
++IF(${Kipi_FIND_VERSION} STREQUAL "")
++    SET(Kipi_FIND_VERSION "1.2.0")
++    MESSAGE(STATUS "No Kipi library version required. Check default version : ${Kipi_FIND_VERSION}")
++ELSE()
++    MESSAGE(STATUS "Kipi library version required : ${Kipi_FIND_VERSION}")
++ENDIF()
++
++IF(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)
++
++  IF(NOT Kipi_FIND_QUIETLY)
++    MESSAGE(STATUS "Found kipi library in cache ${KIPI_LIBRARIES}")
++  ENDIF(NOT Kipi_FIND_QUIETLY)
++  # Already in cache
++  SET(KIPI_FOUND TRUE)
++
++ELSE(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)
++
++  IF(NOT Kipi_FIND_QUIETLY)
++    MESSAGE(STATUS "Check Kipi library in local sub-folder...")
++  ENDIF(NOT Kipi_FIND_QUIETLY)
++
++  IF(KIPI_LOCAL_DIR)
++    FIND_FILE(KIPI_LOCAL_FOUND libkipi/version.h.cmake ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR} NO_DEFAULT_PATH)
++    IF(NOT KIPI_LOCAL_FOUND)
++      MESSAGE(WARNING "KIPI_LOCAL_DIR specified as \"${KIPI_LOCAL_DIR}\" but libkipi could not be found there.")
++    ENDIF(NOT KIPI_LOCAL_FOUND)
++  ELSE(KIPI_LOCAL_DIR)
++    FIND_FILE(KIPI_LOCAL_FOUND libkipi/version.h.cmake ${CMAKE_SOURCE_DIR}/libkipi NO_DEFAULT_PATH)
++    IF(KIPI_LOCAL_FOUND)
++      SET(KIPI_LOCAL_DIR libkipi)
++    ENDIF(KIPI_LOCAL_FOUND)
++
++    FIND_FILE(KIPI_LOCAL_FOUND libkipi/version.h.cmake ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
++    IF(KIPI_LOCAL_FOUND)
++      SET(KIPI_LOCAL_DIR libs/libkipi)
++    ENDIF(KIPI_LOCAL_FOUND)
++  ENDIF(KIPI_LOCAL_DIR)
++
++  IF(KIPI_LOCAL_FOUND)
++
++    SET(KIPI_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
++    SET(KIPI_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
++    SET(KIPI_LIBRARIES kipi)
++    IF(NOT Kipi_FIND_QUIETLY)
++      MESSAGE(STATUS "Found Kipi library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}")
++    ENDIF(NOT Kipi_FIND_QUIETLY)
++    SET(KIPI_FOUND TRUE)
++    SET(KIPI_VERSION_H_FILENAME "${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}/libkipi/version.h")
++
++  ELSE(KIPI_LOCAL_FOUND)
++
++    IF(NOT WIN32)
++      IF(NOT Kipi_FIND_QUIETLY)
++        MESSAGE(STATUS "Check Kipi library using pkg-config...")
++      ENDIF(NOT Kipi_FIND_QUIETLY)
++
++      INCLUDE(FindPkgConfig)
++      PKG_CHECK_MODULES(KIPI libkipi>=${Kipi_FIND_VERSION})
++    ENDIF(NOT WIN32)
++
++    FIND_LIBRARY(KIPI_LIBRARIES NAMES libkipi PATHS ${KIPI_LIBRARY_DIRS} ${LIB_INSTALL_DIR} ${KDE4_LIB_DIR})
++    FIND_PATH(KIPI_INCLUDE_DIR NAMES libkipi/version.h PATHS ${KIPI_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} ${KDE4_INCLUDE_DIR})
++    SET(KIPI_VERSION_H_FILENAME "${KIPI_INCLUDE_DIR}/libkipi/version.h")
++    SET(KIPI_DEFINITIONS ${KIPI_CFLAGS} CACHE STRING "Kipi defintions")
++
++    INCLUDE(FindPackageHandleStandardArgs)
++    FIND_PACKAGE_HANDLE_STANDARD_ARGS(KIPI DEFAULT_MSG KIPI_LIBRARIES KIPI_INCLUDE_DIR)
++
++  ENDIF(KIPI_LOCAL_FOUND)
++
++  IF(KIPI_FOUND)
++
++    IF(NOT KIPI_VERSION)
++      FILE(READ "${KIPI_VERSION_H_FILENAME}" KIPI_VERSION_H_CONTENT)
++      STRING(REGEX REPLACE ".*static +const +char +kipi_version\\[\\] += +\"([^\"]+)\".*" "\\1" KIPI_VERSION "${KIPI_VERSION_H_CONTENT}")
++      MESSAGE(STATUS "Kipi library version: ${KIPI_VERSION}")
++    ENDIF(NOT KIPI_VERSION)
++
++    IF(NOT KIPI_SO_VERSION)
++      FILE(READ "${KIPI_VERSION_H_FILENAME}" KIPI_VERSION_H_CONTENT)
++      STRING(REGEX REPLACE
++             ".*static +const +int +kipi_binary_version +=  ([^ ;]+).*"
++             "\\1"
++             KIPI_SO_VERSION_FOUND
++             "${KIPI_VERSION_H_CONTENT}"
++            )
++      SET(KIPI_SO_VERSION ${KIPI_SO_VERSION_FOUND} CACHE STRING "libkipi so version")
++      MESSAGE(STATUS "Kipi library SO binary version: ${KIPI_SO_VERSION}")
++    ENDIF(NOT KIPI_SO_VERSION)
++
++    UNSET(KIPI_VERSION_H_CONTENT)
++    UNSET(KIPI_VERSION_H_FILENAME)
++  ENDIF(KIPI_FOUND)
++
++  IF(KIPI_FOUND)
++    MESSAGE(STATUS "libkipi: Found version ${KIPI_VERSION} (required: ${Kipi_FIND_VERSION})")
++    IF(${KIPI_VERSION} VERSION_LESS ${Kipi_FIND_VERSION})
++        SET(KIPI_FOUND FALSE)
++    ELSE()
++        MARK_AS_ADVANCED(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS KIPI_VERSION KIPI_SO_VERSION)
++    ENDIF()
++  ELSE(KIPI_FOUND)
++    UNSET(KIPI_INCLUDE_DIR)
++    UNSET(KIPI_LIBRARIES)
++    UNSET(KIPI_DEFINITIONS)
++    UNSET(KIPI_VERSION)
++    UNSET(KIPI_SO_VERSION)
++  ENDIF(KIPI_FOUND)
+ 
+-  message(STATUS "Check Kipi library in local sub-folder...")
+-
+-  # Check if library is not in local sub-folder
+-
+-  if (KIPI_LOCAL_DIR)
+-    set (KIPI_LOCAL_FOUND TRUE)
+-  else (KIPI_LOCAL_DIR)
+-    find_file(KIPI_LOCAL_FOUND libkipi/kipi.h ${CMAKE_SOURCE_DIR}/libkipi ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
+-
+-    if (KIPI_LOCAL_FOUND)
+-      # Was it found in libkdcraw/ or in libs/libkdcraw?
+-      find_file(KIPI_LOCAL_FOUND_IN_LIBS libkipi/kipi.h ${CMAKE_SOURCE_DIR}/libs/libkipi NO_DEFAULT_PATH)
+-      if (KIPI_LOCAL_FOUND_IN_LIBS)
+-        set(KIPI_LOCAL_DIR libs/libkipi)
+-      else (KIPI_LOCAL_FOUND_IN_LIBS)
+-        set(KIPI_LOCAL_DIR libkipi)
+-      endif (KIPI_LOCAL_FOUND_IN_LIBS)
+-    endif (KIPI_LOCAL_FOUND)
+-  endif (KIPI_LOCAL_DIR)
+-
+-  if (KIPI_LOCAL_FOUND)
+-    # we need two include directories: because the version.h file is put into the build directory
+-    # TODO KIPI_INCLUDE_DIR sounds like it should contain only one directory...
+-    set(KIPI_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR} ${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR})
+-    set(KIPI_DEFINITIONS "-I${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}" "-I${CMAKE_BINARY_DIR}/${KIPI_LOCAL_DIR}")
+-    set(KIPI_LIBRARIES kipi)
+-    message(STATUS "Found Kipi library in local sub-folder: ${CMAKE_SOURCE_DIR}/${KIPI_LOCAL_DIR}")
+-    set(KIPI_FOUND TRUE)
+-    mark_as_advanced(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS)
+-
+-  else (KIPI_LOCAL_FOUND)
+-
+-    if (NOT WIN32)
+-      message(STATUS "Check Kipi library using pkg-config...")
+-
+-      # use pkg-config to get the directories and then use these values
+-      # in the FIND_PATH() and FIND_LIBRARY() calls
+-      include(UsePkgConfig)
+-
+-      PKGCONFIG(libkipi _KIPIIncDir _KIPILinkDir _KIPILinkFlags _KIPICflags)
+-
+-      if (_KIPILinkFlags)
+-        # query pkg-config asking for a libkipi >= 0.2.0
+-        exec_program(${PKGCONFIG_EXECUTABLE} ARGS --atleast-version=0.2.0 libkipi RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
+-        if (_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkipi release >= 0.2.0")
+-            set(KIPI_VERSION_GOOD_FOUND TRUE)
+-        else (_return_VALUE STREQUAL "0")
+-            message(STATUS "Found libkipi release < 0.2.0, too old")
+-            set(KIPI_VERSION_GOOD_FOUND FALSE)
+-            set(KIPI_FOUND FALSE)
+-        endif (_return_VALUE STREQUAL "0")
+-      else (_KIPILinkFlags)
+-        set(KIPI_VERSION_GOOD_FOUND FALSE)
+-        set(KIPI_FOUND FALSE)
+-      endif (_KIPILinkFlags)
+-    else (NOT WIN32)
+-      set(KIPI_VERSION_GOOD_FOUND TRUE)
+-    endif (NOT WIN32)
+-    if (KIPI_VERSION_GOOD_FOUND)
+-        set(KIPI_DEFINITIONS ${_KIPICflags})
+-
+-        find_path(KIPI_INCLUDE_DIR NAMES libkipi/version.h PATHS ${KDE4_INCLUDE_DIR} ${_KIPIIncDir})
+-        find_library(KIPI_LIBRARIES NAMES kipi PATHS ${KDE4_LIB_DIR} ${_KIPILinkDir})
+-
+-        if (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES)
+-            set(KIPI_FOUND TRUE)
+-        endif (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES)
+-      endif (KIPI_VERSION_GOOD_FOUND)
+-      if (KIPI_FOUND)
+-          if (NOT Kipi_FIND_QUIETLY)
+-              message(STATUS "Found libkipi: ${KIPI_LIBRARIES}")
+-          endif (NOT Kipi_FIND_QUIETLY)
+-      else (KIPI_FOUND)
+-          if (Kipi_FIND_REQUIRED)
+-              if (NOT KIPI_INCLUDE_DIR)
+-                  message(FATAL_ERROR "Could NOT find libkipi header files")
+-              endif (NOT KIPI_INCLUDE_DIR)
+-              if (NOT KIPI_LIBRARIES)
+-                  message(FATAL_ERROR "Could NOT find libkipi library")
+-              endif (NOT KIPI_LIBRARIES)
+-          endif (Kipi_FIND_REQUIRED)
+-      endif (KIPI_FOUND)
+-
+-    mark_as_advanced(KIPI_INCLUDE_DIR KIPI_LIBRARIES KIPI_DEFINITIONS)
+-
+-  endif (KIPI_LOCAL_FOUND)
+-  
+-endif (KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS)
++ENDIF(KIPI_INCLUDE_DIR AND KIPI_LIBRARIES AND KIPI_DEFINITIONS AND KIPI_VERSION AND KIPI_SO_VERSION)

diff --git a/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild
index 7988b3f..3477255 100644
--- a/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.10.49.9999.ebuild
@@ -145,6 +145,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
+	"${FILESDIR}/${PN}-4.9.90-findkipi.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.9.90.ebuild b/kde-base/kdelibs/kdelibs-4.9.90.ebuild
index c189845..c126bea 100644
--- a/kde-base/kdelibs/kdelibs-4.9.90.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.90.ebuild
@@ -145,6 +145,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
+	"${FILESDIR}/${PN}-4.9.90-findkipi.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 7988b3f..3477255 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -145,6 +145,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-werror.patch"
+	"${FILESDIR}/${PN}-4.9.90-findkipi.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-11-08  7:51 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-11-08  7:51 UTC (permalink / raw
  To: gentoo-commits

commit:     df9e5972985d8cb868aaea7b409d14a1bf15eab0
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Thu Nov  8 07:49:07 2012 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Thu Nov  8 07:49:07 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=df9e5972

[kde-base/kdelibs] Remove -Werror, wrt bug #442278.

Package-Manager: portage-2.1.11.31

---
 kde-base/kdelibs/files/kdelibs-4.9.3-werror.patch |   20 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.9.3.ebuild             |    1 +
 kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild       |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild              |    1 +
 4 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.9.3-werror.patch b/kde-base/kdelibs/files/kdelibs-4.9.3-werror.patch
new file mode 100644
index 0000000..6ec0b7d
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.9.3-werror.patch
@@ -0,0 +1,20 @@
+--- cmake/modules/FindKDE4Internal.cmake
++++ cmake/modules/FindKDE4Internal.cmake
+@@ -1204,7 +1204,7 @@
+    set(CMAKE_C_FLAGS_DEBUGFULL        "-g3 -fno-inline")
+    set(CMAKE_C_FLAGS_PROFILE          "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
+ 
+-   set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common")
++   set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common")
+    # As of Qt 4.6.x we need to override the new exception macros if we want compile with -fno-exceptions
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS -fno-check-new -fno-common")
+ 
+@@ -1295,7 +1295,7 @@
+       endif(NOT _compile_result)
+ 
+       if (GCC_IS_NEWER_THAN_4_2)
+-         set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=return-type -fvisibility-inlines-hidden")
++         set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden")
+       endif (GCC_IS_NEWER_THAN_4_2)
+    else (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR AND NOT WIN32)
+       set (__KDE_HAVE_GCC_VISIBILITY 0)

diff --git a/kde-base/kdelibs/kdelibs-4.9.3.ebuild b/kde-base/kdelibs/kdelibs-4.9.3.ebuild
index 48a0478..7f74bf0 100644
--- a/kde-base/kdelibs/kdelibs-4.9.3.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.3.ebuild
@@ -142,6 +142,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.9.3-python-bytecompilation.patch"
+	"${FILESDIR}/${PN}-4.9.3-werror.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
index 22e8bb3..928a3ce 100644
--- a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
@@ -141,6 +141,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
+	"${FILESDIR}/${PN}-4.9.3-werror.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index e57d8e4..6d09d60 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -144,6 +144,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
+	"${FILESDIR}/${PN}-4.9.3-werror.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-11-07 19:47 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-11-07 19:47 UTC (permalink / raw
  To: gentoo-commits

commit:     eff3696ad87ec672df1b91cd21c9df2b9ed8c276
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Wed Nov  7 19:41:00 2012 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Wed Nov  7 19:43:56 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=eff3696a

[kde-base/kdelibs] Remove patch merged upstream.

Upstream is fast today!

http://quickgit.kde.org/?p=kdelibs.git&a=commit&h=5966ecd67bb1572e0149834501be9eba537e4f54

Package-Manager: portage-2.1.11.31

---
 .../kdelibs-4.10.0-python-bytecompilation.patch    |  109 --------------------
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 -
 2 files changed, 0 insertions(+), 110 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.10.0-python-bytecompilation.patch b/kde-base/kdelibs/files/kdelibs-4.10.0-python-bytecompilation.patch
deleted file mode 100644
index 1d76e2e..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.10.0-python-bytecompilation.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-https://bugs.kde.org/show_bug.cgi?id=276151
-
---- cmake/modules/PythonMacros.cmake
-+++ cmake/modules/PythonMacros.cmake
-@@ -26,54 +26,56 @@
-   install(FILES ${SOURCE_FILE} DESTINATION ${DESTINATION_DIR})
- 
-   # Byte compile and install the .pyc file.
--  get_filename_component(_absfilename ${SOURCE_FILE} ABSOLUTE)
--  get_filename_component(_filename ${SOURCE_FILE} NAME)
--  get_filename_component(_filenamebase ${SOURCE_FILE} NAME_WE)
--  get_filename_component(_basepath ${SOURCE_FILE} PATH)
--
--  if(WIN32)
--    # remove drive letter
--    string(REGEX REPLACE "^[a-zA-Z]:/" "/" _basepath "${_basepath}")
--  endif(WIN32)
--
--  set(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
--
--  # Python 3.2 changed the pyc file location
--  if(PYTHON_VERSION_STRING VERSION_GREATER 3.1)
--    # To get the right version for suffix
--    set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/__pycache__/${_filenamebase}.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.pyc")
--    set(_py_install_dir "${DESTINATION_DIR}/__pycache__/")
--  else()
--    set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc")
--    set(_py_install_dir "${DESTINATION_DIR}")
--  endif()
--
--  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
--
--  # Setting because it will be displayed later, in compile_python_files
--  set(_message "Byte-compiling ${_bin_py} to ${_bin_pyc}")
--
--  get_filename_component(_abs_bin_py ${_bin_py} ABSOLUTE)
--  if(_abs_bin_py STREQUAL _absfilename)    # Don't copy the file onto itself.
--    add_custom_command(
--      TARGET compile_python_files
--      COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
--      COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
--      DEPENDS "${_absfilename}"
--    )
--  else()
--    add_custom_command(
--      TARGET compile_python_files
--      COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
--      COMMAND "${CMAKE_COMMAND}" -E copy "${_absfilename}" "${_bin_py}"
--      COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
--      DEPENDS "${_absfilename}"
--    )
--  endif()
--
--  install(FILES ${_bin_pyc} DESTINATION "${_py_install_dir}")
--  unset(_py_install_dir)
--  unset(_message)
-+  if("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
-+    get_filename_component(_absfilename ${SOURCE_FILE} ABSOLUTE)
-+    get_filename_component(_filename ${SOURCE_FILE} NAME)
-+    get_filename_component(_filenamebase ${SOURCE_FILE} NAME_WE)
-+    get_filename_component(_basepath ${SOURCE_FILE} PATH)
-+
-+    if(WIN32)
-+      # remove drive letter
-+      string(REGEX REPLACE "^[a-zA-Z]:/" "/" _basepath "${_basepath}")
-+    endif(WIN32)
-+
-+    set(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
-+
-+    # Python 3.2 changed the pyc file location
-+    if(PYTHON_VERSION_STRING VERSION_GREATER 3.1)
-+      # To get the right version for suffix
-+      set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/__pycache__/${_filenamebase}.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.pyc")
-+      set(_py_install_dir "${DESTINATION_DIR}/__pycache__/")
-+    else()
-+      set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc")
-+      set(_py_install_dir "${DESTINATION_DIR}")
-+    endif()
-+
-+    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
-+
-+    # Setting because it will be displayed later, in compile_python_files
-+    set(_message "Byte-compiling ${_bin_py} to ${_bin_pyc}")
-+
-+    get_filename_component(_abs_bin_py ${_bin_py} ABSOLUTE)
-+    if(_abs_bin_py STREQUAL _absfilename)    # Don't copy the file onto itself.
-+      add_custom_command(
-+        TARGET compile_python_files
-+        COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
-+        COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
-+        DEPENDS "${_absfilename}"
-+      )
-+    else()
-+      add_custom_command(
-+        TARGET compile_python_files
-+        COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
-+        COMMAND "${CMAKE_COMMAND}" -E copy "${_absfilename}" "${_bin_py}"
-+        COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
-+        DEPENDS "${_absfilename}"
-+      )
-+    endif()
-+
-+    install(FILES ${_bin_pyc} DESTINATION "${_py_install_dir}")
-+    unset(_py_install_dir)
-+    unset(_message)
- 
-+  endif("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
- endmacro(PYTHON_INSTALL)
- 

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index ad8bb86..e57d8e4 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -144,7 +144,6 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-	"${FILESDIR}/${PN}-4.10.0-python-bytecompilation.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-11-07 19:33 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-11-07 19:33 UTC (permalink / raw
  To: gentoo-commits

commit:     69d8737ffadce62a96087a5b9c485189d706864c
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Wed Nov  7 19:23:05 2012 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Wed Nov  7 19:23:05 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=69d8737f

[kde-base/kdelibs] Update python patch, thanks to Arfever.

Package-Manager: portage-2.1.11.31

---
 .../kdelibs-4.10.0-python-bytecompilation.patch    |  109 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-9999.ebuild               |    2 +-
 2 files changed, 110 insertions(+), 1 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.10.0-python-bytecompilation.patch b/kde-base/kdelibs/files/kdelibs-4.10.0-python-bytecompilation.patch
new file mode 100644
index 0000000..1d76e2e
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.10.0-python-bytecompilation.patch
@@ -0,0 +1,109 @@
+https://bugs.kde.org/show_bug.cgi?id=276151
+
+--- cmake/modules/PythonMacros.cmake
++++ cmake/modules/PythonMacros.cmake
+@@ -26,54 +26,56 @@
+   install(FILES ${SOURCE_FILE} DESTINATION ${DESTINATION_DIR})
+ 
+   # Byte compile and install the .pyc file.
+-  get_filename_component(_absfilename ${SOURCE_FILE} ABSOLUTE)
+-  get_filename_component(_filename ${SOURCE_FILE} NAME)
+-  get_filename_component(_filenamebase ${SOURCE_FILE} NAME_WE)
+-  get_filename_component(_basepath ${SOURCE_FILE} PATH)
+-
+-  if(WIN32)
+-    # remove drive letter
+-    string(REGEX REPLACE "^[a-zA-Z]:/" "/" _basepath "${_basepath}")
+-  endif(WIN32)
+-
+-  set(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
+-
+-  # Python 3.2 changed the pyc file location
+-  if(PYTHON_VERSION_STRING VERSION_GREATER 3.1)
+-    # To get the right version for suffix
+-    set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/__pycache__/${_filenamebase}.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.pyc")
+-    set(_py_install_dir "${DESTINATION_DIR}/__pycache__/")
+-  else()
+-    set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc")
+-    set(_py_install_dir "${DESTINATION_DIR}")
+-  endif()
+-
+-  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
+-
+-  # Setting because it will be displayed later, in compile_python_files
+-  set(_message "Byte-compiling ${_bin_py} to ${_bin_pyc}")
+-
+-  get_filename_component(_abs_bin_py ${_bin_py} ABSOLUTE)
+-  if(_abs_bin_py STREQUAL _absfilename)    # Don't copy the file onto itself.
+-    add_custom_command(
+-      TARGET compile_python_files
+-      COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
+-      COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
+-      DEPENDS "${_absfilename}"
+-    )
+-  else()
+-    add_custom_command(
+-      TARGET compile_python_files
+-      COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
+-      COMMAND "${CMAKE_COMMAND}" -E copy "${_absfilename}" "${_bin_py}"
+-      COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
+-      DEPENDS "${_absfilename}"
+-    )
+-  endif()
+-
+-  install(FILES ${_bin_pyc} DESTINATION "${_py_install_dir}")
+-  unset(_py_install_dir)
+-  unset(_message)
++  if("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
++    get_filename_component(_absfilename ${SOURCE_FILE} ABSOLUTE)
++    get_filename_component(_filename ${SOURCE_FILE} NAME)
++    get_filename_component(_filenamebase ${SOURCE_FILE} NAME_WE)
++    get_filename_component(_basepath ${SOURCE_FILE} PATH)
++
++    if(WIN32)
++      # remove drive letter
++      string(REGEX REPLACE "^[a-zA-Z]:/" "/" _basepath "${_basepath}")
++    endif(WIN32)
++
++    set(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
++
++    # Python 3.2 changed the pyc file location
++    if(PYTHON_VERSION_STRING VERSION_GREATER 3.1)
++      # To get the right version for suffix
++      set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/__pycache__/${_filenamebase}.cpython-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.pyc")
++      set(_py_install_dir "${DESTINATION_DIR}/__pycache__/")
++    else()
++      set(_bin_pyc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc")
++      set(_py_install_dir "${DESTINATION_DIR}")
++    endif()
++
++    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
++
++    # Setting because it will be displayed later, in compile_python_files
++    set(_message "Byte-compiling ${_bin_py} to ${_bin_pyc}")
++
++    get_filename_component(_abs_bin_py ${_bin_py} ABSOLUTE)
++    if(_abs_bin_py STREQUAL _absfilename)    # Don't copy the file onto itself.
++      add_custom_command(
++        TARGET compile_python_files
++        COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
++        COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
++        DEPENDS "${_absfilename}"
++      )
++    else()
++      add_custom_command(
++        TARGET compile_python_files
++        COMMAND "${CMAKE_COMMAND}" -E echo "${_message}"
++        COMMAND "${CMAKE_COMMAND}" -E copy "${_absfilename}" "${_bin_py}"
++        COMMAND "${PYTHON_EXECUTABLE}" "${_python_compile_py}" "${_bin_py}"
++        DEPENDS "${_absfilename}"
++      )
++    endif()
++
++    install(FILES ${_bin_pyc} DESTINATION "${_py_install_dir}")
++    unset(_py_install_dir)
++    unset(_message)
+ 
++  endif("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
+ endmacro(PYTHON_INSTALL)
+ 

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 47fe6d6..ad8bb86 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -144,7 +144,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-	"${FILESDIR}/${PN}-4.9.3-python-bytecompilation.patch"
+	"${FILESDIR}/${PN}-4.10.0-python-bytecompilation.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-10-08  9:20 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-10-08  9:20 UTC (permalink / raw
  To: gentoo-commits

commit:     4e1aa27beb6572366c72812b2a51573f48da83d6
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Mon Oct  8 09:17:49 2012 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Mon Oct  8 09:17:49 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=4e1aa27b

[kde-base/kdelibs] Update Python byte compilation patch by Arfrever, wrt bug #437410.

(Portage version: 2.1.11.24/git/Linux x86_64, unsigned Manifest commit)

---
 ... => kdelibs-4.9.3-python-bytecompilation.patch} |   45 +++++++++++++++----
 kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild        |    2 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    2 +-
 3 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-bytecode.patch b/kde-base/kdelibs/files/kdelibs-4.9.3-python-bytecompilation.patch
similarity index 61%
rename from kde-base/kdelibs/files/kdelibs-4.8.4-bytecode.patch
rename to kde-base/kdelibs/files/kdelibs-4.9.3-python-bytecompilation.patch
index 6920121..fbd14ae 100644
--- a/kde-base/kdelibs/files/kdelibs-4.8.4-bytecode.patch
+++ b/kde-base/kdelibs/files/kdelibs-4.9.3-python-bytecompilation.patch
@@ -1,7 +1,7 @@
---- cmake/modules/PythonMacros.cmake.orig	2012-05-31 23:28:04.035788719 +0200
-+++ cmake/modules/PythonMacros.cmake	2012-05-31 23:30:13.997840354 +0200
-@@ -24,39 +24,41 @@
-   INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
+--- cmake/modules/PythonMacros.cmake
++++ cmake/modules/PythonMacros.cmake
+@@ -24,52 +24,54 @@
+   INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESTINATION_DIR})
  
    # Byte compile and install the .pyc file.        
 -  GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
@@ -14,11 +14,19 @@
 -  endif(WIN32)
 -
 -  SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
--  SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
+-
+-  # Python 3.2 changed the pyc file location
+-  IF(PYTHON_SHORT_VERSION GREATER 3.1)
+-    # To get the right version for suffix
+-    STRING(REPLACE "." "" _suffix ${PYTHON_SHORT_VERSION})
+-    SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/__pycache__/${_filenamebase}.cpython-${_suffix}.pyc)
+-  ELSE(PYTHON_SHORT_VERSION GREATER 3.1)
+-    SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
+-  ENDIF(PYTHON_SHORT_VERSION GREATER 3.1)
 -
 -  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
 -
--  SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
+-  SET(_message "Byte-compiling ${_bin_py}")
 -
 -  GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
 -  IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
@@ -37,6 +45,10 @@
 -      DEPENDS ${_absfilename}
 -    )
 -  ENDIF(_abs_bin_py STREQUAL ${_absfilename})
+-
+-  IF(PYTHON_SHORT_VERSION GREATER 3.1)
+-    INSTALL(FILES ${_bin_pyc} DESTINATION ${DESTINATION_DIR}/__pycache__/)
+-  ELSE (PYTHON_SHORT_VERSION GREATER 3.1)
 +  IF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
 +    GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
 +    GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
@@ -48,11 +60,19 @@
 +    endif(WIN32)
 +
 +    SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
-+    SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
++
++    # Python 3.2 changed the pyc file location
++    IF(PYTHON_SHORT_VERSION GREATER 3.1)
++      # To get the right version for suffix
++      STRING(REPLACE "." "" _suffix ${PYTHON_SHORT_VERSION})
++      SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/__pycache__/${_filenamebase}.cpython-${_suffix}.pyc)
++    ELSE(PYTHON_SHORT_VERSION GREATER 3.1)
++      SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
++    ENDIF(PYTHON_SHORT_VERSION GREATER 3.1)
 +
 +    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
 +
-+    SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
++    SET(_message "Byte-compiling ${_bin_py}")
 +
 +    GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
 +    IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
@@ -71,8 +91,13 @@
 +        DEPENDS ${_absfilename}
 +      )
 +    ENDIF(_abs_bin_py STREQUAL ${_absfilename})
++
++    IF(PYTHON_SHORT_VERSION GREATER 3.1)
++      INSTALL(FILES ${_bin_pyc} DESTINATION ${DESTINATION_DIR}/__pycache__/)
++    ELSE (PYTHON_SHORT_VERSION GREATER 3.1)
+       INSTALL(FILES ${_bin_pyc} DESTINATION ${DESTINATION_DIR})
+-  ENDIF (PYTHON_SHORT_VERSION GREATER 3.1)
++    ENDIF (PYTHON_SHORT_VERSION GREATER 3.1)
  
--  INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
-+    INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
 +  ENDIF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
  ENDMACRO(PYTHON_INSTALL)

diff --git a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
index 4178699..afc779c 100644
--- a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
@@ -142,7 +142,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
+	"${FILESDIR}/${PN}-4.9.3-python-bytecompilation.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 7275417..e92eb28 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -145,7 +145,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
+	"${FILESDIR}/${PN}-4.9.3-python-bytecompilation.patch"
 )
 
 pkg_pretend() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-09-22 17:54 Jonathan Callen
  0 siblings, 0 replies; 38+ messages in thread
From: Jonathan Callen @ 2012-09-22 17:54 UTC (permalink / raw
  To: gentoo-commits

commit:     36014c93623cf3880b03bd1c057a3eb2a9029e65
Author:     Jonathan Callen <abcd <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 22 17:50:15 2012 +0000
Commit:     Jonathan Callen <abcd <AT> gentoo <DOT> org>
CommitDate: Sat Sep 22 17:50:15 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=36014c93

[kde-base/kdelibs] Clean up filesdir; trust that dependencies work

(Portage version: 2.2.0_alpha129/git/Linux x86_64, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.6.3-bytecode.patch     |   81 --------------------
 .../kdelibs/files/kdelibs-4.8.4-kiopointer.patch   |   21 -----
 kde-base/kdelibs/files/kdelibs-4.8.4-power.patch   |   25 ------
 .../files/kdelibs-4.8.4-sopranorevert1.patch       |   28 -------
 .../files/kdelibs-4.8.4-sopranorevert2.patch       |   29 -------
 kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild        |   13 +---
 kde-base/kdelibs/kdelibs-9999.ebuild               |   13 +---
 7 files changed, 6 insertions(+), 204 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.3-bytecode.patch b/kde-base/kdelibs/files/kdelibs-4.6.3-bytecode.patch
deleted file mode 100644
index 736e2ae..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.6.3-bytecode.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-diff -ruN kdelibs-4.6.3.orig/cmake/modules/PythonMacros.cmake kdelibs-4.6.3/cmake/modules/PythonMacros.cmake
---- kdelibs-4.6.3.orig/cmake/modules/PythonMacros.cmake	2011-04-01 15:55:50.000000000 +0200
-+++ kdelibs-4.6.3/cmake/modules/PythonMacros.cmake	2011-06-21 22:30:18.957765437 +0200
-@@ -23,40 +23,42 @@
-   # Install the source file.
-   INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
- 
--  # Byte compile and install the .pyc file.        
--  GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
--  GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
--  GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
--  GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
--
--  if(WIN32)
--    string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
--  endif(WIN32)
--
--  SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
--  SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
--
--  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
--
--  SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
--
--  GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
--  IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
--    ADD_CUSTOM_COMMAND(
--      TARGET compile_python_files
--      COMMAND ${CMAKE_COMMAND} -E echo ${message}
--      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
--      DEPENDS ${_absfilename}
--    )
--  ELSE(_abs_bin_py STREQUAL ${_absfilename})
--    ADD_CUSTOM_COMMAND(
--      TARGET compile_python_files
--      COMMAND ${CMAKE_COMMAND} -E echo ${message} 
--      COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
--      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
--      DEPENDS ${_absfilename}
--    )
--  ENDIF(_abs_bin_py STREQUAL ${_absfilename})
-+  # Byte compile and install the .pyc file.
-+  IF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
-+    GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
-+    GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
-+    GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
-+    GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
-+
-+    if(WIN32)
-+      string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
-+    endif(WIN32)
-+
-+    SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
-+    SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
-+
-+    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
-+
-+    SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
-+
-+    GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
-+    IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
-+      ADD_CUSTOM_COMMAND(
-+        TARGET compile_python_files
-+        COMMAND ${CMAKE_COMMAND} -E echo ${message}
-+        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
-+        DEPENDS ${_absfilename}
-+      )
-+    ELSE(_abs_bin_py STREQUAL ${_absfilename})
-+      ADD_CUSTOM_COMMAND(
-+        TARGET compile_python_files
-+        COMMAND ${CMAKE_COMMAND} -E echo ${message}
-+        COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
-+        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
-+        DEPENDS ${_absfilename}
-+      )
-+    ENDIF(_abs_bin_py STREQUAL ${_absfilename})
- 
--  INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
-+    INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
-+  ENDIF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
- ENDMACRO(PYTHON_INSTALL)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-kiopointer.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-kiopointer.patch
deleted file mode 100644
index a01b221..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.4-kiopointer.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/kio/kio/accessmanager.cpp
-+++ b/kio/kio/accessmanager.cpp
-@@ -37,7 +37,7 @@
- #include <klocalizedstring.h>
- 
- #include <QtCore/QUrl>
--#include <QtCore/QWeakPointer>
-+#include <QtCore/QPointer>
- #include <QtGui/QWidget>
- #include <QtDBus/QDBusInterface>
- #include <QtDBus/QDBusConnection>
-@@ -87,7 +87,7 @@
-     bool emitReadyReadOnMetaDataChange;
-     KIO::MetaData requestMetaData;
-     KIO::MetaData sessionMetaData;
--    QWidget* window;
-+    QPointer<QWidget> window;
- };
- 
- namespace Integration {
-

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-power.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-power.patch
deleted file mode 100644
index 61ea0aa..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.4-power.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 5926264d13900efec70aaac434b7b67f9d8e6837 Mon Sep 17 00:00:00 2001
-From: Lukas Tinkl <lukas@kde.org>
-Date: Tue, 19 Jun 2012 18:27:04 +0200
-Subject: [PATCH 5/5] correctly report power saving status
-
----
- solid/solid/powermanagement.cpp |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/solid/solid/powermanagement.cpp b/solid/solid/powermanagement.cpp
-index 8dc8535..faadea4 100644
---- a/solid/solid/powermanagement.cpp
-+++ b/solid/solid/powermanagement.cpp
-@@ -73,7 +73,7 @@ Solid::PowerManagement::Notifier::Notifier()
- 
- bool Solid::PowerManagement::appShouldConserveResources()
- {
--    return globalPowerManager->powerSaveStatus;
-+    return globalPowerManager->managerIface.GetPowerSaveStatus();
- }
- 
- QSet<Solid::PowerManagement::SleepState> Solid::PowerManagement::supportedSleepStates()
--- 
-1.7.9.2
-

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert1.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert1.patch
deleted file mode 100644
index 59c3174..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert1.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 76e0376d7582cfe5b898c56bf3779ca2279dace8 Mon Sep 17 00:00:00 2001
-From: Vishesh Handa <me@vhanda.in>
-Date: Thu, 14 Jun 2012 02:55:32 +0530
-Subject: [PATCH 1/5] Revert "Disconnect before re-connecting. Soprano does
- not do that for us."
-
-This reverts commit 3708be2d09700b21f934c2129218e1c7ea44efdf.
-
-This is being done so that KDE 4.8.x works with Soprano 2.7.6
----
- nepomuk/core/nepomukmainmodel.cpp |    1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/nepomuk/core/nepomukmainmodel.cpp b/nepomuk/core/nepomukmainmodel.cpp
-index 8dc0b1f..ff742d7 100644
---- a/nepomuk/core/nepomukmainmodel.cpp
-+++ b/nepomuk/core/nepomukmainmodel.cpp
-@@ -97,7 +97,6 @@ public:
-         if ( forced || (!m_socketConnectFailed && !localSocketClient.isConnected()) ) {
-             delete localSocketModel;
-             localSocketModel = 0;
--            localSocketClient.disconnect();
-             QString socketName = KGlobal::dirs()->locateLocal( "socket", "nepomuk-socket" );
-             kDebug() << "Connecting to local socket" << socketName;
-             if ( localSocketClient.connect( socketName ) ) {
--- 
-1.7.9.2
-

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert2.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert2.patch
deleted file mode 100644
index 206e654..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert2.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From bde5aad1e9f7bfb6f8d5c60197797de4a315158d Mon Sep 17 00:00:00 2001
-From: Vishesh Handa <me@vhanda.in>
-Date: Thu, 14 Jun 2012 02:56:31 +0530
-Subject: [PATCH 2/5] Revert "Always rec-connect if forced (ie. when Nepomuk
- server restarts)"
-
-This reverts commit a43824a200ed76cef48a90bd3aee8547698b7c91.
-
-This is done so that 4.8.x works with Soprano 2.7.6
----
- nepomuk/core/nepomukmainmodel.cpp |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/nepomuk/core/nepomukmainmodel.cpp b/nepomuk/core/nepomukmainmodel.cpp
-index ff742d7..be23b38 100644
---- a/nepomuk/core/nepomukmainmodel.cpp
-+++ b/nepomuk/core/nepomukmainmodel.cpp
-@@ -94,7 +94,7 @@ public:
- 
-         // we may get disconnected from the server but we don't want to try
-         // to connect every time the model is requested
--        if ( forced || (!m_socketConnectFailed && !localSocketClient.isConnected()) ) {
-+        if ( !m_socketConnectFailed && !localSocketClient.isConnected() ) {
-             delete localSocketModel;
-             localSocketModel = 0;
-             QString socketName = KGlobal::dirs()->locateLocal( "socket", "nepomuk-socket" );
--- 
-1.7.9.2
-

diff --git a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
index f6d4261..4178699 100644
--- a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
@@ -198,18 +198,10 @@ src_prepare() {
 }
 
 src_configure() {
-	if use zeroconf; then
-		if has_version net-dns/avahi; then
-			mycmakeargs=(-DWITH_Avahi=ON -DWITH_DNSSD=OFF)
-		else
-			die "USE=\"zeroconf\" enabled but net-dns/avahi wasn't found."
-		fi
-	else
-		mycmakeargs=(-DWITH_Avahi=OFF -DWITH_DNSSD=OFF)
-	fi
-	mycmakeargs+=(
+	mycmakeargs=(
 		-DWITH_HSPELL=OFF
 		-DWITH_ASPELL=OFF
+		-DWITH_DNSSD=OFF
 		-DKDE_DEFAULT_HOME=.kde4
 		-DKAUTH_BACKEND=POLKITQT-1
 		-DBUILD_libkactivities=OFF
@@ -236,6 +228,7 @@ src_configure() {
 		$(cmake-utils_use_with ssl OpenSSL)
 		$(cmake-utils_use_with udev UDev)
 		$(cmake-utils_use_with upnp HUpnp)
+		$(cmake-utils_use_with zeroconf Avahi)
 	)
 	kde4-base_src_configure
 }

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index c87f773..7275417 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -201,18 +201,10 @@ src_prepare() {
 }
 
 src_configure() {
-	if use zeroconf; then
-		if has_version net-dns/avahi; then
-			mycmakeargs=(-DWITH_Avahi=ON -DWITH_DNSSD=OFF)
-		else
-			die "USE=\"zeroconf\" enabled but net-dns/avahi wasn't found."
-		fi
-	else
-		mycmakeargs=(-DWITH_Avahi=OFF -DWITH_DNSSD=OFF)
-	fi
-	mycmakeargs+=(
+	mycmakeargs=(
 		-DWITH_HSPELL=OFF
 		-DWITH_ASPELL=OFF
+		-DWITH_DNSSD=OFF
 		-DKDE_DEFAULT_HOME=.kde4
 		-DKAUTH_BACKEND=POLKITQT-1
 		-DBUILD_libkactivities=OFF
@@ -239,6 +231,7 @@ src_configure() {
 		$(cmake-utils_use_with ssl OpenSSL)
 		$(cmake-utils_use_with udev UDev)
 		$(cmake-utils_use_with upnp HUpnp)
+		$(cmake-utils_use_with zeroconf Avahi)
 	)
 	kde4-base_src_configure
 }


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-08-23  7:56 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-08-23  7:56 UTC (permalink / raw
  To: gentoo-commits

commit:     ba93db5b57a79a9b9c7a89feae4f118aef61828e
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 23 07:55:32 2012 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Thu Aug 23 07:55:32 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=ba93db5b

[kde-base/kdelibs] Fully remove calculator key patch.

This is fixed upstream in 1c7ae18ef5d1b7adbb271c1164d0d899eb6d4ed8.

(Portage version: 2.1.11.10/git/Linux x86_64, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.2-calculator_key.patch       |   11 -----------
 kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild        |    1 -
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 -
 3 files changed, 0 insertions(+), 13 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.2-calculator_key.patch b/kde-base/kdelibs/files/kdelibs-4.8.2-calculator_key.patch
deleted file mode 100644
index 4c481c6..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.2-calculator_key.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- kdeui/util/kkeyserver_x11.cpp	2012-02-25 18:53:49.480771132 -0200
-+++ kdeui/util/kkeyserver_x11.cpp	2012-02-25 18:20:38.912403430 -0200
-@@ -355,7 +355,7 @@
-     { Qt::Key_MediaRecord, XF86XK_AudioRecord },
-     { Qt::Key_LaunchMail, XF86XK_Mail },
-     { Qt::Key_Launch0,    XF86XK_MyComputer },
--    { Qt::Key_Calculator,    XF86XK_Calculator },
-+    { Qt::Key_Launch1,    XF86XK_Calculator },
-     { Qt::Key_Memo,    XF86XK_Memo },
-     { Qt::Key_ToDoList,    XF86XK_ToDoList },
-     { Qt::Key_Calendar,    XF86XK_Calendar },

diff --git a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
index 0d599aa..f6d4261 100644
--- a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
@@ -142,7 +142,6 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
 )
 

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 0b55157..da90413 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -144,7 +144,6 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
 )
-#"${FILESDIR}/${PN}-4.8.2-calculator_key.patch" doesn't apply at all anymore
 
 pkg_pretend() {
 	if [[ ${MERGE_TYPE} != binary ]]; then


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-08-17 15:50 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-08-17 15:50 UTC (permalink / raw
  To: gentoo-commits

commit:     15dd278f55dc125f32b479c04101e8a6e800b238
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 17 15:47:08 2012 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Fri Aug 17 15:47:08 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=15dd278f

[kde-base/kdelibs] Remove solaris patches as per meeting.

(Portage version: 2.1.11.10/git/Linux x86_64, unsigned Manifest commit)

---
 .../files/kdelibs-4.3.2-solaris-fileunix.patch     |   40 -------
 .../files/kdelibs-4.3.2-solaris-getgrouplist.patch |  109 --------------------
 .../files/kdelibs-4.3.2-solaris-ksyscoca.patch     |   16 ---
 kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild        |    8 --
 kde-base/kdelibs/kdelibs-9999.ebuild               |    8 --
 5 files changed, 0 insertions(+), 181 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-fileunix.patch b/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-fileunix.patch
deleted file mode 100644
index c036206..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-fileunix.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Solaris has no d_type element in dir_ent.
-
-Please refer to
-  https://solaris.bionicmutton.org/hg/kde4-specs-432/rev/be96f7fc958a
-
---- kioslave/file/file_unix.cpp.orig	2009-03-10 13:26:04.000000000 +0100
-+++ kioslave/file/file_unix.cpp	2009-05-04 03:27:15.231305077 +0200
-@@ -42,7 +42,7 @@
- #include <grp.h>
- #include <utime.h>
- #include <pwd.h>
--
-+#include <sys/stat.h>
- #if defined(HAVE_LIMITS_H)
- #include <limits.h>  // PATH_MAX
- #endif
-@@ -338,15 +338,20 @@
-     // files where QFile::encodeName(QFile::decodeName(a)) != a.
-     QList<QByteArray> entryNames;
-     KDE_struct_dirent *ep;
-+    KDE_struct_stat hajmaep;
-     if (details == 0) {
-         // Fast path (for recursive deletion, mostly)
-         // Simply emit the name and file type, nothing else.
-         while ( ( ep = KDE_readdir( dp ) ) != 0 ) {
-             entry.clear();
-             entry.insert(KIO::UDSEntry::UDS_NAME, QFile::decodeName(ep->d_name));
--            entry.insert(KIO::UDSEntry::UDS_FILE_TYPE,
--                         (ep->d_type & DT_DIR) ? S_IFDIR : S_IFREG );
--            if (ep->d_type & DT_LNK) {
-+//            entry.insert(KIO::UDSEntry::UDS_FILE_TYPE,
-+//                         (ep->d_type & DT_DIR) ? S_IFDIR : S_IFREG );
-+KDE_lstat(  ep->d_name, &hajmaep );
-+entry.insert(KIO::UDSEntry::UDS_FILE_TYPE,
-+(S_ISDIR(hajmaep.st_mode)) ? S_IFDIR : S_IFREG );
-+//            if (ep->d_type & DT_LNK) {
-+if (S_ISLNK(hajmaep.st_mode)) {
-                 // for symlinks obey the UDSEntry contract and provide UDS_LINK_DEST
-                 // even if we don't know the link dest (and DeleteJob doesn't care...)
-                 entry.insert(KIO::UDSEntry::UDS_LINK_DEST, QLatin1String("Dummy Link Target"));

diff --git a/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-getgrouplist.patch b/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-getgrouplist.patch
deleted file mode 100644
index 59ab862..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-getgrouplist.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-Solaris does not provide getgrouplist().
-
-Please refer to
-  https://solaris.bionicmutton.org/hg/kde4-specs-432/file/539d9ed6c7b5/specs/patches/kdelibs-getgrouplist.diff
-
---- ./kio/kfile/kpropertiesdialog.cpp.orig	Tue Apr 14 23:40:16 2009
-+++ ./kio/kfile/kpropertiesdialog.cpp	Tue Apr 14 23:40:29 2009
-@@ -141,6 +141,101 @@
- #endif
- #endif
- 
-+/*-
-+ * Copyright (c) 1991, 1993
-+ *	The Regents of the University of California.  All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. All advertising materials mentioning features or use of this software
-+ *    must display the following acknowledgement:
-+ *	This product includes software developed by the University of
-+ *	California, Berkeley and its contributors.
-+ * 4. Neither the name of the University nor the names of its contributors
-+ *    may be used to endorse or promote products derived from this software
-+ *    without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-+ * SUCH DAMAGE.
-+ */
-+
-+#if 0
-+#if defined(LIBC_SCCS) && !defined(lint)
-+static char sccsid[] = "@(#)getgrouplist.c	8.2 (Berkeley) 12/8/94";
-+#endif /* LIBC_SCCS and not lint */
-+#include <sys/cdefs.h>
-+__FBSDID("$FreeBSD: src/lib/libc/gen/getgrouplist.c,v 1.14 2005/05/03 16:20:03 delphij Exp $");
-+#endif
-+
-+/*
-+ * get credential
-+ */
-+#include <sys/types.h>
-+
-+#include <grp.h>
-+#include <string.h>
-+#include <unistd.h>
-+
-+int
-+getgrouplist(const char *uname, gid_t agroup, gid_t *groups, int *grpcnt)
-+{
-+	const struct group *grp;
-+	int i, maxgroups, ngroups, ret;
-+
-+	ret = 0;
-+	ngroups = 0;
-+	maxgroups = *grpcnt;
-+	/*
-+	 * When installing primary group, duplicate it;
-+	 * the first element of groups is the effective gid
-+	 * and will be overwritten when a setgid file is executed.
-+	 */
-+	groups ? groups[ngroups++] = agroup : ngroups++;
-+	if (maxgroups > 1)
-+		groups ? groups[ngroups++] = agroup : ngroups++;
-+	/*
-+	 * Scan the group file to find additional groups.
-+	 */
-+	setgrent();
-+	while ((grp = getgrent()) != NULL) {
-+		if (groups) {
-+			for (i = 0; i < ngroups; i++) {
-+				if (grp->gr_gid == groups[i])
-+					goto skip;
-+			}
-+		}
-+		for (i = 0; grp->gr_mem[i]; i++) {
-+			if (!strcmp(grp->gr_mem[i], uname)) {
-+				if (ngroups >= maxgroups) {
-+					ret = -1;
-+					break;
-+				}
-+				groups ? groups[ngroups++] = grp->gr_gid : ngroups++;
-+				break;
-+			}
-+		}
-+skip:
-+		;
-+	}
-+	endgrent();
-+	*grpcnt = ngroups;
-+	return (ret);
-+}
- using namespace KDEPrivate;
- 
- static QString nameFromFileName(QString nameStr)

diff --git a/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-ksyscoca.patch b/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-ksyscoca.patch
deleted file mode 100644
index 64da2e6..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.3.2-solaris-ksyscoca.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Desc:	Add needed include for mmap() on Solaris.
-Author:	Daniel Vergien
-
---- kdelibs-4.3.2/kdecore/sycoca/ksycoca.cpp.orig	2009-10-14 12:12:45.697358506 +0200
-+++ kdelibs-4.3.2/kdecore/sycoca/ksycoca.cpp	2009-10-14 12:13:16.082152232 +0200
-@@ -46,6 +46,10 @@
- 
- #include "ksycocadevices_p.h"
- 
-+/* needed on solaris 10 for mmap */
-+
-+#include <sys/mman.h>
-+
- // TODO: remove mmap() from kdewin32 and use QFile::mmap() when needed
- #ifdef Q_WS_WIN
- #undef HAVE_MMAP

diff --git a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
index 9348d0d..5302c91 100644
--- a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
@@ -197,14 +197,6 @@ src_prepare() {
 		# Try to fix kkeyserver_mac
 		epatch "${FILESDIR}"/${PN}-4.3.80-kdeui_util_kkeyserver_mac.patch
 	fi
-
-	if [[ ${CHOST} == *-solaris* ]] ; then
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-ksyscoca.patch"
-		# getgrouplist not in solaris libc
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-getgrouplist.patch"
-		# solaris has no d_type element in dir_ent
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-fileunix.patch"
-	fi
 }
 
 src_configure() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 9348d0d..5302c91 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -197,14 +197,6 @@ src_prepare() {
 		# Try to fix kkeyserver_mac
 		epatch "${FILESDIR}"/${PN}-4.3.80-kdeui_util_kkeyserver_mac.patch
 	fi
-
-	if [[ ${CHOST} == *-solaris* ]] ; then
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-ksyscoca.patch"
-		# getgrouplist not in solaris libc
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-getgrouplist.patch"
-		# solaris has no d_type element in dir_ent
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-fileunix.patch"
-	fi
 }
 
 src_configure() {


^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-07-14 19:43 Johannes Huber
  0 siblings, 0 replies; 38+ messages in thread
From: Johannes Huber @ 2012-07-14 19:43 UTC (permalink / raw
  To: gentoo-commits

commit:     66ce4f06759f48049c7cea812e0609ce71a3dcde
Author:     Johannes Huber <johu <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 14 19:42:32 2012 +0000
Commit:     Johannes Huber <johu <AT> gentoo <DOT> org>
CommitDate: Sat Jul 14 19:42:48 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=66ce4f06

[kde-base/kdelibs] Move huge patch to devspace, makes repoman smile again.

(Portage version: 2.2.0_alpha118/git/Linux x86_64, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.8.95-udisks2.patch     | 4148 --------------------
 kde-base/kdelibs/kdelibs-4.8.95.ebuild             |    3 +-
 kde-base/kdelibs/kdelibs-4.8.97.ebuild             |    3 +-
 kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild        |    3 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    3 +-
 5 files changed, 8 insertions(+), 4152 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2.patch b/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2.patch
deleted file mode 100644
index 9337e59..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2.patch
+++ /dev/null
@@ -1,4148 +0,0 @@
-http://pkgs.fedoraproject.org/gitweb/?p=kdelibs.git;a=tree;h=b54aa3a731733709ef376bb8851e936641bc4517;hb=b54aa3a731733709ef376bb8851e936641bc4517
-re-done udisks2 patch from Wed, 27 Jun 2012 16:11:24 +0000
-
-diff -ruN kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt kdelibs-4.8.95/solid/solid/CMakeLists.txt
---- kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt	2012-05-23 01:45:27.000000000 +0200
-+++ kdelibs-4.8.95/solid/solid/CMakeLists.txt	2012-06-27 21:51:57.030594701 +0200
-@@ -1,6 +1,7 @@
- set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
- add_subdirectory( ifaces )
- include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
-+include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
- 
- if(WIN32)
-    include_directories( ${KDEWIN_INCLUDES} )
-@@ -39,7 +40,6 @@
- 
- file(MAKE_DIRECTORY
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
--   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
- )
-@@ -225,33 +225,6 @@
-    endif( UDEV_FOUND )
- 
- 
--   message(STATUS "Building Solid HAL backend." )
--   set(solid_LIB_SRCS ${solid_LIB_SRCS}
--   backends/hal/halacadapter.cpp
--   backends/hal/halaudiointerface.cpp
--   backends/hal/halbattery.cpp
--   backends/hal/halblock.cpp
--   backends/hal/halbutton.cpp
--   backends/hal/halcamera.cpp
--   backends/hal/halcdrom.cpp
--   backends/hal/haldeviceinterface.cpp
--   backends/hal/haldvbinterface.cpp
--   backends/hal/halfstabhandling.cpp
--   backends/hal/halgenericinterface.cpp
--   backends/hal/haldevice.cpp
--   backends/hal/halmanager.cpp
--   backends/hal/halnetworkinterface.cpp
--   backends/hal/halserialinterface.cpp
--   backends/hal/halopticaldisc.cpp
--   backends/hal/halportablemediaplayer.cpp
--   backends/hal/halprocessor.cpp
--   backends/hal/halstorageaccess.cpp
--   backends/hal/halstorage.cpp
--   backends/hal/halvideo.cpp
--   backends/hal/halvolume.cpp
--   backends/hal/halsmartcardreader.cpp
--   )
--
-    message(STATUS "Building Solid UPower backend." )
-    set(solid_LIB_SRCS ${solid_LIB_SRCS}
-    backends/upower/upowermanager.cpp
-@@ -264,18 +237,19 @@
- 
-    # FIXME: this should work on more Unix systems
-    if (CMAKE_SYSTEM_NAME MATCHES Linux)
--      message(STATUS "Building Solid UDisks backend." )
-+      message(STATUS "Building Solid UDisks2 backend." )
-       set(solid_LIB_SRCS ${solid_LIB_SRCS}
--      backends/udisks/udisksmanager.cpp
--      backends/udisks/udisksdevice.cpp
--      backends/udisks/udisksblock.cpp
--      backends/udisks/udisksstoragevolume.cpp
--      backends/udisks/udisksdeviceinterface.cpp
--      backends/udisks/udisksopticaldisc.cpp
--      backends/udisks/udisksopticaldrive.cpp
--      backends/udisks/udisksstoragedrive.cpp
--      backends/udisks/udisksstorageaccess.cpp
--      backends/udisks/udisksgenericinterface.cpp
-+      backends/udisks2/udisksmanager.cpp
-+      backends/udisks2/udisksdevice.cpp
-+      backends/udisks2/udisksblock.cpp
-+      backends/udisks2/udisksstoragevolume.cpp
-+      backends/udisks2/udisksdeviceinterface.cpp
-+      backends/udisks2/udisksopticaldisc.cpp
-+      backends/udisks2/udisksopticaldrive.cpp
-+      backends/udisks2/udisksstoragedrive.cpp
-+      backends/udisks2/udisksstorageaccess.cpp
-+      backends/udisks2/udisksgenericinterface.cpp
-+      backends/udisks2/dbus/manager.cpp
-       )
-    endif (CMAKE_SYSTEM_NAME MATCHES Linux)
- 
-diff -ruN kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt.orig kdelibs-4.8.95/solid/solid/CMakeLists.txt.orig
---- kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt.orig	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/CMakeLists.txt.orig	2012-06-27 21:50:56.879591338 +0200
-@@ -0,0 +1,463 @@
-+set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
-+add_subdirectory( ifaces )
-+include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
-+include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
-+
-+if(WIN32)
-+   include_directories( ${KDEWIN_INCLUDES} )
-+endif(WIN32)
-+
-+configure_file(solid_export.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/solid_export.h)
-+
-+include (CheckCXXSourceCompiles)
-+
-+check_cxx_source_compiles("	#ifdef __SUNPRO_CC
-+					#define __asm__ asm
-+				#endif
-+				int main() { __asm__(\"pxor %mm0, %mm0\") ; }" HAVE_X86_MMX)
-+check_cxx_source_compiles("     #ifdef __SUNPRO_CC
-+                                        #define __asm__ asm
-+                                #endif
-+				int main() { __asm__(\"xorps %xmm0, %xmm0\"); }" HAVE_X86_SSE)
-+check_cxx_source_compiles("     #ifdef __SUNPRO_CC
-+                                        #define __asm__ asm
-+                                #endif
-+				int main() { __asm__(\"xorpd %xmm0, %xmm0\"); }" HAVE_X86_SSE2)
-+check_cxx_source_compiles("     #ifdef __SUNPRO_CC
-+                                        #define __asm__ asm
-+                                #endif
-+				int main() { __asm__(\"femms\"); }" HAVE_X86_3DNOW)
-+check_cxx_source_compiles("     #ifdef __SUNPRO_CC
-+                                        #define __asm__ asm
-+                                #endif
-+				int main() { __asm__(\"mtspr 256, %0; vand %%v0, %%v0, %%v0\" : : \"r\"(-1) ); }" HAVE_PPC_ALTIVEC)
-+
-+configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-processor.h )
-+
-+
-+
-+########### next target ###############
-+
-+file(MAKE_DIRECTORY
-+   ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
-+   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
-+   ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
-+   ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
-+)
-+
-+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${KDE4_C_FLAGS}") # enable -fvisibility=hidden for C sources
-+
-+set(solid_LIB_SRCS
-+   solidnamespace.cpp
-+   managerbase.cpp
-+   device.cpp
-+   devicemanager.cpp
-+   deviceinterface.cpp
-+   genericinterface.cpp
-+   processor.cpp
-+   block.cpp
-+   storagedrive.cpp
-+   opticaldrive.cpp
-+   storagevolume.cpp
-+   opticaldisc.cpp
-+   storageaccess.cpp
-+   camera.cpp
-+   portablemediaplayer.cpp
-+   networkinterface.cpp
-+   networkshare.cpp
-+   serialinterface.cpp
-+   acadapter.cpp
-+   battery.cpp
-+   button.cpp
-+   audiointerface.cpp
-+   dvbinterface.cpp
-+   predicate.cpp
-+   predicateparse.cpp
-+   predicate_lexer.c
-+   predicate_parser.c
-+   powermanagement.cpp
-+   networking.cpp
-+   video.cpp
-+   smartcardreader.cpp
-+   internetgateway.cpp
-+   xdgbasedirs.cpp
-+
-+   ifaces/acadapter.cpp
-+   ifaces/audiointerface.cpp
-+   ifaces/battery.cpp
-+   ifaces/block.cpp
-+   ifaces/button.cpp
-+   ifaces/camera.cpp
-+   ifaces/opticaldrive.cpp
-+   ifaces/device.cpp
-+   ifaces/deviceinterface.cpp
-+   ifaces/devicemanager.cpp
-+   ifaces/dvbinterface.cpp
-+   ifaces/genericinterface.cpp
-+   ifaces/networkinterface.cpp
-+   ifaces/networkshare.cpp
-+   ifaces/serialinterface.cpp
-+   ifaces/opticaldisc.cpp
-+   ifaces/portablemediaplayer.cpp
-+   ifaces/processor.cpp
-+   ifaces/storagedrive.cpp
-+   ifaces/storagevolume.cpp
-+   ifaces/storageaccess.cpp
-+   ifaces/video.cpp
-+   ifaces/smartcardreader.cpp
-+   ifaces/internetgateway.cpp
-+
-+   backends/fakehw/fakeacadapter.cpp
-+   backends/fakehw/fakeaudiointerface.cpp
-+   backends/fakehw/fakebattery.cpp
-+   backends/fakehw/fakeblock.cpp
-+   backends/fakehw/fakebutton.cpp
-+   backends/fakehw/fakecamera.cpp
-+   backends/fakehw/fakecdrom.cpp
-+   backends/fakehw/fakedevice.cpp
-+   backends/fakehw/fakedeviceinterface.cpp
-+   backends/fakehw/fakedvbinterface.cpp
-+   backends/fakehw/fakegenericinterface.cpp
-+   backends/fakehw/fakemanager.cpp
-+   backends/fakehw/fakenetworkshare.cpp
-+   backends/fakehw/fakenetworkinterface.cpp
-+   backends/fakehw/fakeopticaldisc.cpp
-+   backends/fakehw/fakeportablemediaplayer.cpp
-+   backends/fakehw/fakeprocessor.cpp
-+   backends/fakehw/fakestorage.cpp
-+   backends/fakehw/fakestorageaccess.cpp
-+   backends/fakehw/fakevideo.cpp
-+   backends/fakehw/fakevolume.cpp
-+   backends/fakehw/fakesmartcardreader.cpp
-+
-+   backends/shared/rootdevice.cpp
-+   backends/shared/cpufeatures.cpp
-+)
-+
-+if(NOT APPLE)
-+  macro_optional_find_package( HUpnp )
-+
-+  if ( HUPNP_FOUND AND ((HUPNP_VERSION_MAJOR EQUAL 0 AND HUPNP_VERSION_MINOR EQUAL 9) OR (HUPNP_VERSION_MAJOR EQUAL 1)))
-+    include_directories( ${HUPNP_INCLUDE_DIR} )
-+    message(STATUS "Building Solid UPnP backend." )
-+    set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+       backends/upnp/upnpdevice.cpp
-+       backends/upnp/upnpdevicemanager.cpp
-+       backends/upnp/upnpdeviceinterface.cpp
-+       backends/upnp/upnpmediaserver.cpp
-+       backends/upnp/upnpinternetgateway.cpp
-+       backends/upnp/upnpcontrolpoint.cpp
-+    )
-+  else ()
-+    set(HUPNP_FOUND false)
-+  endif ()
-+  macro_log_feature( HUPNP_FOUND "HUPnP" "UPnP support for Solid" "http://www.herqq.org" FALSE "" "Allows Solid to provide information about UPnP devices on the network" )
-+endif(NOT APPLE)
-+
-+if(NOT WIN32 AND NOT APPLE)
-+#   message(STATUS "Building Solid KUPnP backend." )
-+#   set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+
-+#   backends/kupnp/cagibidbuscodec.cpp
-+#   backends/kupnp/cagibidevice.cpp
-+#   backends/kupnp/kupnpstorageaccess.cpp
-+#   backends/kupnp/kupnpdeviceinterface.cpp
-+#   backends/kupnp/mediaserver1.cpp
-+#   backends/kupnp/mediaserver2.cpp
-+#   backends/kupnp/mediaserver3.cpp
-+#   backends/kupnp/internetgatewaydevice1.cpp
-+#   backends/kupnp/kupnpdevice.cpp
-+#   backends/kupnp/kupnprootdevice.cpp
-+#   backends/kupnp/kupnpmanager.cpp
-+
-+#   )
-+
-+   macro_optional_find_package( UDev )
-+   macro_log_feature( UDEV_FOUND "UDev" "UDev support for Solid" "http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" FALSE "" "Allows Solid to use UDev to provide information about devices on Linux" )
-+   configure_file( config-solid.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-solid.h )
-+
-+
-+   if ( UDEV_FOUND )
-+      message(STATUS "Building Solid UDev backend." )
-+      set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+      backends/udev/udevdevice.cpp
-+      backends/udev/udevmanager.cpp
-+      backends/udev/udevdeviceinterface.cpp
-+      backends/udev/udevgenericinterface.cpp
-+      backends/udev/cpuinfo.cpp
-+      backends/udev/udevprocessor.cpp
-+      backends/udev/udevcamera.cpp
-+      backends/udev/udevvideo.cpp
-+      backends/udev/udevaudiointerface.cpp
-+      backends/udev/udevnetworkinterface.cpp
-+      backends/udev/udevserialinterface.cpp
-+      backends/udev/udevaudiointerface_p.cpp
-+      backends/udev/udevportablemediaplayer.cpp
-+      backends/udev/udevdvbinterface.cpp
-+      backends/udev/udevblock.cpp
-+      backends/shared/udevqtclient.cpp
-+      backends/shared/udevqtdevice.cpp
-+      )
-+
-+      # check for media-player-info (runtime-only optional dependency)
-+      set(XDG_DATA_DIRS_ENV $ENV{XDG_DATA_DIRS})  # if(ENV{..}) does not work for me
-+      if(XDG_DATA_DIRS_ENV)
-+         find_path(MEDIAPLAYERINFO_PATH sony_psp.mpi
-+            PATHS ENV XDG_DATA_DIRS
-+            PATH_SUFFIXES "media-player-info" NO_DEFAULT_PATH
-+         )
-+      else(XDG_DATA_DIRS_ENV)
-+         set(XDG_DATA_DIRS "/usr/share")
-+         message(STATUS "Warning: environment variable XDG_DATA_DIRS not set, falling back to ${XDG_DATA_DIRS}")
-+         find_path(MEDIAPLAYERINFO_PATH sony_psp.mpi
-+            PATHS "${XDG_DATA_DIRS}"
-+            PATH_SUFFIXES "media-player-info" NO_DEFAULT_PATH
-+         )
-+      endif(XDG_DATA_DIRS_ENV)
-+
-+      macro_log_feature(MEDIAPLAYERINFO_PATH
-+         "media-player-info"
-+         "Enables identification and querying of portable media players"
-+         "http://www.freedesktop.org/wiki/Software/media-player-info"
-+         FALSE
-+         ""
-+         "Runtime-only dependency of the udev solid backend. Support for m-p-i is included even if not found during build"
-+      )
-+   endif( UDEV_FOUND )
-+
-+
-+   message(STATUS "Building Solid HAL backend." )
-+   set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+   backends/hal/halacadapter.cpp
-+   backends/hal/halaudiointerface.cpp
-+   backends/hal/halbattery.cpp
-+   backends/hal/halblock.cpp
-+   backends/hal/halbutton.cpp
-+   backends/hal/halcamera.cpp
-+   backends/hal/halcdrom.cpp
-+   backends/hal/haldeviceinterface.cpp
-+   backends/hal/haldvbinterface.cpp
-+   backends/hal/halfstabhandling.cpp
-+   backends/hal/halgenericinterface.cpp
-+   backends/hal/haldevice.cpp
-+   backends/hal/halmanager.cpp
-+   backends/hal/halnetworkinterface.cpp
-+   backends/hal/halserialinterface.cpp
-+   backends/hal/halopticaldisc.cpp
-+   backends/hal/halportablemediaplayer.cpp
-+   backends/hal/halprocessor.cpp
-+   backends/hal/halstorageaccess.cpp
-+   backends/hal/halstorage.cpp
-+   backends/hal/halvideo.cpp
-+   backends/hal/halvolume.cpp
-+   backends/hal/halsmartcardreader.cpp
-+   )
-+
-+   message(STATUS "Building Solid UPower backend." )
-+   set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+   backends/upower/upowermanager.cpp
-+   backends/upower/upowerdevice.cpp
-+   backends/upower/upowerbattery.cpp
-+   backends/upower/upoweracadapter.cpp
-+   backends/upower/upowerdeviceinterface.cpp
-+   backends/upower/upowergenericinterface.cpp
-+   )
-+
-+   # FIXME: this should work on more Unix systems
-+   if (CMAKE_SYSTEM_NAME MATCHES Linux)
-+      message(STATUS "Building Solid UDisks backend." )
-+      set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+      backends/udisks/udisksmanager.cpp
-+      backends/udisks/udisksdevice.cpp
-+      backends/udisks/udisksblock.cpp
-+      backends/udisks/udisksstoragevolume.cpp
-+      backends/udisks/udisksdeviceinterface.cpp
-+      backends/udisks/udisksopticaldisc.cpp
-+      backends/udisks/udisksopticaldrive.cpp
-+      backends/udisks/udisksstoragedrive.cpp
-+      backends/udisks/udisksstorageaccess.cpp
-+      backends/udisks/udisksgenericinterface.cpp
-+      )
-+   endif (CMAKE_SYSTEM_NAME MATCHES Linux)
-+
-+   message(STATUS "Building Solid fstab backend." )
-+   set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+   backends/fstab/fstabmanager.cpp
-+   backends/fstab/fstabdevice.cpp
-+   backends/fstab/fstabnetworkshare.cpp
-+   backends/fstab/fstabstorageaccess.cpp
-+   backends/fstab/fstabhandling.cpp
-+   backends/fstab/fstabwatcher.cpp
-+   )
-+
-+endif(NOT WIN32 AND NOT APPLE)
-+
-+if(APPLE)
-+   find_package(IOKit REQUIRED)
-+
-+   message(STATUS "-- Building Solid IOKit backend." )
-+   set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+   backends/iokit/iokitmanager.cpp
-+   backends/iokit/iokitdevice.cpp
-+   backends/iokit/cfhelper.cpp
-+   backends/iokit/iokitdeviceinterface.cpp
-+   backends/iokit/iokitgenericinterface.cpp
-+   backends/iokit/iokitprocessor.cpp
-+   backends/iokit/iokitnetworkinterface.cpp
-+   backends/iokit/iokitserialinterface.cpp
-+   backends/iokit/iokitbattery.cpp
-+   )
-+endif(APPLE)
-+
-+if(WIN32)
-+   include(CheckIncludeFileCXX)
-+   check_include_file_cxx(wbemidl.h HAVE_WBEM)
-+   FIND_LIBRARY(WBEM_LIBRARIES NAMES wbemuuid wbemuuidd)
-+   if(HAVE_WBEM AND WBEM_LIBRARIES)
-+      set(HAVE_WBEM True)
-+      message(STATUS "Found wbemuuid library: ${WBEM_LIBRARIES}")
-+   else(HAVE_WBEM AND WBEM_LIBRARIES)
-+      set(HAVE_WBEM False)
-+   endif(HAVE_WBEM AND WBEM_LIBRARIES)
-+   if(HAVE_WBEM AND NOT WINCE)
-+       set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_WBEM")
-+       message(STATUS "-- Building Solid WMI backend." )
-+
-+       set(solid_LIB_SRCS ${solid_LIB_SRCS}
-+       backends/wmi/wmiacadapter.cpp
-+       backends/wmi/wmiaudiointerface.cpp
-+       backends/wmi/wmibattery.cpp
-+       backends/wmi/wmiblock.cpp
-+       backends/wmi/wmibutton.cpp
-+       backends/wmi/wmicamera.cpp
-+       backends/wmi/wmicdrom.cpp
-+       backends/wmi/wmideviceinterface.cpp
-+       backends/wmi/wmidvbinterface.cpp
-+       backends/wmi/wmigenericinterface.cpp
-+       backends/wmi/wmidevice.cpp
-+       backends/wmi/wmimanager.cpp
-+       backends/wmi/wminetworkinterface.cpp
-+       backends/wmi/wmiopticaldisc.cpp
-+       backends/wmi/wmiportablemediaplayer.cpp
-+       backends/wmi/wmiprocessor.cpp
-+       backends/wmi/wmiquery.cpp
-+       backends/wmi/wmistorageaccess.cpp
-+       backends/wmi/wmistorage.cpp
-+       backends/wmi/wmivideo.cpp
-+       backends/wmi/wmivolume.cpp
-+
-+       )
-+    endif(HAVE_WBEM AND NOT WINCE)
-+endif(WIN32)
-+
-+set_source_files_properties( org.freedesktop.PowerManagement.xml
-+                             org.freedesktop.PowerManagement.Inhibit.xml
-+                             org.kde.Solid.PowerManagement.PolicyAgent.xml
-+                             PROPERTIES NO_NAMESPACE TRUE)
-+
-+qt4_add_dbus_interfaces(solid_LIB_SRCS org.freedesktop.PowerManagement.xml
-+                        org.freedesktop.PowerManagement.Inhibit.xml
-+                        org.kde.Solid.PowerManagement.PolicyAgent.xml)
-+
-+qt4_add_dbus_interface(solid_LIB_SRCS org.kde.Solid.Networking.Client.xml
-+                       org_kde_solid_networking_client)
-+
-+set(solid_OPTIONAL_LIBS)
-+
-+if(WIN32)
-+   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${KDEWIN_LIBRARY})
-+   if(HAVE_WBEM)
-+      set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${WBEM_LIBRARIES})
-+   endif(HAVE_WBEM)
-+endif(WIN32)
-+
-+if(APPLE)
-+   set(solid_OPTIONAL_LIBS ${IOKIT_LIBRARY})
-+endif(APPLE)
-+
-+kde4_add_library(solid ${LIBRARY_TYPE} ${solid_LIB_SRCS})
-+
-+if ( HUPNP_FOUND )
-+   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${HUPNP_LIBS})
-+endif( HUPNP_FOUND )
-+
-+if ( UDEV_FOUND )
-+   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${UDEV_LIBS})
-+endif ( UDEV_FOUND )
-+
-+target_link_libraries(solid ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTGUI_LIBRARY} ${solid_OPTIONAL_LIBS} )
-+target_link_libraries(solid LINK_INTERFACE_LIBRARIES ${QT_CORE_LIBRARY} )
-+
-+if (WINCE)
-+   target_link_libraries(solid ${WCECOMPAT_LIBRARIES})
-+endif(WINCE)
-+
-+set_target_properties(solid PROPERTIES
-+   VERSION ${GENERIC_LIB_VERSION}
-+   SOVERSION ${GENERIC_LIB_SOVERSION}
-+)
-+install(TARGETS solid EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
-+
-+install(FILES org.kde.Solid.Networking.Client.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
-+install(FILES org.kde.Solid.PowerManagement.PolicyAgent.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
-+install(FILES org.freedesktop.PowerManagement.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
-+install(FILES org.freedesktop.PowerManagement.Inhibit.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
-+
-+########### static lib for tests  ###############
-+
-+kde4_add_library(solid_static STATIC ${solid_LIB_SRCS})
-+
-+target_link_libraries(solid_static ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTGUI_LIBRARY} ${solid_OPTIONAL_LIBS})
-+
-+if(WIN32)
-+   set_target_properties(solid_static PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
-+endif(WIN32)
-+########### install files ###############
-+
-+install( FILES ${CMAKE_CURRENT_BINARY_DIR}/solid_export.h solidnamespace.h device.h
-+               devicenotifier.h deviceinterface.h genericinterface.h processor.h block.h
-+               storageaccess.h storagedrive.h opticaldrive.h storagevolume.h opticaldisc.h
-+               camera.h portablemediaplayer.h networkinterface.h acadapter.h battery.h
-+               button.h audiointerface.h dvbinterface.h predicate.h powermanagement.h
-+               networking.h video.h serialinterface.h smartcardreader.h internetgateway.h
-+               networkshare.h DESTINATION ${INCLUDE_INSTALL_DIR}/solid COMPONENT Devel)
-+
-+########### parser build ###############
-+
-+set(lexer_FILE predicate_lexer)
-+set(parser_FILE predicate_parser)
-+
-+find_package(Flex)
-+macro_log_feature(FLEX_FOUND
-+   "Flex"
-+   "Allows the Solid predicate parser to be updated"
-+   "http://flex.sourceforge.net"
-+   FALSE
-+   ""
-+   "Required by the UpdateSolidPredicateParser target (mainly useful for developers)")
-+
-+find_program(BISON_EXECUTABLE bison)
-+macro_log_feature(BISON_EXECUTABLE
-+   "Bison"
-+   "Allows the Solid predicate parser to be updated"
-+   "http://www.gnu.org/software/bison"
-+   FALSE
-+   ""
-+   "Required by the UpdateSolidPredicateParser target (mainly useful for developers)")
-+mark_as_advanced(BISON_EXECUTABLE)      # don't show it in the simple view in cmake-gui/ccmake
-+
-+if (FLEX_EXECUTABLE AND BISON_EXECUTABLE)
-+
-+   add_custom_target(UpdateSolidPredicateParser
-+                     COMMAND ${FLEX_EXECUTABLE} -P Solid -o${lexer_FILE}.c ${lexer_FILE}.l
-+                     COMMAND ${BISON_EXECUTABLE} -p Solid -d -b ${parser_FILE} ${parser_FILE}.y
-+                     COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.c ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.c
-+                     COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.h ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.h
-+                     COMMAND ${CMAKE_COMMAND} -E remove ${parser_FILE}.tab.c ${parser_FILE}.tab.h
-+                     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-+
-+else (FLEX_EXECUTABLE AND BISON_EXECUTABLE)
-+   add_custom_target(UpdateSolidPredicateParser
-+                     COMMAND echo "flex and/or bison not found, so target UpdateSolidPredicateParser inactive")
-+endif (FLEX_EXECUTABLE AND BISON_EXECUTABLE)
-+
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.cpp	2012-06-27 21:52:42.084597220 +0200
-@@ -0,0 +1,26 @@
-+/*
-+ * This file was generated by qdbusxml2cpp version 0.7
-+ * Command line was: qdbusxml2cpp -p manager manager.xml
-+ *
-+ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-+ *
-+ * This is an auto-generated file.
-+ * This file may have been hand-edited. Look for HAND-EDIT comments
-+ * before re-generating it.
-+ */
-+
-+#include "manager.h"
-+
-+/*
-+ * Implementation of interface class OrgFreedesktopDBusObjectManagerInterface
-+ */
-+
-+OrgFreedesktopDBusObjectManagerInterface::OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
-+    : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
-+{
-+}
-+
-+OrgFreedesktopDBusObjectManagerInterface::~OrgFreedesktopDBusObjectManagerInterface()
-+{
-+}
-+
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.h kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.h	2012-06-27 21:52:42.084597220 +0200
-@@ -0,0 +1,59 @@
-+/*
-+ * This file was generated by qdbusxml2cpp version 0.7
-+ * Command line was: qdbusxml2cpp -p manager manager.xml
-+ *
-+ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-+ *
-+ * This is an auto-generated file.
-+ * Do not edit! All changes made to it will be lost.
-+ */
-+
-+#ifndef MANAGER_H_1329493525
-+#define MANAGER_H_1329493525
-+
-+#include <QtCore/QObject>
-+#include <QtCore/QByteArray>
-+#include <QtCore/QList>
-+#include <QtCore/QMap>
-+#include <QtCore/QString>
-+#include <QtCore/QStringList>
-+#include <QtCore/QVariant>
-+#include <QtDBus/QtDBus>
-+
-+#include "../udisks2.h"
-+
-+/*
-+ * Proxy class for interface org.freedesktop.DBus.ObjectManager
-+ */
-+class OrgFreedesktopDBusObjectManagerInterface: public QDBusAbstractInterface
-+{
-+    Q_OBJECT
-+public:
-+    static inline const char *staticInterfaceName()
-+    { return "org.freedesktop.DBus.ObjectManager"; }
-+
-+public:
-+    OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
-+
-+    ~OrgFreedesktopDBusObjectManagerInterface();
-+
-+public Q_SLOTS: // METHODS
-+    inline QDBusPendingReply<DBUSManagerStruct> GetManagedObjects()
-+    {
-+        QList<QVariant> argumentList;
-+        return asyncCallWithArgumentList(QLatin1String("GetManagedObjects"), argumentList);
-+    }
-+
-+Q_SIGNALS: // SIGNALS
-+    void InterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void InterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+};
-+
-+namespace org {
-+  namespace freedesktop {
-+    namespace DBus {
-+      typedef ::OrgFreedesktopDBusObjectManagerInterface ObjectManager;
-+    }
-+  }
-+}
-+#endif
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.xml kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.xml
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.xml	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.xml	2012-06-27 21:52:42.085597220 +0200
-@@ -0,0 +1,21 @@
-+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-+                      "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-+<node>
-+  <interface name="org.freedesktop.DBus.ObjectManager">
-+    <method name="GetManagedObjects">
-+      <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out">
-+        <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBUSManagerStruct"/>
-+      </arg>
-+    </method>
-+    <signal name="InterfacesAdded">
-+      <arg type="o" name="object_path"/>
-+      <arg type="a{sa{sv}}" name="interfaces_and_properties">
-+        <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QVariantMapMap"/>
-+      </arg>
-+    </signal>
-+    <signal name="InterfacesRemoved">
-+      <arg type="o" name="object_path"/>
-+      <arg type="as" name="interfaces"/>
-+    </signal>
-+  </interface>
-+</node>
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisks2.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisks2.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisks2.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisks2.h	2012-06-27 21:52:42.085597220 +0200
-@@ -0,0 +1,77 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef SOLID_BACKENDS_UDISKS2_H
-+#define SOLID_BACKENDS_UDISKS2_H
-+
-+#include <QMetaType>
-+#include <QtDBus>
-+#include <QVariant>
-+#include <QMap>
-+#include <QList>
-+
-+typedef QList<QByteArray> QByteArrayList;
-+Q_DECLARE_METATYPE(QByteArrayList)
-+
-+typedef QMap<QString,QVariantMap> QVariantMapMap;
-+Q_DECLARE_METATYPE(QVariantMapMap)
-+
-+typedef QMap<QDBusObjectPath, QVariantMapMap> DBUSManagerStruct;
-+Q_DECLARE_METATYPE(DBUSManagerStruct)
-+
-+/* UDisks2 */
-+#define UD2_DBUS_SERVICE                 "org.freedesktop.UDisks2"
-+#define UD2_DBUS_PATH                    "/org/freedesktop/UDisks2"
-+#define UD2_UDI_DISKS_PREFIX             "/org/freedesktop/UDisks2"
-+#define UD2_DBUS_PATH_MANAGER            "/org/freedesktop/UDisks2/Manager"
-+#define UD2_DBUS_PATH_DRIVES             "/org/freedesktop/UDisks2/drives/"
-+#define UD2_DBUS_PATH_JOBS               "/org/freedesktop/UDisks2/jobs/"
-+#define DBUS_INTERFACE_PROPS             "org.freedesktop.DBus.Properties"
-+#define DBUS_INTERFACE_INTROSPECT        "org.freedesktop.DBus.Introspectable"
-+#define DBUS_INTERFACE_MANAGER           "org.freedesktop.DBus.ObjectManager"
-+#define UD2_DBUS_INTERFACE_BLOCK         "org.freedesktop.UDisks2.Block"
-+#define UD2_DBUS_INTERFACE_DRIVE         "org.freedesktop.UDisks2.Drive"
-+#define UD2_DBUS_INTERFACE_PARTITION     "org.freedesktop.UDisks2.Partition"
-+#define UD2_DBUS_INTERFACE_PARTITIONTABLE   "org.freedesktop.UDisks2.PartitionTable"
-+#define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
-+#define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
-+#define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
-+
-+/* errors */
-+#define UD2_ERROR_UNAUTHORIZED            "org.freedesktop.PolicyKit.Error.NotAuthorized"
-+#define UD2_ERROR_BUSY                    "org.freedesktop.UDisks2.Error.DeviceBusy"
-+#define UD2_ERROR_FAILED                  "org.freedesktop.UDisks2.Error.Failed"
-+#define UD2_ERROR_CANCELED                "org.freedesktop.UDisks2.Error.Cancelled"
-+#define UD2_ERROR_INVALID_OPTION          "org.freedesktop.UDisks2.Error.OptionNotPermitted"
-+#define UD2_ERROR_MISSING_DRIVER          "org.freedesktop.UDisks2.Error.NotSupported"
-+
-+#define UD2_ERROR_ALREADY_MOUNTED         "org.freedesktop.UDisks2.Error.AlreadyMounted"
-+#define UD2_ERROR_NOT_MOUNTED             "org.freedesktop.UDisks2.Error.NotMounted"
-+#define UD2_ERROR_MOUNTED_BY_OTHER_USER   "org.freedesktop.UDisks2.Error.MountedByOtherUser"
-+#define UD2_ERROR_ALREADY_UNMOUNTING      "org.freedesktop.UDisks2.Error.AlreadyUnmounting"
-+#define UD2_ERROR_TIMED_OUT               "org.freedesktop.UDisks2.Error.Timedout"
-+#define UD2_ERROR_WOULD_WAKEUP            "org.freedesktop.UDisks2.Error.WouldWakeup"
-+#define UD2_ERROR_ALREADY_CANCELLED       "org.freedesktop.UDisks2.Error.AlreadyCancelled"
-+
-+#define UD2_ERROR_NOT_AUTHORIZED          "org.freedesktop.UDisks2.Error.NotAuthorized"
-+#define UD2_ERROR_NOT_AUTHORIZED_CAN_OBTAIN  "org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain"
-+#define UD2_ERROR_NOT_AUTHORIZED_DISMISSED   "org.freedesktop.UDisks2.Error.NotAuthorizedDismissed"
-+
-+#endif // SOLID_BACKENDS_UDISKS2_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.cpp	2012-06-27 21:52:42.085597220 +0200
-@@ -0,0 +1,84 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <linux/kdev_t.h>
-+
-+#include <QFile>
-+#include <QtDBus/QDBusConnection>
-+#include <QtDBus/QDBusPendingReply>
-+
-+#include "udisksblock.h"
-+#include "dbus/manager.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+Block::Block(Device *dev)
-+    : DeviceInterface(dev)
-+{
-+    m_devNum = m_device->prop("DeviceNumber").toULongLong();
-+    m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
-+
-+    // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
-+    if (m_devNum == 0 || m_devFile.isEmpty()) {
-+        org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
-+        QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
-+        reply.waitForFinished();
-+        if (!reply.isError()) {  // enum devices
-+            Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
-+                const QString udi = path.path();
-+
-+                if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
-+                    continue;
-+
-+                Device device(udi);
-+                if (device.drivePath() == dev->udi()) {
-+                    m_devNum = device.prop("DeviceNumber").toULongLong();
-+                    m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
-+                    break;
-+                }
-+            }
-+        }
-+        else  // show error
-+        {
-+            qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
-+        }
-+    }
-+
-+    //qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
-+}
-+
-+Block::~Block()
-+{
-+}
-+
-+QString Block::device() const
-+{
-+    return m_devFile;
-+}
-+
-+int Block::deviceMinor() const
-+{
-+    return MINOR(m_devNum);
-+}
-+
-+int Block::deviceMajor() const
-+{
-+    return MAJOR(m_devNum);
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.h	2012-06-27 21:52:42.086597220 +0200
-@@ -0,0 +1,56 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2BLOCK_H
-+#define UDISKS2BLOCK_H
-+
-+#include <solid/ifaces/block.h>
-+#include "udisksdeviceinterface.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class Block: public DeviceInterface, virtual public Solid::Ifaces::Block
-+{
-+
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::Block)
-+
-+public:
-+    Block(Device *dev);
-+    virtual ~Block();
-+
-+    virtual QString device() const;
-+    virtual int deviceMinor() const;
-+    virtual int deviceMajor() const;
-+private:
-+    dev_t m_devNum;
-+    QString m_devFile;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2BLOCK_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.cpp	2012-06-27 21:52:42.087597220 +0200
-@@ -0,0 +1,910 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksdevice.h"
-+#include "udisksblock.h"
-+#include "udisksdeviceinterface.h"
-+#include "udisksstoragevolume.h"
-+#include "udisksopticaldisc.h"
-+#include "udisksopticaldrive.h"
-+#include "udisksstorageaccess.h"
-+#include "udisksgenericinterface.h"
-+
-+#include <solid/genericinterface.h>
-+#include <solid/deviceinterface.h>
-+#include <solid/device.h>
-+
-+#include <QtCore/QDebug>
-+
-+#include <QtDBus/QDBusMessage>
-+#include <QtDBus/QDBusMetaType>
-+#include <QtDBus/QDBusPendingReply>
-+#include <QtDBus/QDBusArgument>
-+
-+#include <QtXml/QDomDocument>
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+// Adapted from KLocale as Solid needs to be Qt-only
-+static QString formatByteSize(double size)
-+{
-+    // Per IEC 60027-2
-+
-+    // Binary prefixes
-+    //Tebi-byte             TiB             2^40    1,099,511,627,776 bytes
-+    //Gibi-byte             GiB             2^30    1,073,741,824 bytes
-+    //Mebi-byte             MiB             2^20    1,048,576 bytes
-+    //Kibi-byte             KiB             2^10    1,024 bytes
-+
-+    QString s;
-+    // Gibi-byte
-+    if ( size >= 1073741824.0 )
-+    {
-+        size /= 1073741824.0;
-+        if ( size > 1024 ) // Tebi-byte
-+            s = QObject::tr("%1 TiB").arg(QLocale().toString(size / 1024.0, 'f', 1));
-+        else
-+            s = QObject::tr("%1 GiB").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Mebi-byte
-+    else if ( size >= 1048576.0 )
-+    {
-+        size /= 1048576.0;
-+        s = QObject::tr("%1 MiB").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Kibi-byte
-+    else if ( size >= 1024.0 )
-+    {
-+        size /= 1024.0;
-+        s = QObject::tr("%1 KiB").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Just byte
-+    else if ( size > 0 )
-+    {
-+        s = QObject::tr("%1 B").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Nothing
-+    else
-+    {
-+        s = QObject::tr("0 B");
-+    }
-+    return s;
-+}
-+
-+Device::Device(const QString &udi)
-+    : Solid::Ifaces::Device()
-+    , m_udi(udi)
-+{
-+    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
-+                                  QString(), // no interface, we aggregate them
-+                                  QDBusConnection::systemBus());
-+
-+    if (m_device->isValid()) {
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                             SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
-+
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
-+                                             this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
-+                                             this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
-+
-+        initInterfaces();
-+    }
-+}
-+
-+Device::~Device()
-+{
-+    delete m_device;
-+}
-+
-+QObject* Device::createDeviceInterface(const Solid::DeviceInterface::Type& type)
-+{
-+    if (!queryDeviceInterface(type)) {
-+        return 0;
-+    }
-+
-+    DeviceInterface *iface = 0;
-+    switch (type)
-+    {
-+    case Solid::DeviceInterface::GenericInterface:
-+        iface = new GenericInterface(this);
-+        break;
-+    case Solid::DeviceInterface::Block:
-+        iface = new Block(this);
-+        break;
-+    case Solid::DeviceInterface::StorageAccess:
-+        iface = new StorageAccess(this);
-+        break;
-+    case Solid::DeviceInterface::StorageDrive:
-+        iface = new StorageDrive(this);
-+        break;
-+    case Solid::DeviceInterface::OpticalDrive:
-+        iface = new OpticalDrive(this);
-+        break;
-+    case Solid::DeviceInterface::StorageVolume:
-+        iface = new StorageVolume(this);
-+        break;
-+    case Solid::DeviceInterface::OpticalDisc:
-+        iface = new OpticalDisc(this);
-+        break;
-+    default:
-+        break;
-+    }
-+    return iface;
-+}
-+
-+bool Device::queryDeviceInterface(const Solid::DeviceInterface::Type& type) const
-+{
-+    switch (type) {
-+    case Solid::DeviceInterface::GenericInterface:
-+        return true;
-+    case Solid::DeviceInterface::Block:
-+        return isBlock();
-+    case Solid::DeviceInterface::StorageVolume:
-+        return isStorageVolume();
-+    case Solid::DeviceInterface::StorageAccess:
-+        return isStorageAccess();
-+    case Solid::DeviceInterface::StorageDrive:
-+        return isDrive();
-+    case Solid::DeviceInterface::OpticalDrive:
-+        return isOpticalDrive();
-+    case Solid::DeviceInterface::OpticalDisc:
-+        return isOpticalDisc();
-+    default:
-+        return false;
-+    }
-+}
-+
-+QStringList Device::emblems() const
-+{
-+    QStringList res;
-+
-+    if (queryDeviceInterface(Solid::DeviceInterface::StorageAccess))
-+    {
-+        const UDisks2::StorageAccess accessIface(const_cast<Device *>(this));
-+        if (accessIface.isAccessible())
-+        {
-+            if (isEncryptedContainer())
-+                res << "emblem-encrypted-unlocked";
-+            else
-+                res << "emblem-mounted";
-+        }
-+        else
-+        {
-+            if (isEncryptedContainer())
-+                res << "emblem-encrypted-locked";
-+            else
-+                res << "emblem-unmounted";
-+        }
-+    }
-+
-+    return res;
-+}
-+
-+QString Device::description() const
-+{
-+    const QString hintName = prop("HintName").toString();
-+    if (!hintName.isEmpty())
-+        return hintName;
-+
-+    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
-+        return storageDescription();
-+    else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
-+        return volumeDescription();
-+    else
-+        return product();
-+}
-+
-+QString Device::storageDescription() const
-+{
-+    QString description;
-+    const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
-+    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
-+    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
-+
-+    if (drive_type == Solid::StorageDrive::CdromDrive)
-+    {
-+        const UDisks2::OpticalDrive opticalDrive(const_cast<Device*>(this));
-+        Solid::OpticalDrive::MediumTypes mediumTypes = opticalDrive.supportedMedia();
-+        QString first;
-+        QString second;
-+
-+        first = QObject::tr("CD-ROM", "First item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Cdr)
-+            first = QObject::tr("CD-R", "First item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Cdrw)
-+            first = QObject::tr("CD-RW", "First item of %1%2 Drive sentence");
-+
-+        if (mediumTypes & Solid::OpticalDrive::Dvd)
-+            second = QObject::tr("/DVD-ROM", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdplusr)
-+            second = QObject::tr("/DVD+R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdplusrw)
-+            second = QObject::tr("/DVD+RW", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdr)
-+            second = QObject::tr("/DVD-R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdrw)
-+            second = QObject::tr("/DVD-RW", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdram)
-+            second = QObject::tr("/DVD-RAM", "Second item of %1%2 Drive sentence");
-+        if ((mediumTypes & Solid::OpticalDrive::Dvdr) && (mediumTypes & Solid::OpticalDrive::Dvdplusr))
-+        {
-+            if(mediumTypes & Solid::OpticalDrive::Dvdplusdl)
-+                second = QObject::trUtf8("/DVD±R DL", "Second item of %1%2 Drive sentence");
-+            else
-+                second = QObject::trUtf8("/DVD±R", "Second item of %1%2 Drive sentence");
-+        }
-+        if ((mediumTypes & Solid::OpticalDrive::Dvdrw) && (mediumTypes & Solid::OpticalDrive::Dvdplusrw))
-+        {
-+            if((mediumTypes & Solid::OpticalDrive::Dvdplusdl) || (mediumTypes & Solid::OpticalDrive::Dvdplusdlrw))
-+                second = QObject::trUtf8("/DVD±RW DL", "Second item of %1%2 Drive sentence");
-+            else
-+                second = QObject::trUtf8("/DVD±RW", "Second item of %1%2 Drive sentence");
-+        }
-+        if (mediumTypes & Solid::OpticalDrive::Bd)
-+            second = QObject::tr("/BD-ROM", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Bdr)
-+            second = QObject::tr("/BD-R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Bdre)
-+            second = QObject::tr("/BD-RE", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::HdDvd)
-+            second = QObject::tr("/HD DVD-ROM", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::HdDvdr)
-+            second = QObject::tr("/HD DVD-R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::HdDvdrw)
-+            second = QObject::tr("/HD DVD-RW", "Second item of %1%2 Drive sentence");
-+
-+        if (drive_is_hotpluggable)
-+            description = QObject::tr("External %1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
-+        else
-+            description = QObject::tr("%1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
-+
-+        return description;
-+    }
-+
-+    if (drive_type == Solid::StorageDrive::Floppy)
-+    {
-+        if (drive_is_hotpluggable)
-+            description = QObject::tr("External Floppy Drive");
-+        else
-+            description = QObject::tr("Floppy Drive");
-+
-+        return description;
-+    }
-+
-+    bool drive_is_removable = storageDrive.isRemovable();
-+
-+    if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
-+    {
-+        QString size_str = formatByteSize(storageDrive.size());
-+        if (!size_str.isEmpty())
-+        {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
-+            else
-+                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
-+        } else {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("External Hard Drive");
-+            else
-+                description = QObject::tr("Hard Drive");
-+        }
-+
-+        return description;
-+    }
-+
-+    QString vendormodel_str;
-+    QString model = product();
-+    QString vendor_str = vendor();
-+
-+    if (vendor_str.isEmpty())
-+    {
-+        if (!model.isEmpty())
-+            vendormodel_str = model;
-+    }
-+    else
-+    {
-+        if (model.isEmpty())
-+            vendormodel_str = vendor_str;
-+        else
-+        {
-+            if (model.startsWith(vendor_str))
-+            {
-+                // e.g. vendor is "Nokia" and model is "Nokia N950" we do not want "Nokia Nokia N950" as description
-+                vendormodel_str = model;
-+            }
-+            else
-+            {
-+                vendormodel_str = QObject::tr("%1 %2", "%1 is the vendor, %2 is the model of the device").arg(vendor_str).arg(model);
-+            }
-+        }
-+    }
-+
-+    if (vendormodel_str.isEmpty())
-+        description = QObject::tr("Drive");
-+    else
-+        description = vendormodel_str;
-+
-+    return description;
-+}
-+
-+QString Device::volumeDescription() const
-+{
-+    QString description;
-+    const UDisks2::StorageVolume storageVolume(const_cast<Device*>(this));
-+    QString volume_label = prop("IdLabel").toString();
-+    if (volume_label.isEmpty())
-+        volume_label = prop("Name").toString();
-+    if (!volume_label.isEmpty())
-+        return volume_label;
-+
-+    UDisks2::Device storageDevice(drivePath());
-+    const UDisks2::StorageDrive storageDrive(&storageDevice);
-+    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
-+
-+    // Handle media in optical drives
-+    if (drive_type == Solid::StorageDrive::CdromDrive)
-+    {
-+        const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
-+        switch (disc.discType())
-+        {
-+            case Solid::OpticalDisc::UnknownDiscType:
-+            case Solid::OpticalDisc::CdRom:
-+                description = QObject::tr("CD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::CdRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank CD-R");
-+                else
-+                    description = QObject::tr("CD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::CdRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank CD-RW");
-+                else
-+                    description = QObject::tr("CD-RW");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRom:
-+                description = QObject::tr("DVD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRam:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD-RAM");
-+                else
-+                    description = QObject::tr("DVD-RAM");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD-R");
-+                else
-+                    description = QObject::tr("DVD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRecordableDuallayer:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+R Dual-Layer");
-+                else
-+                    description = QObject::tr("DVD+R Dual-Layer");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD-RW");
-+                else
-+                    description = QObject::tr("DVD-RW");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+R");
-+                else
-+                    description = QObject::tr("DVD+R");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+RW");
-+                else
-+                    description = QObject::tr("DVD+RW");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRewritableDuallayer:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+RW Dual-Layer");
-+                else
-+                    description = QObject::tr("DVD+RW Dual-Layer");
-+                break;
-+
-+            case Solid::OpticalDisc::BluRayRom:
-+                description = QObject::tr("BD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::BluRayRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank BD-R");
-+                else
-+                    description = QObject::tr("BD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::BluRayRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank BD-RE");
-+                else
-+                    description = QObject::tr("BD-RE");
-+                break;
-+
-+            case Solid::OpticalDisc::HdDvdRom:
-+                description = QObject::tr("HD DVD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::HdDvdRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank HD DVD-R");
-+                else
-+                    description = QObject::tr("HD DVD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::HdDvdRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank HD DVD-RW");
-+                else
-+                    description = QObject::tr("HD DVD-RW");
-+                break;
-+            }
-+
-+        // Special case for pure audio disc
-+        if (disc.availableContent() == Solid::OpticalDisc::Audio)
-+            description = QObject::tr("Audio CD");
-+
-+        return description;
-+    }
-+
-+    const bool drive_is_removable = storageDrive.isRemovable();
-+    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
-+
-+    QString size_str = formatByteSize(storageVolume.size());
-+    if (isEncryptedContainer())
-+    {
-+        if (!size_str.isEmpty())
-+            description = QObject::tr("%1 Encrypted Container", "%1 is the size").arg(size_str);
-+        else
-+            description = QObject::tr("Encrypted Container");
-+    }
-+    else if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
-+    {
-+        if (!size_str.isEmpty())
-+        {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
-+            else
-+                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
-+        }
-+        else
-+        {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("External Hard Drive");
-+            else
-+                description = QObject::tr("Hard Drive");
-+        }
-+    }
-+    else
-+    {
-+        if (drive_is_removable)
-+            description = QObject::tr("%1 Removable Media", "%1 is the size").arg(size_str);
-+        else
-+            description = QObject::tr("%1 Media", "%1 is the size").arg(size_str);
-+    }
-+
-+    return description;
-+}
-+
-+QString Device::icon() const
-+{
-+    QString iconName = prop( "HintIconName" ).toString();
-+
-+    if ( !iconName.isEmpty() )
-+    {
-+        return iconName;
-+    }
-+    else if (isDrive()) {
-+        const bool isRemovable = prop("Removable").toBool();
-+        const QString conn = prop("ConnectionBus").toString();
-+
-+        if (isOpticalDrive())
-+            return "drive-optical";
-+        else if (isRemovable && !isOpticalDisc()) {
-+            if (conn == "usb")
-+                return "drive-removable-media-usb";
-+            else
-+                return "drive-removable-media";
-+        }
-+    }
-+    else if (isBlock()) {
-+        Device drive(drivePath());
-+
-+        // handle media
-+        const QString media = drive.prop("Media").toString();
-+
-+        if ( !media.isEmpty() )
-+        {
-+            if ( isOpticalDisc() )    // optical stuff
-+            {
-+                bool isWritable = drive.prop("OpticalBlank").toBool();
-+
-+                const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
-+                Solid::OpticalDisc::ContentTypes availContent = disc.availableContent();
-+
-+                if (availContent & Solid::OpticalDisc::VideoDvd) // Video DVD
-+                    return "media-optical-dvd-video";
-+                else if ((availContent & Solid::OpticalDisc::VideoCd) || (availContent & Solid::OpticalDisc::SuperVideoCd)) // Video CD
-+                    return "media-optical-video";
-+                else if ((availContent & Solid::OpticalDisc::Data) && (availContent & Solid::OpticalDisc::Audio)) // Mixed CD
-+                    return "media-optical-mixed-cd";
-+                else if (availContent & Solid::OpticalDisc::Audio) // Audio CD
-+                    return "media-optical-audio";
-+                else if (availContent & Solid::OpticalDisc::Data) // Data CD
-+                    return "media-optical-data";
-+                else if ( isWritable )
-+                    return "media-optical-recordable";
-+                else
-+                {
-+                    if ( media.startsWith( "optical_dvd" ) || media.startsWith( "optical_hddvd" ) ) // DVD
-+                        return "media-optical-dvd";
-+                    else if ( media.startsWith( "optical_bd" ) ) // BluRay
-+                        return "media-optical-blu-ray";
-+                }
-+
-+                // fallback for every other optical disc
-+                return "media-optical";
-+            }
-+
-+            if ( media == "flash_ms" ) // Flash & Co.
-+                return "media-flash-memory-stick";
-+            else if ( media == "flash_sd" || media == "flash_sdhc" || media == "flash_sdxc" || media == "flash_mmc" )
-+                return "media-flash-sd-mmc";
-+            else if ( media == "flash_sm" )
-+                return "media-flash-smart-media";
-+            else if ( media == "thumb" )
-+                return "drive-removable-media-usb-pendrive";
-+            else if ( media.startsWith( "flash" ) )
-+                return "media-flash";
-+            else if ( media == "floppy" ) // the good ol' floppy
-+                return "media-floppy";
-+        }
-+
-+        if (drive.prop("ConnectionBus").toString() == "sdio")  // hack for SD cards connected thru sdio bus
-+            return "media-flash-sd-mmc";
-+
-+        return drive.icon();
-+    }
-+
-+    return "drive-harddisk";    // general fallback
-+}
-+
-+QString Device::product() const
-+{
-+    QString product = prop("Model").toString();
-+
-+    if (!isDrive()) {
-+        QString label = prop("IdLabel").toString();
-+        if (!label.isEmpty()) {
-+            product = label;
-+        }
-+    }
-+
-+    return product;
-+}
-+
-+QString Device::vendor() const
-+{
-+    return prop("Vendor").toString();
-+}
-+
-+QString Device::udi() const
-+{
-+    return m_udi;
-+}
-+
-+QString Device::parentUdi() const
-+{
-+    QString parent;
-+
-+    if (isEncryptedContainer())
-+        parent = prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
-+    else if (propertyExists("Drive"))  // block
-+        parent = prop("Drive").value<QDBusObjectPath>().path();
-+    else if (propertyExists("Table"))  // partition
-+        parent = prop("Table").value<QDBusObjectPath>().path();
-+    else if (parent.isEmpty() || parent=="/") {
-+        parent = UD2_UDI_DISKS_PREFIX;
-+    }
-+    return parent;
-+}
-+
-+void Device::checkCache(const QString &key) const
-+{
-+    if (m_cache.isEmpty()) // recreate the cache
-+        allProperties();
-+
-+    if (m_cache.contains(key))
-+        return;
-+
-+    QVariant reply = m_device->property(key.toUtf8());
-+
-+    if (reply.isValid()) {
-+        m_cache.insert(key, reply);
-+    } else {
-+        //qDebug() << "got invalid reply for cache:" << key;
-+        //m_cache.insert(key, QVariant());
-+    }
-+}
-+
-+QString Device::introspect() const
-+{
-+    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
-+                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
-+    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
-+    reply.waitForFinished();
-+
-+    if (reply.isValid())
-+        return reply.value();
-+    else {
-+        return QString();
-+    }
-+}
-+
-+QVariant Device::prop(const QString &key) const
-+{
-+    checkCache(key);
-+    return m_cache.value(key);
-+}
-+
-+bool Device::propertyExists(const QString &key) const
-+{
-+    checkCache(key);
-+    return m_cache.contains(key);
-+}
-+
-+QVariantMap Device::allProperties() const
-+{
-+    Q_FOREACH (const QString & iface, m_interfaces) {
-+        if (iface.startsWith("org.freedesktop.DBus"))
-+            continue;
-+        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
-+        call << iface;
-+        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
-+        reply.waitForFinished();
-+
-+        if (reply.isValid())
-+            m_cache.unite(reply.value());
-+        else
-+            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
-+        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
-+    }
-+
-+    return m_cache;
-+}
-+
-+bool Device::hasInterface(const QString &name) const
-+{
-+    return m_interfaces.contains(name);
-+}
-+
-+QStringList Device::interfaces() const
-+{
-+    return m_interfaces;
-+}
-+
-+void Device::initInterfaces()
-+{
-+    m_interfaces.clear();
-+    const QString xmlData = introspect();
-+    QDomDocument dom;
-+    dom.setContent(xmlData);
-+    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
-+    for (int i = 0; i < ifaceNodeList.count(); i++) {
-+        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
-+        if (!ifaceElem.isNull())
-+            m_interfaces.append(ifaceElem.attribute("name"));
-+    }
-+    //qDebug() << "Device" << m_udi << "has interfaces:" << m_interfaces;
-+}
-+
-+void Device::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
-+{
-+    //Q_UNUSED(ifaceName);
-+
-+    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
-+
-+    QMap<QString, int> changeMap;
-+
-+    Q_FOREACH(const QString & key, invalidatedProps) {
-+        m_cache.remove(key);
-+        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
-+        qDebug() << "\t invalidated:" << key;
-+    }
-+
-+    QMapIterator<QString, QVariant> i(changedProps);
-+    while (i.hasNext()) {
-+        i.next();
-+        const QString key = i.key();
-+        m_cache.insert(key, i.value());  // replace the value
-+        changeMap.insert(key, Solid::GenericInterface::PropertyModified);
-+        qDebug() << "\t modified:" << key << ":" << m_cache.value(key);
-+    }
-+
-+    Q_EMIT propertyChanged(changeMap);
-+    Q_EMIT changed();
-+}
-+
-+void Device::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
-+{
-+    if (object_path.path() == m_udi) {
-+        m_interfaces.append(interfaces_and_properties.keys());
-+    }
-+}
-+
-+void Device::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
-+{
-+    if (object_path.path() == m_udi) {
-+        Q_FOREACH(const QString & iface, interfaces) {
-+            m_interfaces.removeAll(iface);
-+        }
-+    }
-+}
-+
-+
-+QString Device::errorToString(const QString & error) const
-+{
-+    if (error == UD2_ERROR_UNAUTHORIZED || error == UD2_ERROR_NOT_AUTHORIZED)
-+        return QObject::tr("You are not authorized to perform this operation");
-+    else if (error == UD2_ERROR_BUSY)
-+        return QObject::tr("The device is currently busy");
-+    else if (error == UD2_ERROR_FAILED)
-+        return QObject::tr("The requested operation has failed");
-+    else if (error == UD2_ERROR_CANCELED)
-+        return QObject::tr("The requested operation has been canceled");
-+    else if (error == UD2_ERROR_INVALID_OPTION)
-+        return QObject::tr("An invalid or malformed option has been given");
-+    else if (error == UD2_ERROR_MISSING_DRIVER)
-+        return QObject::tr("The kernel driver for this filesystem type is not available");
-+    else if (error == UD2_ERROR_ALREADY_MOUNTED)
-+        return QObject::tr("The device is already mounted");
-+    else if (error == UD2_ERROR_NOT_MOUNTED)
-+        return QObject::tr("The device is not mounted");
-+    else if (error == UD2_ERROR_MOUNTED_BY_OTHER_USER)
-+        return QObject::tr("The device is mounted by another user");
-+    else if (error == UD2_ERROR_ALREADY_UNMOUNTING)
-+        return QObject::tr("The device is already unmounting");
-+    else if (error == UD2_ERROR_TIMED_OUT)
-+        return QObject::tr("The operation timed out");
-+    else if (error == UD2_ERROR_WOULD_WAKEUP)
-+        return QObject::tr("The operation would wake up a disk that is in a deep-sleep state");
-+    else if (error == UD2_ERROR_ALREADY_CANCELLED)
-+        return QObject::tr("The operation has already been canceled");
-+    else
-+        return QObject::tr("An unspecified error has occurred");
-+}
-+
-+Solid::ErrorType Device::errorToSolidError(const QString & error) const
-+{
-+    if (error == UD2_ERROR_BUSY)
-+        return Solid::DeviceBusy;
-+    else if (error == UD2_ERROR_FAILED)
-+        return Solid::OperationFailed;
-+    else if (error == UD2_ERROR_CANCELED)
-+        return Solid::UserCanceled;
-+    else if (error == UD2_ERROR_INVALID_OPTION)
-+        return Solid::InvalidOption;
-+    else if (error == UD2_ERROR_MISSING_DRIVER)
-+        return Solid::MissingDriver;
-+    else
-+        return Solid::UnauthorizedOperation;
-+}
-+
-+bool Device::isBlock() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_BLOCK);
-+}
-+
-+bool Device::isPartition() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_PARTITION);
-+}
-+
-+bool Device::isPartitionTable() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_PARTITIONTABLE);
-+}
-+
-+bool Device::isStorageVolume() const
-+{
-+    return isPartition() || isPartitionTable() || isStorageAccess() || isOpticalDisc();
-+}
-+
-+bool Device::isStorageAccess() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM) || isEncryptedContainer();
-+}
-+
-+bool Device::isDrive() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_DRIVE);
-+}
-+
-+bool Device::isOpticalDrive() const
-+{
-+    return isDrive() && !prop("MediaCompatibility").toStringList().filter("optical_").isEmpty();
-+}
-+
-+bool Device::isOpticalDisc() const
-+{
-+    const QString drv = drivePath();
-+    if (drv.isEmpty() || drv == "/")
-+        return false;
-+
-+    Device drive(drv);
-+    return drive.prop("Optical").toBool();
-+}
-+
-+bool Device::mightBeOpticalDisc() const
-+{
-+    const QString drv = drivePath();
-+    if (drv.isEmpty() || drv == "/")
-+        return false;
-+
-+    Device drive(drv);
-+    return drive.isOpticalDrive();
-+}
-+
-+bool Device::isMounted() const
-+{
-+    return propertyExists("MountPoints") && !qdbus_cast<QByteArrayList>(prop("MountPoints")).isEmpty();
-+}
-+
-+bool Device::isEncryptedContainer() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_ENCRYPTED);
-+}
-+
-+bool Device::isEncryptedCleartext() const
-+{
-+    const QString holderDevice = prop("CryptoBackingDevice").toString();
-+    if (holderDevice.isEmpty() || holderDevice == "/")
-+        return false;
-+    else
-+        return true;
-+}
-+
-+bool Device::isSwap() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_SWAP);
-+}
-+
-+QString Device::drivePath() const
-+{
-+    return prop("Drive").value<QDBusObjectPath>().path();
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.h	2012-06-27 21:52:42.087597220 +0200
-@@ -0,0 +1,112 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2DEVICE_H
-+#define UDISKS2DEVICE_H
-+
-+#include "udisks2.h"
-+
-+#include <ifaces/device.h>
-+#include <solid/deviceinterface.h>
-+#include <solid/solidnamespace.h>
-+
-+#include <QtDBus/QDBusInterface>
-+#include <QtDBus/QDBusObjectPath>
-+#include <QtCore/QStringList>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class Device: public Solid::Ifaces::Device
-+{
-+    Q_OBJECT
-+public:
-+    Device(const QString &udi);
-+    virtual ~Device();
-+
-+    virtual QObject* createDeviceInterface(const Solid::DeviceInterface::Type& type);
-+    virtual bool queryDeviceInterface(const Solid::DeviceInterface::Type& type) const;
-+    virtual QString description() const;
-+    virtual QStringList emblems() const;
-+    virtual QString icon() const;
-+    virtual QString product() const;
-+    virtual QString vendor() const;
-+    virtual QString udi() const;
-+    virtual QString parentUdi() const;
-+
-+    QVariant prop(const QString &key) const;
-+    bool propertyExists(const QString &key) const;
-+    QVariantMap allProperties() const;
-+
-+    bool hasInterface(const QString & name) const;
-+    QStringList interfaces() const;
-+
-+    QString errorToString(const QString & error) const;
-+    Solid::ErrorType errorToSolidError(const QString & error) const;
-+
-+    bool isBlock() const;
-+    bool isPartition() const;
-+    bool isPartitionTable() const;
-+    bool isStorageVolume() const;
-+    bool isStorageAccess() const;
-+    bool isDrive() const;
-+    bool isOpticalDrive() const;
-+    bool isOpticalDisc() const;
-+    bool mightBeOpticalDisc() const;
-+    bool isMounted() const;
-+    bool isEncryptedContainer() const;
-+    bool isEncryptedCleartext() const;
-+    bool isSwap() const;
-+
-+    QString drivePath() const;
-+
-+Q_SIGNALS:
-+    void changed();
-+    void propertyChanged(const QMap<QString,int> &changes);
-+
-+private Q_SLOTS:
-+    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
-+    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+
-+private:
-+    QString storageDescription() const;
-+    QString volumeDescription() const;
-+    mutable QDBusInterface *m_device;
-+    QString m_udi;
-+    mutable QVariantMap m_cache;
-+
-+    void initInterfaces();
-+    QStringList m_interfaces;
-+
-+    void checkCache(const QString &key) const;
-+    QString introspect() const;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2DEVICE_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.cpp	2012-06-27 21:52:42.088597220 +0200
-@@ -0,0 +1,33 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksdeviceinterface.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+DeviceInterface::DeviceInterface(Device *device)
-+    : QObject(device), m_device(device)
-+{
-+
-+}
-+
-+DeviceInterface::~DeviceInterface()
-+{
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.h	2012-06-27 21:52:42.088597220 +0200
-@@ -0,0 +1,148 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2DEVICEINTERFACE_H
-+#define UDISKS2DEVICEINTERFACE_H
-+
-+#include <ifaces/deviceinterface.h>
-+#include "udisksdevice.h"
-+
-+#include <QtCore/QObject>
-+#include <QtCore/QStringList>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class DeviceInterface : public QObject, virtual public Solid::Ifaces::DeviceInterface
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::DeviceInterface)
-+public:
-+    DeviceInterface(Device *device);
-+    virtual ~DeviceInterface();
-+
-+protected:
-+    Device *m_device;
-+
-+public:
-+    inline static QStringList toStringList(Solid::DeviceInterface::Type type)
-+    {
-+        QStringList list;
-+
-+        switch(type)
-+        {
-+        case Solid::DeviceInterface::GenericInterface:
-+            list << "generic";
-+            break;
-+        case Solid::DeviceInterface::Processor:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Block:
-+            list << "block";
-+            break;
-+        case Solid::DeviceInterface::StorageAccess:
-+            list << "volume";
-+            break;
-+        case Solid::DeviceInterface::StorageDrive:
-+            list << "storage";
-+            break;
-+        case Solid::DeviceInterface::OpticalDrive:
-+            list << "storage.cdrom";
-+            break;
-+        case Solid::DeviceInterface::StorageVolume:
-+            list << "volume";
-+            break;
-+        case Solid::DeviceInterface::OpticalDisc:
-+            list << "volume.disc";
-+            break;
-+        case Solid::DeviceInterface::Camera:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::PortableMediaPlayer:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::NetworkInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::AcAdapter:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Battery:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Button:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::AudioInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::DvbInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Video:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::SerialInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::InternetGateway:
-+            break;
-+        case Solid::DeviceInterface::SmartCardReader:
-+            // Doesn't exist with UDisks
-+        case Solid::DeviceInterface::NetworkShare:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Unknown:
-+            break;
-+        case Solid::DeviceInterface::Last:
-+            break;
-+        }
-+
-+        return list;
-+    }
-+
-+    inline static Solid::DeviceInterface::Type fromString(const QString &capability)
-+    {
-+        if (capability == "generic")
-+            return Solid::DeviceInterface::GenericInterface;
-+        else if (capability == "block")
-+            return Solid::DeviceInterface::Block;
-+        else if (capability == "storage")
-+            return Solid::DeviceInterface::StorageDrive;
-+        else if (capability == "storage.cdrom")
-+            return Solid::DeviceInterface::OpticalDrive;
-+        else if (capability == "volume")
-+            return Solid::DeviceInterface::StorageVolume;
-+        else if (capability == "volume.disc")
-+            return Solid::DeviceInterface::OpticalDisc;
-+        else
-+            return Solid::DeviceInterface::Unknown;
-+    }
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2DEVICEINTERFACE_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.cpp	2012-06-27 21:52:42.088597220 +0200
-@@ -0,0 +1,53 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksgenericinterface.h"
-+
-+#include "udisksdevice.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+GenericInterface::GenericInterface(Device *device)
-+    : DeviceInterface(device)
-+{
-+    connect(device, SIGNAL(propertyChanged(QMap<QString,int>)),
-+            this, SIGNAL(propertyChanged(QMap<QString,int>)));
-+}
-+
-+GenericInterface::~GenericInterface()
-+{
-+}
-+
-+QVariant GenericInterface::property(const QString &key) const
-+{
-+    return m_device->prop(key);
-+}
-+
-+QVariantMap GenericInterface::allProperties() const
-+{
-+    return m_device->allProperties();
-+}
-+
-+bool GenericInterface::propertyExists(const QString &key) const
-+{
-+    return m_device->propertyExists(key);
-+}
-+
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.h	2012-06-27 21:52:42.089597220 +0200
-@@ -0,0 +1,57 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
-+#define SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
-+
-+#include <solid/ifaces/genericinterface.h>
-+#include <solid/genericinterface.h>
-+#include "udisksdeviceinterface.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+class Device;
-+
-+class GenericInterface : public DeviceInterface, virtual public Solid::Ifaces::GenericInterface
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::GenericInterface)
-+
-+public:
-+    GenericInterface(Device *device);
-+    virtual ~GenericInterface();
-+
-+    virtual QVariant property(const QString &key) const;
-+    virtual QVariantMap allProperties() const;
-+    virtual bool propertyExists(const QString &key) const;
-+
-+Q_SIGNALS:
-+    void propertyChanged(const QMap<QString, int> &changes);
-+    void conditionRaised(const QString &condition, const QString &reason);
-+};
-+}
-+}
-+}
-+
-+#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.cpp	2012-06-27 21:52:42.089597220 +0200
-@@ -0,0 +1,227 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksmanager.h"
-+
-+#include <QtCore/QDebug>
-+#include <QtDBus>
-+
-+#include "../shared/rootdevice.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+using namespace Solid::Backends::Shared;
-+
-+Manager::Manager(QObject *parent)
-+    : Solid::Ifaces::DeviceManager(parent),
-+      m_manager(UD2_DBUS_SERVICE,
-+                UD2_DBUS_PATH,
-+                QDBusConnection::systemBus())
-+{
-+    m_supportedInterfaces
-+            << Solid::DeviceInterface::GenericInterface
-+            << Solid::DeviceInterface::Block
-+            << Solid::DeviceInterface::StorageAccess
-+            << Solid::DeviceInterface::StorageDrive
-+            << Solid::DeviceInterface::OpticalDrive
-+            << Solid::DeviceInterface::OpticalDisc
-+            << Solid::DeviceInterface::StorageVolume;
-+
-+    qDBusRegisterMetaType<QList<QDBusObjectPath> >();
-+    qDBusRegisterMetaType<QVariantMap>();
-+    qDBusRegisterMetaType<QVariantMapMap>();
-+    qDBusRegisterMetaType<QByteArrayList>();
-+    qDBusRegisterMetaType<DBUSManagerStruct>();
-+
-+    bool serviceFound = m_manager.isValid();
-+    if (!serviceFound) {
-+        // find out whether it will be activated automatically
-+        QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus",
-+                                                              "/org/freedesktop/DBus",
-+                                                              "org.freedesktop.DBus",
-+                                                              "ListActivatableNames");
-+
-+        QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
-+        if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
-+            QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
-+            serviceFound = true;
-+        }
-+    }
-+
-+    if (serviceFound) {
-+        connect(&m_manager, SIGNAL(InterfacesAdded(QDBusObjectPath, QVariantMapMap)),
-+                this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
-+        connect(&m_manager, SIGNAL(InterfacesRemoved(QDBusObjectPath,QStringList)),
-+                this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
-+    }
-+}
-+
-+Manager::~Manager()
-+{
-+}
-+
-+QObject* Manager::createDevice(const QString& udi)
-+{
-+    if (udi==udiPrefix()) {
-+        RootDevice *root = new RootDevice(udi);
-+
-+        root->setProduct(tr("Storage"));
-+        root->setDescription(tr("Storage devices"));
-+        root->setIcon("server-database"); // Obviously wasn't meant for that, but maps nicely in oxygen icon set :-p
-+
-+        return root;
-+    } else if (deviceCache().contains(udi)) {
-+        return new Device(udi);
-+    } else {
-+        return 0;
-+    }
-+}
-+
-+QStringList Manager::devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type)
-+{
-+    QStringList result;
-+
-+    if (!parentUdi.isEmpty())
-+    {
-+        Q_FOREACH (const QString &udi, deviceCache())
-+        {
-+            Device device(udi);
-+            if (device.queryDeviceInterface(type) && device.parentUdi() == parentUdi)
-+                result << udi;
-+        }
-+
-+        return result;
-+    }
-+    else if (type != Solid::DeviceInterface::Unknown)
-+    {
-+        Q_FOREACH (const QString &udi, deviceCache())
-+        {
-+            Device device(udi);
-+            if (device.queryDeviceInterface(type))
-+                result << udi;
-+        }
-+
-+        return result;
-+    }
-+
-+    return deviceCache();
-+}
-+
-+QStringList Manager::allDevices()
-+{
-+    m_deviceCache.clear();
-+
-+    QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
-+    reply.waitForFinished();
-+    if (!reply.isError()) {  // enum devices
-+        m_deviceCache << udiPrefix();
-+
-+        Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
-+            const QString udi = path.path();
-+            //qDebug() << "Adding device" << udi;
-+
-+            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
-+                continue;
-+
-+            Device device(udi);
-+            if (device.mightBeOpticalDisc()) {
-+                QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                                     SLOT(slotMediaChanged(QDBusMessage)));
-+                if (!device.isOpticalDisc())  // skip empty CD disc
-+                    continue;
-+            }
-+
-+            m_deviceCache.append(udi);
-+        }
-+    }
-+    else  // show error
-+    {
-+        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
-+    }
-+
-+    return m_deviceCache;
-+}
-+
-+
-+QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
-+{
-+    return m_supportedInterfaces;
-+}
-+
-+QString Manager::udiPrefix() const
-+{
-+    return UD2_UDI_DISKS_PREFIX;
-+}
-+
-+void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
-+{
-+    const QString udi = object_path.path();
-+
-+    qDebug() << udi << "has new interfaces:" << interfaces_and_properties.keys();
-+
-+    // new device, we don't know it yet
-+    if (!m_deviceCache.contains(udi)) {
-+        m_deviceCache.append(udi);
-+        Q_EMIT deviceAdded(udi);
-+    }
-+}
-+
-+void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
-+{
-+    const QString udi = object_path.path();
-+
-+    qDebug() << udi << "lost interfaces:" << interfaces;
-+
-+    Device device(udi);
-+
-+    if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty() || device.interfaces().contains(UD2_DBUS_INTERFACE_FILESYSTEM))) {
-+        Q_EMIT deviceRemoved(udi);
-+        m_deviceCache.removeAll(udi);
-+    }
-+}
-+
-+void Manager::slotMediaChanged(const QDBusMessage & msg)
-+{
-+    const QVariantMap properties = qdbus_cast<QVariantMap>(msg.arguments().at(1));
-+
-+    if (!properties.contains("Size"))  // react only on Size changes
-+        return;
-+
-+    const QString udi = msg.path();
-+    qulonglong size = properties.value("Size").toULongLong();
-+    qDebug() << "MEDIA CHANGED in" << udi << "; size is:" << size;
-+
-+    if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the optdisc, got inserted
-+        m_deviceCache.append(udi);
-+        Q_EMIT deviceAdded(udi);
-+    }
-+
-+    if (m_deviceCache.contains(udi) && size == 0) {  // we know the optdisc, got removed
-+        Q_EMIT deviceRemoved(udi);
-+        m_deviceCache.removeAll(udi);
-+    }
-+}
-+
-+const QStringList & Manager::deviceCache()
-+{
-+    if (m_deviceCache.isEmpty())
-+        allDevices();
-+
-+    return m_deviceCache;
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.h	2012-06-27 21:52:42.091597220 +0200
-@@ -0,0 +1,69 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2MANAGER_H
-+#define UDISKS2MANAGER_H
-+
-+#include "udisks2.h"
-+#include "udisksdevice.h"
-+#include "dbus/manager.h"
-+
-+#include "solid/ifaces/devicemanager.h"
-+
-+#include <QtDBus/QDBusInterface>
-+#include <QtCore/QSet>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class Manager: public Solid::Ifaces::DeviceManager
-+{
-+    Q_OBJECT
-+
-+public:
-+    Manager(QObject *parent);
-+    virtual QObject* createDevice(const QString& udi);
-+    virtual QStringList devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type);
-+    virtual QStringList allDevices();
-+    virtual QSet< Solid::DeviceInterface::Type > supportedInterfaces() const;
-+    virtual QString udiPrefix() const;
-+    virtual ~Manager();
-+
-+private Q_SLOTS:
-+    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+    void slotMediaChanged(const QDBusMessage &msg);
-+
-+private:
-+    const QStringList &deviceCache();
-+    QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
-+    org::freedesktop::DBus::ObjectManager m_manager;
-+    QStringList m_deviceCache;
-+};
-+
-+}
-+}
-+}
-+#endif // UDISKS2MANAGER_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.cpp	2012-06-27 21:52:42.092597220 +0200
-@@ -0,0 +1,277 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <sys/types.h>
-+#include <unistd.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+
-+#include <QtCore/QFile>
-+#include <QtDBus/QDBusConnection>
-+
-+#include "../shared/udevqtclient.h"
-+
-+#include "udisks2.h"
-+#include "udisksopticaldisc.h"
-+
-+// inspired by http://cgit.freedesktop.org/hal/tree/hald/linux/probing/probe-volume.c
-+static Solid::OpticalDisc::ContentType advancedDiscDetect(const QByteArray & device_file)
-+{
-+    /* the discs block size */
-+    unsigned short bs;
-+    /* the path table size */
-+    unsigned short ts;
-+    /* the path table location (in blocks) */
-+    unsigned int tl;
-+    /* length of the directory name in current path table entry */
-+    unsigned char len_di = 0;
-+    /* the number of the parent directory's path table entry */
-+    unsigned int parent = 0;
-+    /* filename for the current path table entry */
-+    char dirname[256];
-+    /* our position into the path table */
-+    int pos = 0;
-+    /* the path table record we're on */
-+    int curr_record = 1;
-+
-+    Solid::OpticalDisc::ContentType result = Solid::OpticalDisc::NoContent;
-+
-+    int fd = open(device_file.constData(), O_RDONLY);
-+
-+    /* read the block size */
-+    lseek (fd, 0x8080, SEEK_CUR);
-+    if (read (fd, &bs, 2) != 2)
-+    {
-+        qDebug("Advanced probing on %s failed while reading block size", qPrintable(device_file));
-+        goto out;
-+    }
-+
-+    /* read in size of path table */
-+    lseek (fd, 2, SEEK_CUR);
-+    if (read (fd, &ts, 2) != 2)
-+    {
-+        qDebug("Advanced probing on %s failed while reading path table size", qPrintable(device_file));
-+        goto out;
-+    }
-+
-+    /* read in which block path table is in */
-+    lseek (fd, 6, SEEK_CUR);
-+    if (read (fd, &tl, 4) != 4)
-+    {
-+        qDebug("Advanced probing on %s failed while reading path table block", qPrintable(device_file));
-+        goto out;
-+    }
-+
-+    /* seek to the path table */
-+    lseek (fd, bs * tl, SEEK_SET);
-+
-+    /* loop through the path table entries */
-+    while (pos < ts)
-+    {
-+        /* get the length of the filename of the current entry */
-+        if (read (fd, &len_di, 1) != 1)
-+        {
-+            qDebug("Advanced probing on %s failed, cannot read more entries", qPrintable(device_file));
-+            break;
-+        }
-+
-+        /* get the record number of this entry's parent
-+           i'm pretty sure that the 1st entry is always the top directory */
-+        lseek (fd, 5, SEEK_CUR);
-+        if (read (fd, &parent, 2) != 2)
-+        {
-+            qDebug("Advanced probing on %s failed, couldn't read parent entry", qPrintable(device_file));
-+            break;
-+        }
-+
-+        /* read the name */
-+        if (read (fd, dirname, len_di) != len_di)
-+        {
-+            qDebug("Advanced probing on %s failed, couldn't read the entry name", qPrintable(device_file));
-+            break;
-+        }
-+        dirname[len_di] = 0;
-+
-+        /* if we found a folder that has the root as a parent, and the directory name matches
-+           one of the special directories then set the properties accordingly */
-+        if (parent == 1)
-+        {
-+            if (!strcasecmp (dirname, "VIDEO_TS"))
-+            {
-+                qDebug("Disc in %s is a Video DVD", qPrintable(device_file));
-+                result = Solid::OpticalDisc::VideoDvd;
-+                break;
-+            }
-+            else if (!strcasecmp (dirname, "BDMV"))
-+            {
-+                qDebug("Disc in %s is a Blu-ray video disc", qPrintable(device_file));
-+                result = Solid::OpticalDisc::VideoBluRay;
-+                break;
-+            }
-+            else if (!strcasecmp (dirname, "VCD"))
-+            {
-+                qDebug("Disc in %s is a Video CD", qPrintable(device_file));
-+                result = Solid::OpticalDisc::VideoCd;
-+                break;
-+            }
-+            else if (!strcasecmp (dirname, "SVCD"))
-+            {
-+                qDebug("Disc in %s is a Super Video CD", qPrintable(device_file));
-+                result = Solid::OpticalDisc::SuperVideoCd;
-+                break;
-+            }
-+        }
-+
-+        /* all path table entries are padded to be even,
-+           so if this is an odd-length table, seek a byte to fix it */
-+        if (len_di%2 == 1)
-+        {
-+            lseek (fd, 1, SEEK_CUR);
-+            pos++;
-+        }
-+
-+        /* update our position */
-+        pos += 8 + len_di;
-+        curr_record++;
-+    }
-+
-+    close(fd);
-+    return result;
-+
-+out:
-+    /* go back to the start of the file */
-+    lseek (fd, 0, SEEK_SET);
-+    close(fd);
-+    return result;
-+}
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+OpticalDisc::OpticalDisc(Device *dev)
-+    : StorageVolume(dev), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
-+{
-+    UdevQt::Client client(this);
-+    m_udevDevice = client.deviceByDeviceFile(device());
-+    //qDebug() << "udev device:" << m_udevDevice.name() << "valid:" << m_udevDevice.isValid();
-+    /*qDebug() << "\tProperties:" << */ m_udevDevice.deviceProperties(); // initialize the properties DB so that it doesn't crash further down, #298416
-+
-+    m_drive = new Device(m_device->prop("Drive").value<QDBusObjectPath>().path());
-+    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_drive->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                         SLOT(slotDrivePropertiesChanged(QString,QVariantMap,QStringList)));
-+}
-+
-+OpticalDisc::~OpticalDisc()
-+{
-+    delete m_drive;
-+}
-+
-+qulonglong OpticalDisc::capacity() const
-+{
-+    return m_device->prop("Size").toULongLong();
-+}
-+
-+bool OpticalDisc::isRewritable() const
-+{
-+    // the hard way, udisks has no notion of a disc "rewritability"
-+    const QString mediaType = media();
-+    return mediaType == "optical_cd_rw" || mediaType == "optical_dvd_rw" || mediaType == "optical_dvd_ram" ||
-+            mediaType == "optical_dvd_plus_rw" || mediaType == "optical_dvd_plus_rw_dl" ||
-+            mediaType == "optical_bd_re" || mediaType == "optical_hddvd_rw";
-+}
-+
-+bool OpticalDisc::isBlank() const
-+{
-+    return m_drive->prop("OpticalBlank").toBool();
-+}
-+
-+bool OpticalDisc::isAppendable() const
-+{
-+    //qDebug() << "appendable prop" << m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE");
-+    return m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE").toString() == QLatin1String("appendable");
-+}
-+
-+Solid::OpticalDisc::DiscType OpticalDisc::discType() const
-+{
-+    QMap<Solid::OpticalDisc::DiscType, QString> map;
-+    map[Solid::OpticalDisc::CdRom] = "optical_cd";
-+    map[Solid::OpticalDisc::CdRecordable] = "optical_cd_r";
-+    map[Solid::OpticalDisc::CdRewritable] = "optical_cd_rw";
-+    map[Solid::OpticalDisc::DvdRom] = "optical_dvd";
-+    map[Solid::OpticalDisc::DvdRecordable] = "optical_dvd_r";
-+    map[Solid::OpticalDisc::DvdRewritable] ="optical_dvd_rw";
-+    map[Solid::OpticalDisc::DvdRam] ="optical_dvd_ram";
-+    map[Solid::OpticalDisc::DvdPlusRecordable] ="optical_dvd_plus_r";
-+    map[Solid::OpticalDisc::DvdPlusRewritable] ="optical_dvd_plus_rw";
-+    map[Solid::OpticalDisc::DvdPlusRecordableDuallayer] ="optical_dvd_plus_r_dl";
-+    map[Solid::OpticalDisc::DvdPlusRewritableDuallayer] ="optical_dvd_plus_rw_dl";
-+    map[Solid::OpticalDisc::BluRayRom] ="optical_bd";
-+    map[Solid::OpticalDisc::BluRayRecordable] ="optical_bd_r";
-+    map[Solid::OpticalDisc::BluRayRewritable] ="optical_bd_re";
-+    map[Solid::OpticalDisc::HdDvdRom] ="optical_hddvd";
-+    map[Solid::OpticalDisc::HdDvdRecordable] ="optical_hddvd_r";
-+    map[Solid::OpticalDisc::HdDvdRewritable] ="optical_hddvd_rw";
-+    // TODO add these to Solid
-+    //map[Solid::OpticalDisc::MagnetoOptical] ="optical_mo";
-+    //map[Solid::OpticalDisc::MountRainer] ="optical_mrw";
-+    //map[Solid::OpticalDisc::MountRainerWritable] ="optical_mrw_w";
-+
-+    return map.key(media(), Solid::OpticalDisc::UnknownDiscType);  // FIXME optimize, lookup by value, not key
-+}
-+
-+Solid::OpticalDisc::ContentTypes OpticalDisc::availableContent() const
-+{
-+    if (isBlank()) {
-+        m_needsReprobe = false;
-+        return Solid::OpticalDisc::NoContent;
-+    }
-+
-+    if (m_needsReprobe) {
-+        m_cachedContent = Solid::OpticalDisc::NoContent;
-+        const bool hasData = m_drive->prop("OpticalNumDataTracks").toUInt() > 0;
-+        const bool hasAudio = m_drive->prop("OpticalNumAudioTracks").toUInt() > 0;
-+
-+        if ( hasData ) {
-+            m_cachedContent |= Solid::OpticalDisc::Data;
-+            m_cachedContent |= advancedDiscDetect(m_device->prop("Device").toByteArray());
-+        }
-+        if ( hasAudio )
-+            m_cachedContent |= Solid::OpticalDisc::Audio;
-+
-+        m_needsReprobe = false;
-+    }
-+
-+    return m_cachedContent;
-+}
-+
-+void OpticalDisc::slotDrivePropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
-+{
-+    Q_UNUSED(ifaceName);
-+
-+    if (changedProps.keys().contains("Media") || invalidatedProps.contains("Media")) {
-+        m_needsReprobe = true;
-+        m_cachedContent = Solid::OpticalDisc::NoContent;
-+    }
-+}
-+
-+QString OpticalDisc::media() const
-+{
-+    return m_drive->prop("Media").toString();
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-27 21:52:42.092597220 +0200
-@@ -0,0 +1,69 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2OPTICALDISC_H
-+#define UDISKS2OPTICALDISC_H
-+
-+#include <solid/ifaces/opticaldisc.h>
-+
-+#include "../shared/udevqtdevice.h"
-+
-+#include "udisksstoragevolume.h"
-+#include "udisksdevice.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class OpticalDisc: public StorageVolume, virtual public Solid::Ifaces::OpticalDisc
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::OpticalDisc)
-+
-+public:
-+    OpticalDisc(Device *dev);
-+    virtual ~OpticalDisc();
-+
-+    virtual qulonglong capacity() const;
-+    virtual bool isRewritable() const;
-+    virtual bool isBlank() const;
-+    virtual bool isAppendable() const;
-+    virtual Solid::OpticalDisc::DiscType discType() const;
-+    virtual Solid::OpticalDisc::ContentTypes availableContent() const;
-+
-+private Q_SLOTS:
-+    void slotDrivePropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
-+
-+private:
-+    QString media() const;
-+    mutable bool m_needsReprobe;
-+    mutable Solid::OpticalDisc::ContentTypes m_cachedContent;
-+    Device * m_drive;
-+    UdevQt::Device m_udevDevice;
-+};
-+
-+}
-+}
-+}
-+#endif // UDISKS2OPTICALDISC_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.cpp	2012-06-27 21:52:42.093597220 +0200
-@@ -0,0 +1,222 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+
-+#include <QtCore/QFile>
-+#include <QtCore/QDebug>
-+
-+#include "udisksopticaldrive.h"
-+#include "udisks2.h"
-+#include "udisksdevice.h"
-+#include "dbus/manager.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+OpticalDrive::OpticalDrive(Device *device)
-+    : StorageDrive(device), m_ejectInProgress(false), m_readSpeed(0), m_writeSpeed(0), m_speedsInit(false)
-+{
-+    m_device->registerAction("eject", this,
-+                             SLOT(slotEjectRequested()),
-+                             SLOT(slotEjectDone(int, const QString&)));
-+
-+    connect(m_device, SIGNAL(changed()), this, SLOT(slotChanged()));
-+}
-+
-+OpticalDrive::~OpticalDrive()
-+{
-+}
-+
-+bool OpticalDrive::eject()
-+{
-+    if (m_ejectInProgress)
-+        return false;
-+    m_ejectInProgress = true;
-+    m_device->broadcastActionRequested("eject");
-+
-+    const QString path = m_device->udi();
-+    QDBusConnection c = QDBusConnection::systemBus();
-+
-+    // if the device is mounted, unmount first
-+    QString blockPath;
-+    org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, c);
-+    QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
-+    reply.waitForFinished();
-+    if (!reply.isError()) {  // enum devices
-+        Q_FOREACH(const QDBusObjectPath &objPath, reply.value().keys()) {
-+            const QString udi = objPath.path();
-+
-+            //qDebug() << "Inspecting" << udi;
-+
-+            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
-+                continue;
-+
-+            Device device(udi);
-+            if (device.drivePath() == path && device.isMounted()) {
-+                //qDebug() << "Got mounted block device:" << udi;
-+                blockPath = udi;
-+                break;
-+            }
-+        }
-+    }
-+    else  // show error
-+    {
-+        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
-+    }
-+
-+    if (!blockPath.isEmpty()) {
-+        //qDebug() << "Calling unmount on" << blockPath;
-+        QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, blockPath, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
-+        msg << QVariantMap();   // options, unused now
-+        c.call(msg, QDBus::BlockWithGui);
-+    }
-+
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_DRIVE, "Eject");
-+    msg << QVariantMap();
-+    return c.callWithCallback(msg, this, SLOT(slotDBusReply(const QDBusMessage &)), SLOT(slotDBusError(const QDBusError &)));
-+}
-+
-+void OpticalDrive::slotDBusReply(const QDBusMessage &/*reply*/)
-+{
-+    m_ejectInProgress = false;
-+    m_device->broadcastActionDone("eject");
-+}
-+
-+void OpticalDrive::slotDBusError(const QDBusError &error)
-+{
-+    m_ejectInProgress = false;
-+    m_device->broadcastActionDone("eject", m_device->errorToSolidError(error.name()),
-+                                  m_device->errorToString(error.name()) + ": " +error.message());
-+}
-+
-+void OpticalDrive::slotEjectRequested()
-+{
-+    m_ejectInProgress = true;
-+    Q_EMIT ejectRequested(m_device->udi());
-+}
-+
-+void OpticalDrive::slotEjectDone(int error, const QString &errorString)
-+{
-+    m_ejectInProgress = false;
-+    Q_EMIT ejectDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
-+}
-+
-+void OpticalDrive::initReadWriteSpeeds() const
-+{
-+#if 0
-+    int read_speed, write_speed;
-+    char *write_speeds = 0;
-+    QByteArray device_file = QFile::encodeName(m_device->property("Device").toString());
-+
-+    //qDebug("Doing open (\"%s\", O_RDONLY | O_NONBLOCK)", device_file.constData());
-+    int fd = open(device_file, O_RDONLY | O_NONBLOCK);
-+    if (fd < 0) {
-+        qWarning("Cannot open %s: %s", device_file.constData(), strerror (errno));
-+        return;
-+    }
-+
-+    if (get_read_write_speed(fd, &read_speed, &write_speed, &write_speeds) >= 0) {
-+        m_readSpeed = read_speed;
-+        m_writeSpeed = write_speed;
-+
-+        QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts);
-+        Q_FOREACH (const QString & speed, list)
-+            m_writeSpeeds.append(speed.toInt());
-+
-+        free(write_speeds);
-+
-+        m_speedsInit = true;
-+    }
-+
-+    close(fd);
-+#endif
-+}
-+
-+QList<int> OpticalDrive::writeSpeeds() const
-+{
-+    if (!m_speedsInit)
-+        initReadWriteSpeeds();
-+    //qDebug() << "solid write speeds:" << m_writeSpeeds;
-+    return m_writeSpeeds;
-+}
-+
-+int OpticalDrive::writeSpeed() const
-+{
-+    if (!m_speedsInit)
-+        initReadWriteSpeeds();
-+    return m_writeSpeed;
-+}
-+
-+int OpticalDrive::readSpeed() const
-+{
-+    if (!m_speedsInit)
-+        initReadWriteSpeeds();
-+    return m_readSpeed;
-+}
-+
-+Solid::OpticalDrive::MediumTypes OpticalDrive::supportedMedia() const
-+{
-+    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
-+    Solid::OpticalDrive::MediumTypes supported;
-+
-+    QMap<Solid::OpticalDrive::MediumType, QString> map;
-+    map[Solid::OpticalDrive::Cdr] = "optical_cd_r";
-+    map[Solid::OpticalDrive::Cdrw] = "optical_cd_rw";
-+    map[Solid::OpticalDrive::Dvd] = "optical_dvd";
-+    map[Solid::OpticalDrive::Dvdr] = "optical_dvd_r";
-+    map[Solid::OpticalDrive::Dvdrw] ="optical_dvd_rw";
-+    map[Solid::OpticalDrive::Dvdram] ="optical_dvd_ram";
-+    map[Solid::OpticalDrive::Dvdplusr] ="optical_dvd_plus_r";
-+    map[Solid::OpticalDrive::Dvdplusrw] ="optical_dvd_plus_rw";
-+    map[Solid::OpticalDrive::Dvdplusdl] ="optical_dvd_plus_r_dl";
-+    map[Solid::OpticalDrive::Dvdplusdlrw] ="optical_dvd_plus_rw_dl";
-+    map[Solid::OpticalDrive::Bd] ="optical_bd";
-+    map[Solid::OpticalDrive::Bdr] ="optical_bd_r";
-+    map[Solid::OpticalDrive::Bdre] ="optical_bd_re";
-+    map[Solid::OpticalDrive::HdDvd] ="optical_hddvd";
-+    map[Solid::OpticalDrive::HdDvdr] ="optical_hddvd_r";
-+    map[Solid::OpticalDrive::HdDvdrw] ="optical_hddvd_rw";
-+    // TODO add these to Solid
-+    //map[Solid::OpticalDrive::Mo] ="optical_mo";
-+    //map[Solid::OpticalDrive::Mr] ="optical_mrw";
-+    //map[Solid::OpticalDrive::Mrw] ="optical_mrw_w";
-+
-+    Q_FOREACH ( const Solid::OpticalDrive::MediumType & type, map.keys() )
-+    {
-+        if ( mediaTypes.contains( map[type] ) )
-+        {
-+            supported |= type;
-+        }
-+    }
-+
-+    return supported;
-+}
-+
-+void OpticalDrive::slotChanged()
-+{
-+    m_speedsInit = false; // reset the read/write speeds, changes eg. with an inserted media
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.h	2012-06-27 21:52:42.093597220 +0200
-@@ -0,0 +1,81 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2OPTICALDRIVE_H
-+#define UDISKS2OPTICALDRIVE_H
-+
-+#include <solid/ifaces/opticaldrive.h>
-+#include "udisksstoragedrive.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class OpticalDrive: public StorageDrive, virtual public Solid::Ifaces::OpticalDrive
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::OpticalDrive)
-+
-+public:
-+    OpticalDrive(Device *device);
-+    virtual ~OpticalDrive();
-+
-+Q_SIGNALS:
-+    void ejectPressed(const QString &udi);
-+    void ejectDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
-+    void ejectRequested(const QString &udi);
-+
-+public:
-+    virtual bool eject();
-+    virtual QList<int> writeSpeeds() const;
-+    virtual int writeSpeed() const;
-+    virtual int readSpeed() const;
-+    virtual Solid::OpticalDrive::MediumTypes supportedMedia() const;
-+
-+private Q_SLOTS:
-+    void slotDBusReply(const QDBusMessage &reply);
-+    void slotDBusError(const QDBusError &error);
-+
-+    void slotEjectRequested();
-+    void slotEjectDone(int error, const QString &errorString);
-+
-+    void slotChanged();
-+
-+private:
-+    void initReadWriteSpeeds() const;
-+
-+    bool m_ejectInProgress;
-+
-+    // read/write speeds
-+    mutable int m_readSpeed;
-+    mutable int m_writeSpeed;
-+    mutable QList<int> m_writeSpeeds;
-+    mutable bool m_speedsInit;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2OPTICALDRIVE_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.cpp	2012-06-27 21:52:42.093597220 +0200
-@@ -0,0 +1,360 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksstorageaccess.h"
-+#include "udisks2.h"
-+
-+#include <QtCore/QProcess>
-+#include <QtDBus/QtDBus>
-+#include <QtGui/QApplication>
-+#include <QtGui/QWidget>
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+StorageAccess::StorageAccess(Device *device)
-+    : DeviceInterface(device), m_setupInProgress(false), m_teardownInProgress(false), m_passphraseRequested(false)
-+{
-+    connect(device, SIGNAL(changed()), this, SLOT(checkAccessibility()));
-+    updateCache();
-+
-+    // Delay connecting to DBus signals to avoid the related time penalty
-+    // in hot paths such as predicate matching
-+    QTimer::singleShot(0, this, SLOT(connectDBusSignals()));
-+}
-+
-+StorageAccess::~StorageAccess()
-+{
-+}
-+
-+void StorageAccess::connectDBusSignals()
-+{
-+    m_device->registerAction("setup", this,
-+                             SLOT(slotSetupRequested()),
-+                             SLOT(slotSetupDone(int, const QString&)));
-+
-+    m_device->registerAction("teardown", this,
-+                             SLOT(slotTeardownRequested()),
-+                             SLOT(slotTeardownDone(int, const QString&)));
-+}
-+
-+bool StorageAccess::isLuksDevice() const
-+{
-+    return m_device->isEncryptedContainer(); // encrypted device
-+}
-+
-+bool StorageAccess::isAccessible() const
-+{
-+    if (isLuksDevice()) { // check if the cleartext slave is mounted
-+        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
-+            return false;
-+        Device holderDevice(m_clearTextPath);
-+        return holderDevice.isMounted();
-+    }
-+
-+    return m_device->isMounted();
-+}
-+
-+QString StorageAccess::filePath() const
-+{
-+    if (!isAccessible())
-+        return QString();
-+
-+    QByteArrayList mntPoints;
-+
-+    if (isLuksDevice()) {  // encrypted (and unlocked) device
-+        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
-+            return QString();
-+        Device holderDevice(m_clearTextPath);
-+        mntPoints = qdbus_cast<QByteArrayList>(holderDevice.prop("MountPoints"));
-+        if (!mntPoints.isEmpty())
-+            return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
-+        else
-+            return QString();
-+    }
-+
-+    mntPoints = qdbus_cast<QByteArrayList>(m_device->prop("MountPoints"));
-+
-+    if (!mntPoints.isEmpty())
-+        return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
-+    else
-+        return QString();
-+}
-+
-+bool StorageAccess::isIgnored() const
-+{
-+    return m_device->prop("HintIgnore").toBool(); // FIXME tune
-+}
-+
-+bool StorageAccess::setup()
-+{
-+    if ( m_teardownInProgress || m_setupInProgress )
-+        return false;
-+    m_setupInProgress = true;
-+    m_device->broadcastActionRequested("setup");
-+
-+    if (m_device->isEncryptedContainer())
-+        return requestPassphrase();
-+    else
-+        return mount();
-+}
-+
-+bool StorageAccess::teardown()
-+{
-+    if ( m_teardownInProgress || m_setupInProgress )
-+        return false;
-+    m_teardownInProgress = true;
-+    m_device->broadcastActionRequested("teardown");
-+
-+    return unmount();
-+}
-+
-+void StorageAccess::updateCache()
-+{
-+    m_isAccessible = isAccessible();
-+}
-+
-+void StorageAccess::checkAccessibility()
-+{
-+    const bool old_isAccessible = m_isAccessible;
-+    updateCache();
-+
-+    if (old_isAccessible != m_isAccessible) {
-+        Q_EMIT accessibilityChanged(m_isAccessible, isLuksDevice() ? m_clearTextPath : m_device->udi());
-+    }
-+}
-+
-+void StorageAccess::slotDBusReply( const QDBusMessage & reply )
-+{
-+    if (m_setupInProgress)
-+    {
-+        if (isLuksDevice() && !isAccessible()) { // unlocked device, now mount it
-+            if (reply.type() == QDBusMessage::ReplyMessage)  // we've got a response from Unlock
-+                m_clearTextPath = reply.arguments().value(0).value<QDBusObjectPath>().path();
-+            mount();
-+        }
-+        else // Don't broadcast setupDone unless the setup is really done. (Fix kde#271156)
-+        {
-+            m_setupInProgress = false;
-+            m_device->broadcastActionDone("setup");
-+
-+            checkAccessibility();
-+        }
-+    }
-+    else if (m_teardownInProgress)  // FIXME
-+    {
-+        if (isLuksDevice() && !m_clearTextPath.isEmpty() && m_clearTextPath != "/") // unlocked device, lock it
-+        {
-+            callCryptoTeardown();
-+        }
-+        else if (!m_clearTextPath.isEmpty() && m_clearTextPath != "/") {
-+            callCryptoTeardown(true); // Lock crypted parent
-+        }
-+        else
-+        {
-+            // try to "eject" (aka safely remove) from the (parent) drive, e.g. SD card from a reader
-+            QString drivePath = m_device->prop("Drive").value<QDBusObjectPath>().path();
-+            if (!drivePath.isEmpty() || drivePath != "/")
-+            {
-+                Device drive(drivePath);
-+                if (drive.prop("Ejectable").toBool() && !m_device->isOpticalDisc()) // optical drives have their Eject method
-+                {
-+                    QDBusConnection c = QDBusConnection::systemBus();
-+                    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, drivePath, UD2_DBUS_INTERFACE_DRIVE, "Eject");
-+                    msg << QVariantMap();   // options, unused now
-+                    c.call(msg, QDBus::NoBlock);
-+                }
-+            }
-+
-+            m_teardownInProgress = false;
-+            m_device->broadcastActionDone("teardown");
-+
-+            checkAccessibility();
-+        }
-+    }
-+}
-+
-+void StorageAccess::slotDBusError( const QDBusError & error )
-+{
-+    if (m_setupInProgress)
-+    {
-+        m_setupInProgress = false;
-+        m_device->broadcastActionDone("setup", m_device->errorToSolidError(error.name()),
-+                                      m_device->errorToString(error.name()) + ": " +error.message());
-+
-+        checkAccessibility();
-+    }
-+    else if (m_teardownInProgress)
-+    {
-+        m_teardownInProgress = false;
-+        m_clearTextPath.clear();
-+        m_device->broadcastActionDone("teardown", m_device->errorToSolidError(error.name()),
-+                                      m_device->errorToString(error.name()) + ": " + error.message());
-+        checkAccessibility();
-+    }
-+}
-+
-+void StorageAccess::slotSetupRequested()
-+{
-+    m_setupInProgress = true;
-+    //qDebug() << "SETUP REQUESTED:" << m_device->udi();
-+    Q_EMIT setupRequested(m_device->udi());
-+}
-+
-+void StorageAccess::slotSetupDone(int error, const QString &errorString)
-+{
-+    m_setupInProgress = false;
-+    //qDebug() << "SETUP DONE:" << m_device->udi();
-+    Q_EMIT setupDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
-+
-+    checkAccessibility();
-+}
-+
-+void StorageAccess::slotTeardownRequested()
-+{
-+    m_teardownInProgress = true;
-+    Q_EMIT teardownRequested(m_device->udi());
-+}
-+
-+void StorageAccess::slotTeardownDone(int error, const QString &errorString)
-+{
-+    m_teardownInProgress = false;
-+    m_clearTextPath.clear();
-+    Q_EMIT teardownDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
-+
-+    checkAccessibility();
-+}
-+
-+bool StorageAccess::mount()
-+{
-+    QString path = m_device->udi();
-+
-+    if (isLuksDevice()) { // mount options for the cleartext volume
-+        path = m_clearTextPath;
-+    }
-+
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Mount");
-+    QVariantMap options;
-+
-+    if (m_device->prop("IdType").toString() == "vfat")
-+        options.insert("options", "flush");
-+
-+    msg << options;
-+
-+    return c.callWithCallback(msg, this,
-+                              SLOT(slotDBusReply(const QDBusMessage &)),
-+                              SLOT(slotDBusError(const QDBusError &)));
-+}
-+
-+bool StorageAccess::unmount()
-+{
-+    QString path = m_device->udi();
-+
-+    if (isLuksDevice()) { // unmount options for the cleartext volume
-+        path = m_clearTextPath;
-+    }
-+
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
-+
-+    msg << QVariantMap();   // options, unused now
-+
-+    return c.callWithCallback(msg, this,
-+                              SLOT(slotDBusReply(const QDBusMessage &)),
-+                              SLOT(slotDBusError(const QDBusError &)),
-+                              s_unmountTimeout);
-+}
-+
-+QString StorageAccess::generateReturnObjectPath()
-+{
-+    static int number = 1;
-+
-+    return "/org/kde/solid/UDisks2StorageAccess_"+QString::number(number++);
-+}
-+
-+bool StorageAccess::requestPassphrase()
-+{
-+    QString udi = m_device->udi();
-+    QString returnService = QDBusConnection::sessionBus().baseService();
-+    m_lastReturnObject = generateReturnObjectPath();
-+
-+    QDBusConnection::sessionBus().registerObject(m_lastReturnObject, this, QDBusConnection::ExportScriptableSlots);
-+
-+    QWidget *activeWindow = QApplication::activeWindow();
-+    uint wId = 0;
-+    if (activeWindow!=0)
-+        wId = (uint)activeWindow->winId();
-+
-+    QString appId = QCoreApplication::applicationName();
-+
-+    QDBusInterface soliduiserver("org.kde.kded5", "/modules/soliduiserver", "org.kde.SolidUiServer");
-+    QDBusReply<void> reply = soliduiserver.call("showPassphraseDialog", udi, returnService,
-+                                                m_lastReturnObject, wId, appId);
-+    m_passphraseRequested = reply.isValid();
-+    if (!m_passphraseRequested)
-+        qWarning() << "Failed to call the SolidUiServer, D-Bus said:" << reply.error();
-+
-+    return m_passphraseRequested;
-+}
-+
-+void StorageAccess::passphraseReply(const QString & passphrase)
-+{
-+    if (m_passphraseRequested)
-+    {
-+        QDBusConnection::sessionBus().unregisterObject(m_lastReturnObject);
-+        m_passphraseRequested = false;
-+        if (!passphrase.isEmpty())
-+            callCryptoSetup(passphrase);
-+        else
-+        {
-+            m_setupInProgress = false;
-+            m_device->broadcastActionDone("setup");
-+        }
-+    }
-+}
-+
-+void StorageAccess::callCryptoSetup(const QString & passphrase)
-+{
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_device->udi(), UD2_DBUS_INTERFACE_ENCRYPTED, "Unlock");
-+
-+    msg << passphrase;
-+    msg << QVariantMap();   // options, unused now
-+
-+    c.callWithCallback(msg, this,
-+                       SLOT(slotDBusReply(const QDBusMessage &)),
-+                       SLOT(slotDBusError(const QDBusError &)));
-+}
-+
-+bool StorageAccess::callCryptoTeardown(bool actOnParent)
-+{
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE,
-+                                                      actOnParent ? (m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path()) : m_device->udi(),
-+                                                      UD2_DBUS_INTERFACE_ENCRYPTED, "Lock");
-+    msg << QVariantMap();   // options, unused now
-+
-+    m_clearTextPath.clear();
-+
-+    return c.callWithCallback(msg, this,
-+                              SLOT(slotDBusReply(const QDBusMessage &)),
-+                              SLOT(slotDBusError(const QDBusError &)));
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.h	2012-06-27 21:52:42.094597220 +0200
-@@ -0,0 +1,104 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2STORAGEACCESS_H
-+#define UDISKS2STORAGEACCESS_H
-+
-+#include <solid/ifaces/storageaccess.h>
-+#include "udisksdeviceinterface.h"
-+
-+#include <QtDBus/QDBusMessage>
-+#include <QtDBus/QDBusError>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+class StorageAccess : public DeviceInterface, virtual public Solid::Ifaces::StorageAccess
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::StorageAccess)
-+
-+public:
-+    StorageAccess(Device *device);
-+    virtual ~StorageAccess();
-+
-+    virtual bool isAccessible() const;
-+    virtual QString filePath() const;
-+    virtual bool isIgnored() const;
-+    virtual bool setup();
-+    virtual bool teardown();
-+
-+Q_SIGNALS:
-+    void accessibilityChanged(bool accessible, const QString &udi);
-+    void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
-+    void teardownDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
-+    void setupRequested(const QString &udi);
-+    void teardownRequested(const QString &udi);
-+
-+public Q_SLOTS:
-+    Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString & passphrase);
-+
-+private Q_SLOTS:
-+    void slotDBusReply(const QDBusMessage & reply);
-+    void slotDBusError(const QDBusError & error);
-+
-+    void connectDBusSignals();
-+
-+    void slotSetupRequested();
-+    void slotSetupDone(int error, const QString &errorString);
-+    void slotTeardownRequested();
-+    void slotTeardownDone(int error, const QString &errorString);
-+
-+    void checkAccessibility();
-+
-+private:
-+    /// @return true if this device is luks and unlocked
-+    bool isLuksDevice() const;
-+
-+    void updateCache();
-+
-+    bool mount();
-+    bool unmount();
-+
-+    bool requestPassphrase();
-+    void callCryptoSetup( const QString & passphrase );
-+    bool callCryptoTeardown( bool actOnParent=false );
-+
-+    QString generateReturnObjectPath();
-+
-+private:
-+    bool m_isAccessible;
-+    bool m_setupInProgress;
-+    bool m_teardownInProgress;
-+    bool m_passphraseRequested;
-+    QString m_lastReturnObject;
-+    QString m_clearTextPath;  // path to the unlocked cleartext device
-+
-+    static const int s_unmountTimeout = 0x7fffffff;
-+};
-+}
-+}
-+}
-+
-+#endif // UDISKS2STORAGEACCESS_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.cpp	2012-06-27 21:52:42.094597220 +0200
-@@ -0,0 +1,147 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksstoragedrive.h"
-+
-+#include "../shared/udevqtclient.h"
-+
-+#include <QtCore/QDebug>
-+#include <QtCore/QFile>
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+StorageDrive::StorageDrive(Device *dev)
-+    : Block(dev)
-+{
-+    UdevQt::Client client(this);
-+    m_udevDevice = client.deviceByDeviceFile(device());
-+    m_udevDevice.deviceProperties();
-+}
-+
-+StorageDrive::~StorageDrive()
-+{
-+}
-+
-+qulonglong StorageDrive::size() const
-+{
-+    return m_device->prop("Size").toULongLong();
-+}
-+
-+bool StorageDrive::isHotpluggable() const
-+{
-+    const Solid::StorageDrive::Bus _bus = bus();
-+    return _bus == Solid::StorageDrive::Usb || _bus == Solid::StorageDrive::Ieee1394;
-+}
-+
-+bool StorageDrive::isRemovable() const
-+{
-+    return m_device->prop("MediaRemovable").toBool() || m_device->prop("Removable").toBool();
-+}
-+
-+Solid::StorageDrive::DriveType StorageDrive::driveType() const
-+{
-+    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
-+
-+    if ( m_device->isOpticalDrive() ) // optical disks
-+    {
-+        return Solid::StorageDrive::CdromDrive;
-+    }
-+    else if ( mediaTypes.contains( "floppy" ) )
-+    {
-+        return Solid::StorageDrive::Floppy;
-+    }
-+#if 0 // TODO add to Solid
-+    else if ( mediaTypes.contains( "floppy_jaz" ) )
-+    {
-+        return Solid::StorageDrive::Jaz;
-+    }
-+    else if ( mediaTypes.contains( "floppy_zip" ) )
-+    {
-+        return Solid::StorageDrive::Zip;
-+    }
-+    else if ( mediaTypes.contains( "flash" ) )
-+    {
-+        return Solid::StorageDrive::Flash;
-+    }
-+#endif
-+    else if ( mediaTypes.contains( "flash_cf" ) )
-+    {
-+        return Solid::StorageDrive::CompactFlash;
-+    }
-+    else if ( mediaTypes.contains( "flash_ms" ) )
-+    {
-+        return Solid::StorageDrive::MemoryStick;
-+    }
-+    else if ( mediaTypes.contains( "flash_sm" ) )
-+    {
-+        return Solid::StorageDrive::SmartMedia;
-+    }
-+    else if ( mediaTypes.contains( "flash_sd" ) || mediaTypes.contains( "flash_sdhc" )
-+              || mediaTypes.contains( "flash_mmc" ) || mediaTypes.contains("flash_sdxc") )
-+    {
-+        return Solid::StorageDrive::SdMmc;
-+    }
-+    // FIXME: udisks2 doesn't know about xD cards
-+    else
-+    {
-+        return Solid::StorageDrive::HardDisk;
-+    }
-+}
-+
-+Solid::StorageDrive::Bus StorageDrive::bus() const
-+{
-+    const QString bus = m_device->prop("ConnectionBus").toString();
-+    const QString udevBus = m_udevDevice.deviceProperty("ID_BUS").toString();
-+
-+    //qDebug() << "bus:" << bus << "udev bus:" << udevBus;
-+
-+    if (udevBus == "ata")
-+    {
-+        if (m_udevDevice.deviceProperty("ID_ATA_SATA").toInt() == 1) // serial ATA
-+            return Solid::StorageDrive::Sata;
-+        else  // parallel (classical) ATA
-+            return Solid::StorageDrive::Ide;
-+    }
-+    else if (bus == "usb")
-+    {
-+        return Solid::StorageDrive::Usb;
-+    }
-+    else if (bus == "ieee1394")
-+    {
-+        return Solid::StorageDrive::Ieee1394;
-+    }
-+    else if (udevBus == "scsi")
-+    {
-+        return Solid::StorageDrive::Scsi;
-+    }
-+#if 0  // TODO add these to Solid
-+    else if ( bus == "sdio" )
-+    {
-+        return Solid::StorageDrive::SDIO;
-+    }
-+    else if ( bus == "virtual" )
-+    {
-+        return Solid::StorageDrive::Virtual;
-+    }
-+#endif
-+    else
-+        return Solid::StorageDrive::Platform;
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-27 21:52:42.095597221 +0200
-@@ -0,0 +1,61 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2STORAGEDRIVE_H
-+#define UDISKS2STORAGEDRIVE_H
-+
-+#include <ifaces/storagedrive.h>
-+
-+#include "../shared/udevqtdevice.h"
-+
-+#include "udisksblock.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class StorageDrive: public Block, virtual public Solid::Ifaces::StorageDrive
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::StorageDrive)
-+
-+public:
-+    StorageDrive(Device *dev);
-+    virtual ~StorageDrive();
-+
-+    virtual qulonglong size() const;
-+    virtual bool isHotpluggable() const;
-+    virtual bool isRemovable() const;
-+    virtual Solid::StorageDrive::DriveType driveType() const;
-+    virtual Solid::StorageDrive::Bus bus() const;
-+
-+private:
-+    UdevQt::Device m_udevDevice;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISK2SSTORAGEDRIVE_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.cpp
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.cpp	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.cpp	2012-06-27 21:52:42.095597221 +0200
-@@ -0,0 +1,105 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksstoragevolume.h"
-+#include "udisks2.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+StorageVolume::StorageVolume(Device *device)
-+    : Block(device)
-+{
-+}
-+
-+StorageVolume::~StorageVolume()
-+{
-+}
-+
-+QString StorageVolume::encryptedContainerUdi() const
-+{
-+    const QString path = m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
-+    if ( path.isEmpty() || path == "/")
-+        return QString();
-+    else
-+        return path;
-+}
-+
-+qulonglong StorageVolume::size() const
-+{
-+    return m_device->prop("Size").toULongLong();
-+}
-+
-+QString StorageVolume::uuid() const
-+{
-+    return m_device->prop("IdUUID").toString();
-+}
-+
-+QString StorageVolume::label() const
-+{
-+    QString label = m_device->prop("HintName").toString();
-+    if (label.isEmpty())
-+        label = m_device->prop("IdLabel").toString();
-+    if (label.isEmpty())
-+        label = m_device->prop("Name").toString();
-+    return label;
-+}
-+
-+QString StorageVolume::fsType() const
-+{
-+    return m_device->prop("IdType").toString();
-+}
-+
-+Solid::StorageVolume::UsageType StorageVolume::usage() const
-+{
-+    const QString usage = m_device->prop("IdUsage").toString();
-+
-+    if (m_device->hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM))
-+    {
-+        return Solid::StorageVolume::FileSystem;
-+    }
-+    else if (m_device->isPartitionTable())
-+    {
-+        return Solid::StorageVolume::PartitionTable;
-+    }
-+    else if (usage == "raid")
-+    {
-+        return Solid::StorageVolume::Raid;
-+    }
-+    else if (m_device->isEncryptedContainer())
-+    {
-+        return Solid::StorageVolume::Encrypted;
-+    }
-+    else if (usage == "unused" || usage.isEmpty())
-+    {
-+        return Solid::StorageVolume::Unused;
-+    }
-+    else
-+    {
-+        return Solid::StorageVolume::Other;
-+    }
-+}
-+
-+bool StorageVolume::isIgnored() const
-+{
-+    const Solid::StorageVolume::UsageType usg = usage();
-+    return m_device->prop("HintIgnore").toBool() || m_device->isSwap() ||
-+            ((usg == Solid::StorageVolume::Unused || usg == Solid::StorageVolume::Other || usg == Solid::StorageVolume::PartitionTable) && !m_device->isOpticalDisc());
-+}
-diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.h
---- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.h	1970-01-01 01:00:00.000000000 +0100
-+++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.h	2012-06-27 21:52:42.096597222 +0200
-@@ -0,0 +1,57 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2STORAGEVOLUME_H
-+#define UDISKS2STORAGEVOLUME_H
-+
-+#include <ifaces/storagevolume.h>
-+#include "udisksblock.h"
-+
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class StorageVolume: public Block, virtual public Solid::Ifaces::StorageVolume
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::StorageVolume)
-+
-+public:
-+    StorageVolume(Device *device);
-+    virtual ~StorageVolume();
-+
-+    virtual QString encryptedContainerUdi() const;
-+    virtual qulonglong size() const;
-+    virtual QString uuid() const;
-+    virtual QString label() const;
-+    virtual QString fsType() const;
-+    virtual Solid::StorageVolume::UsageType usage() const;
-+    virtual bool isIgnored() const;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2STORAGEVOLUME_H
-diff -ruN kdelibs-4.8.95.orig/solid/solid/managerbase.cpp kdelibs-4.8.95/solid/solid/managerbase.cpp
---- kdelibs-4.8.95.orig/solid/solid/managerbase.cpp	2012-05-23 01:45:29.000000000 +0200
-+++ kdelibs-4.8.95/solid/solid/managerbase.cpp	2012-06-27 21:51:57.030594701 +0200
-@@ -21,7 +21,7 @@
- #include "managerbase_p.h"
- 
- #include <stdlib.h>
--#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
-+#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
- #include <config-solid.h>
- #endif
- 
-@@ -30,8 +30,7 @@
- #if defined (Q_OS_MAC)
- #include "backends/iokit/iokitmanager.h"
- #elif defined (Q_OS_UNIX)
--#include "backends/hal/halmanager.h"
--#include "backends/udisks/udisksmanager.h"
-+#include "backends/udisks2/udisksmanager.h"
- #include "backends/upower/upowermanager.h"
- 
- #if defined (HUPNP_FOUND)
-@@ -44,7 +43,7 @@
- 
- #include "backends/fstab/fstabmanager.h"
- 
--#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-+#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
- #include "backends/wmi/wmimanager.h"
- #endif
- 
-@@ -68,25 +67,16 @@
- #        if defined(Q_OS_MAC)
-             m_backends << new Solid::Backends::IOKit::IOKitManager(0);
- 
--#        elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-+#        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-             m_backends << new Solid::Backends::Wmi::WmiManager(0);
- 
--#        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
--            m_backends << new Solid::Backends::Hal::HalManager(0);
--
- #        elif defined(Q_OS_LINUX)
--            bool solidHalLegacyEnabled
--                = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
--            if (solidHalLegacyEnabled) {
--                m_backends << new Solid::Backends::Hal::HalManager(0);
--            } else {
- #               if defined(UDEV_FOUND)
-                     m_backends << new Solid::Backends::UDev::UDevManager(0);
- #               endif
--                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
-+                m_backends << new Solid::Backends::UDisks2::Manager(0)
-                            << new Solid::Backends::UPower::UPowerManager(0)
-                            << new Solid::Backends::Fstab::FstabManager(0);
--            }
- #        endif
- 
- #        if defined (HUPNP_FOUND)
-diff -ruN kdelibs-4.8.95.orig/solid/tests/CMakeLists.txt kdelibs-4.8.95/solid/tests/CMakeLists.txt
---- kdelibs-4.8.95.orig/solid/tests/CMakeLists.txt	2012-05-23 01:45:29.000000000 +0200
-+++ kdelibs-4.8.95/solid/tests/CMakeLists.txt	2012-06-27 21:50:56.880591338 +0200
-@@ -16,20 +16,6 @@
- add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
- 
- 
--########### halbasictest ###############
--
--if(NOT WIN32 AND NOT APPLE)
--set(halbasictest_SRCS halbasictest.cpp )
--
--kde4_add_executable(halbasictest ${halbasictest_SRCS})
--
--if(WIN32)
--  set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
--endif(WIN32)
--
--target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
--endif(NOT WIN32 AND NOT APPLE)
--
- ########### solidhwtest ###############
- 
- set(solidhwtest_SRCS 

diff --git a/kde-base/kdelibs/kdelibs-4.8.95.ebuild b/kde-base/kdelibs/kdelibs-4.8.95.ebuild
index 69f8c68..b6b8fb7 100644
--- a/kde-base/kdelibs/kdelibs-4.8.95.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.95.ebuild
@@ -16,6 +16,7 @@ EGIT_BRANCH="KDE/4.8"
 
 DESCRIPTION="KDE libraries needed by all KDE programs."
 HOMEPAGE="http://www.kde.org/"
+SRC_URI+=" http://dev.gentoo.org/~johu/distfiles/${PN}-4.8.95-udisks2.patch.xz"
 
 KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
 LICENSE="LGPL-2.1"
@@ -147,7 +148,7 @@ src_prepare() {
 	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 
 	if use udisks2; then
-		epatch "${FILESDIR}/${PN}-4.8.95-udisks2.patch"
+		epatch "${WORKDIR}/${PN}-4.8.95-udisks2.patch"
 		epatch "${FILESDIR}/${PN}-4.8.95-udisks2-includes.patch"
 	fi
 

diff --git a/kde-base/kdelibs/kdelibs-4.8.97.ebuild b/kde-base/kdelibs/kdelibs-4.8.97.ebuild
index c2d3ecd..aba5ed9 100644
--- a/kde-base/kdelibs/kdelibs-4.8.97.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.97.ebuild
@@ -17,6 +17,7 @@ EGIT_BRANCH="KDE/4.9"
 
 DESCRIPTION="KDE libraries needed by all KDE programs."
 HOMEPAGE="http://www.kde.org/"
+SRC_URI+=" http://dev.gentoo.org/~johu/distfiles/${PN}-4.8.95-udisks2.patch.xz"
 
 KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
 LICENSE="LGPL-2.1"
@@ -148,7 +149,7 @@ src_prepare() {
 	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 
 	if use udisks2; then
-		epatch "${FILESDIR}/${PN}-4.8.95-udisks2.patch"
+		epatch "${WORKDIR}/${PN}-4.8.95-udisks2.patch"
 		epatch "${FILESDIR}/${PN}-4.8.95-udisks2-includes.patch"
 	fi
 

diff --git a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
index 48227d7..5da37fe 100644
--- a/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.9.49.9999.ebuild
@@ -17,6 +17,7 @@ EGIT_BRANCH="KDE/4.9"
 
 DESCRIPTION="KDE libraries needed by all KDE programs."
 HOMEPAGE="http://www.kde.org/"
+SRC_URI+=" http://dev.gentoo.org/~johu/distfiles/${PN}-4.8.95-udisks2.patch.xz"
 
 KEYWORDS=""
 LICENSE="LGPL-2.1"
@@ -148,7 +149,7 @@ src_prepare() {
 	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 
 	if use udisks2; then
-		epatch "${FILESDIR}/${PN}-4.8.95-udisks2.patch"
+		epatch "${WORKDIR}/${PN}-4.8.95-udisks2.patch"
 		epatch "${FILESDIR}/${PN}-4.8.95-udisks2-includes.patch"
 	fi
 

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 48227d7..5da37fe 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -17,6 +17,7 @@ EGIT_BRANCH="KDE/4.9"
 
 DESCRIPTION="KDE libraries needed by all KDE programs."
 HOMEPAGE="http://www.kde.org/"
+SRC_URI+=" http://dev.gentoo.org/~johu/distfiles/${PN}-4.8.95-udisks2.patch.xz"
 
 KEYWORDS=""
 LICENSE="LGPL-2.1"
@@ -148,7 +149,7 @@ src_prepare() {
 	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 
 	if use udisks2; then
-		epatch "${FILESDIR}/${PN}-4.8.95-udisks2.patch"
+		epatch "${WORKDIR}/${PN}-4.8.95-udisks2.patch"
 		epatch "${FILESDIR}/${PN}-4.8.95-udisks2-includes.patch"
 	fi
 



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-07-06 20:54 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-07-06 20:54 UTC (permalink / raw
  To: gentoo-commits

commit:     32f088bc94e656bccb0f73f365fc29f366c90cfb
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Thu Jul  5 19:45:49 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Fri Jul  6 20:55:22 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=32f088bc

[kde-base/kdelibs] Fix crash bug 424355

(Portage version: 2.2.0_alpha115/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.8.4-kiopointer.patch   |   21 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    1 +
 2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-kiopointer.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-kiopointer.patch
new file mode 100644
index 0000000..a01b221
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.4-kiopointer.patch
@@ -0,0 +1,21 @@
+--- a/kio/kio/accessmanager.cpp
++++ b/kio/kio/accessmanager.cpp
+@@ -37,7 +37,7 @@
+ #include <klocalizedstring.h>
+ 
+ #include <QtCore/QUrl>
+-#include <QtCore/QWeakPointer>
++#include <QtCore/QPointer>
+ #include <QtGui/QWidget>
+ #include <QtDBus/QDBusInterface>
+ #include <QtDBus/QDBusConnection>
+@@ -87,7 +87,7 @@
+     bool emitReadyReadOnMetaDataChange;
+     KIO::MetaData requestMetaData;
+     KIO::MetaData sessionMetaData;
+-    QWidget* window;
++    QPointer<QWidget> window;
+ };
+ 
+ namespace Integration {
+

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index 89d0593..51d0d80 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -129,6 +129,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.4-kiopointer.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-06-27 22:05 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-06-27 22:05 UTC (permalink / raw
  To: gentoo-commits

commit:     711fea634b5216de7258cc8bf5556be68febe779
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Wed Jun 27 22:06:05 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Wed Jun 27 22:06:05 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=711fea63

[kde-base/kdelibs] Fix includes for udisks2

(Portage version: 2.2.0_alpha113/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.95-udisks2-includes.patch    |   24 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.8.95.ebuild             |    1 +
 2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2-includes.patch b/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2-includes.patch
new file mode 100644
index 0000000..4b11763
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2-includes.patch
@@ -0,0 +1,24 @@
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-28 00:02:46.022033586 +0200
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-28 00:03:53.791036528 +0200
+@@ -24,7 +24,7 @@
+ 
+ #include <solid/ifaces/opticaldisc.h>
+ 
+-#include "../shared/udevqtdevice.h"
++#include "../shared/udevqt.h"
+ 
+ #include "udisksstoragevolume.h"
+ #include "udisksdevice.h"
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-28 00:02:46.024033586 +0200
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-28 00:03:39.134040443 +0200
+@@ -24,7 +24,7 @@
+ 
+ #include <ifaces/storagedrive.h>
+ 
+-#include "../shared/udevqtdevice.h"
++#include "../shared/udevqt.h"
+ 
+ #include "udisksblock.h"
+ 

diff --git a/kde-base/kdelibs/kdelibs-4.8.95.ebuild b/kde-base/kdelibs/kdelibs-4.8.95.ebuild
index 0ea0a98..eef4d86 100644
--- a/kde-base/kdelibs/kdelibs-4.8.95.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.95.ebuild
@@ -130,6 +130,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
 	"${FILESDIR}/${PN}-4.8.95-udisks2.patch"
+	"${FILESDIR}/${PN}-4.8.95-udisks2-includes.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-06-27 19:55 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-06-27 19:55 UTC (permalink / raw
  To: gentoo-commits

commit:     81b0f917e060e4bb467a5b38c477e4e3942c4688
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Wed Jun 27 19:56:49 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Wed Jun 27 19:56:49 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=81b0f917

[kde-base/kdelibs] Update udisks2 patch

(Portage version: 2.2.0_alpha113/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.8.95-udisks2.patch     | 4148 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.8.95.ebuild             |    2 +-
 2 files changed, 4149 insertions(+), 1 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2.patch b/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2.patch
new file mode 100644
index 0000000..9337e59
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.95-udisks2.patch
@@ -0,0 +1,4148 @@
+http://pkgs.fedoraproject.org/gitweb/?p=kdelibs.git;a=tree;h=b54aa3a731733709ef376bb8851e936641bc4517;hb=b54aa3a731733709ef376bb8851e936641bc4517
+re-done udisks2 patch from Wed, 27 Jun 2012 16:11:24 +0000
+
+diff -ruN kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt kdelibs-4.8.95/solid/solid/CMakeLists.txt
+--- kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt	2012-05-23 01:45:27.000000000 +0200
++++ kdelibs-4.8.95/solid/solid/CMakeLists.txt	2012-06-27 21:51:57.030594701 +0200
+@@ -1,6 +1,7 @@
+ set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
+ add_subdirectory( ifaces )
+ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
++include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
+ 
+ if(WIN32)
+    include_directories( ${KDEWIN_INCLUDES} )
+@@ -39,7 +40,6 @@
+ 
+ file(MAKE_DIRECTORY
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
+-   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
+ )
+@@ -225,33 +225,6 @@
+    endif( UDEV_FOUND )
+ 
+ 
+-   message(STATUS "Building Solid HAL backend." )
+-   set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-   backends/hal/halacadapter.cpp
+-   backends/hal/halaudiointerface.cpp
+-   backends/hal/halbattery.cpp
+-   backends/hal/halblock.cpp
+-   backends/hal/halbutton.cpp
+-   backends/hal/halcamera.cpp
+-   backends/hal/halcdrom.cpp
+-   backends/hal/haldeviceinterface.cpp
+-   backends/hal/haldvbinterface.cpp
+-   backends/hal/halfstabhandling.cpp
+-   backends/hal/halgenericinterface.cpp
+-   backends/hal/haldevice.cpp
+-   backends/hal/halmanager.cpp
+-   backends/hal/halnetworkinterface.cpp
+-   backends/hal/halserialinterface.cpp
+-   backends/hal/halopticaldisc.cpp
+-   backends/hal/halportablemediaplayer.cpp
+-   backends/hal/halprocessor.cpp
+-   backends/hal/halstorageaccess.cpp
+-   backends/hal/halstorage.cpp
+-   backends/hal/halvideo.cpp
+-   backends/hal/halvolume.cpp
+-   backends/hal/halsmartcardreader.cpp
+-   )
+-
+    message(STATUS "Building Solid UPower backend." )
+    set(solid_LIB_SRCS ${solid_LIB_SRCS}
+    backends/upower/upowermanager.cpp
+@@ -264,18 +237,19 @@
+ 
+    # FIXME: this should work on more Unix systems
+    if (CMAKE_SYSTEM_NAME MATCHES Linux)
+-      message(STATUS "Building Solid UDisks backend." )
++      message(STATUS "Building Solid UDisks2 backend." )
+       set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-      backends/udisks/udisksmanager.cpp
+-      backends/udisks/udisksdevice.cpp
+-      backends/udisks/udisksblock.cpp
+-      backends/udisks/udisksstoragevolume.cpp
+-      backends/udisks/udisksdeviceinterface.cpp
+-      backends/udisks/udisksopticaldisc.cpp
+-      backends/udisks/udisksopticaldrive.cpp
+-      backends/udisks/udisksstoragedrive.cpp
+-      backends/udisks/udisksstorageaccess.cpp
+-      backends/udisks/udisksgenericinterface.cpp
++      backends/udisks2/udisksmanager.cpp
++      backends/udisks2/udisksdevice.cpp
++      backends/udisks2/udisksblock.cpp
++      backends/udisks2/udisksstoragevolume.cpp
++      backends/udisks2/udisksdeviceinterface.cpp
++      backends/udisks2/udisksopticaldisc.cpp
++      backends/udisks2/udisksopticaldrive.cpp
++      backends/udisks2/udisksstoragedrive.cpp
++      backends/udisks2/udisksstorageaccess.cpp
++      backends/udisks2/udisksgenericinterface.cpp
++      backends/udisks2/dbus/manager.cpp
+       )
+    endif (CMAKE_SYSTEM_NAME MATCHES Linux)
+ 
+diff -ruN kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt.orig kdelibs-4.8.95/solid/solid/CMakeLists.txt.orig
+--- kdelibs-4.8.95.orig/solid/solid/CMakeLists.txt.orig	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/CMakeLists.txt.orig	2012-06-27 21:50:56.879591338 +0200
+@@ -0,0 +1,463 @@
++set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
++add_subdirectory( ifaces )
++include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
++include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
++
++if(WIN32)
++   include_directories( ${KDEWIN_INCLUDES} )
++endif(WIN32)
++
++configure_file(solid_export.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/solid_export.h)
++
++include (CheckCXXSourceCompiles)
++
++check_cxx_source_compiles("	#ifdef __SUNPRO_CC
++					#define __asm__ asm
++				#endif
++				int main() { __asm__(\"pxor %mm0, %mm0\") ; }" HAVE_X86_MMX)
++check_cxx_source_compiles("     #ifdef __SUNPRO_CC
++                                        #define __asm__ asm
++                                #endif
++				int main() { __asm__(\"xorps %xmm0, %xmm0\"); }" HAVE_X86_SSE)
++check_cxx_source_compiles("     #ifdef __SUNPRO_CC
++                                        #define __asm__ asm
++                                #endif
++				int main() { __asm__(\"xorpd %xmm0, %xmm0\"); }" HAVE_X86_SSE2)
++check_cxx_source_compiles("     #ifdef __SUNPRO_CC
++                                        #define __asm__ asm
++                                #endif
++				int main() { __asm__(\"femms\"); }" HAVE_X86_3DNOW)
++check_cxx_source_compiles("     #ifdef __SUNPRO_CC
++                                        #define __asm__ asm
++                                #endif
++				int main() { __asm__(\"mtspr 256, %0; vand %%v0, %%v0, %%v0\" : : \"r\"(-1) ); }" HAVE_PPC_ALTIVEC)
++
++configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-processor.h )
++
++
++
++########### next target ###############
++
++file(MAKE_DIRECTORY
++   ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
++   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
++   ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
++   ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
++)
++
++set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${KDE4_C_FLAGS}") # enable -fvisibility=hidden for C sources
++
++set(solid_LIB_SRCS
++   solidnamespace.cpp
++   managerbase.cpp
++   device.cpp
++   devicemanager.cpp
++   deviceinterface.cpp
++   genericinterface.cpp
++   processor.cpp
++   block.cpp
++   storagedrive.cpp
++   opticaldrive.cpp
++   storagevolume.cpp
++   opticaldisc.cpp
++   storageaccess.cpp
++   camera.cpp
++   portablemediaplayer.cpp
++   networkinterface.cpp
++   networkshare.cpp
++   serialinterface.cpp
++   acadapter.cpp
++   battery.cpp
++   button.cpp
++   audiointerface.cpp
++   dvbinterface.cpp
++   predicate.cpp
++   predicateparse.cpp
++   predicate_lexer.c
++   predicate_parser.c
++   powermanagement.cpp
++   networking.cpp
++   video.cpp
++   smartcardreader.cpp
++   internetgateway.cpp
++   xdgbasedirs.cpp
++
++   ifaces/acadapter.cpp
++   ifaces/audiointerface.cpp
++   ifaces/battery.cpp
++   ifaces/block.cpp
++   ifaces/button.cpp
++   ifaces/camera.cpp
++   ifaces/opticaldrive.cpp
++   ifaces/device.cpp
++   ifaces/deviceinterface.cpp
++   ifaces/devicemanager.cpp
++   ifaces/dvbinterface.cpp
++   ifaces/genericinterface.cpp
++   ifaces/networkinterface.cpp
++   ifaces/networkshare.cpp
++   ifaces/serialinterface.cpp
++   ifaces/opticaldisc.cpp
++   ifaces/portablemediaplayer.cpp
++   ifaces/processor.cpp
++   ifaces/storagedrive.cpp
++   ifaces/storagevolume.cpp
++   ifaces/storageaccess.cpp
++   ifaces/video.cpp
++   ifaces/smartcardreader.cpp
++   ifaces/internetgateway.cpp
++
++   backends/fakehw/fakeacadapter.cpp
++   backends/fakehw/fakeaudiointerface.cpp
++   backends/fakehw/fakebattery.cpp
++   backends/fakehw/fakeblock.cpp
++   backends/fakehw/fakebutton.cpp
++   backends/fakehw/fakecamera.cpp
++   backends/fakehw/fakecdrom.cpp
++   backends/fakehw/fakedevice.cpp
++   backends/fakehw/fakedeviceinterface.cpp
++   backends/fakehw/fakedvbinterface.cpp
++   backends/fakehw/fakegenericinterface.cpp
++   backends/fakehw/fakemanager.cpp
++   backends/fakehw/fakenetworkshare.cpp
++   backends/fakehw/fakenetworkinterface.cpp
++   backends/fakehw/fakeopticaldisc.cpp
++   backends/fakehw/fakeportablemediaplayer.cpp
++   backends/fakehw/fakeprocessor.cpp
++   backends/fakehw/fakestorage.cpp
++   backends/fakehw/fakestorageaccess.cpp
++   backends/fakehw/fakevideo.cpp
++   backends/fakehw/fakevolume.cpp
++   backends/fakehw/fakesmartcardreader.cpp
++
++   backends/shared/rootdevice.cpp
++   backends/shared/cpufeatures.cpp
++)
++
++if(NOT APPLE)
++  macro_optional_find_package( HUpnp )
++
++  if ( HUPNP_FOUND AND ((HUPNP_VERSION_MAJOR EQUAL 0 AND HUPNP_VERSION_MINOR EQUAL 9) OR (HUPNP_VERSION_MAJOR EQUAL 1)))
++    include_directories( ${HUPNP_INCLUDE_DIR} )
++    message(STATUS "Building Solid UPnP backend." )
++    set(solid_LIB_SRCS ${solid_LIB_SRCS}
++       backends/upnp/upnpdevice.cpp
++       backends/upnp/upnpdevicemanager.cpp
++       backends/upnp/upnpdeviceinterface.cpp
++       backends/upnp/upnpmediaserver.cpp
++       backends/upnp/upnpinternetgateway.cpp
++       backends/upnp/upnpcontrolpoint.cpp
++    )
++  else ()
++    set(HUPNP_FOUND false)
++  endif ()
++  macro_log_feature( HUPNP_FOUND "HUPnP" "UPnP support for Solid" "http://www.herqq.org" FALSE "" "Allows Solid to provide information about UPnP devices on the network" )
++endif(NOT APPLE)
++
++if(NOT WIN32 AND NOT APPLE)
++#   message(STATUS "Building Solid KUPnP backend." )
++#   set(solid_LIB_SRCS ${solid_LIB_SRCS}
++
++#   backends/kupnp/cagibidbuscodec.cpp
++#   backends/kupnp/cagibidevice.cpp
++#   backends/kupnp/kupnpstorageaccess.cpp
++#   backends/kupnp/kupnpdeviceinterface.cpp
++#   backends/kupnp/mediaserver1.cpp
++#   backends/kupnp/mediaserver2.cpp
++#   backends/kupnp/mediaserver3.cpp
++#   backends/kupnp/internetgatewaydevice1.cpp
++#   backends/kupnp/kupnpdevice.cpp
++#   backends/kupnp/kupnprootdevice.cpp
++#   backends/kupnp/kupnpmanager.cpp
++
++#   )
++
++   macro_optional_find_package( UDev )
++   macro_log_feature( UDEV_FOUND "UDev" "UDev support for Solid" "http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" FALSE "" "Allows Solid to use UDev to provide information about devices on Linux" )
++   configure_file( config-solid.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-solid.h )
++
++
++   if ( UDEV_FOUND )
++      message(STATUS "Building Solid UDev backend." )
++      set(solid_LIB_SRCS ${solid_LIB_SRCS}
++      backends/udev/udevdevice.cpp
++      backends/udev/udevmanager.cpp
++      backends/udev/udevdeviceinterface.cpp
++      backends/udev/udevgenericinterface.cpp
++      backends/udev/cpuinfo.cpp
++      backends/udev/udevprocessor.cpp
++      backends/udev/udevcamera.cpp
++      backends/udev/udevvideo.cpp
++      backends/udev/udevaudiointerface.cpp
++      backends/udev/udevnetworkinterface.cpp
++      backends/udev/udevserialinterface.cpp
++      backends/udev/udevaudiointerface_p.cpp
++      backends/udev/udevportablemediaplayer.cpp
++      backends/udev/udevdvbinterface.cpp
++      backends/udev/udevblock.cpp
++      backends/shared/udevqtclient.cpp
++      backends/shared/udevqtdevice.cpp
++      )
++
++      # check for media-player-info (runtime-only optional dependency)
++      set(XDG_DATA_DIRS_ENV $ENV{XDG_DATA_DIRS})  # if(ENV{..}) does not work for me
++      if(XDG_DATA_DIRS_ENV)
++         find_path(MEDIAPLAYERINFO_PATH sony_psp.mpi
++            PATHS ENV XDG_DATA_DIRS
++            PATH_SUFFIXES "media-player-info" NO_DEFAULT_PATH
++         )
++      else(XDG_DATA_DIRS_ENV)
++         set(XDG_DATA_DIRS "/usr/share")
++         message(STATUS "Warning: environment variable XDG_DATA_DIRS not set, falling back to ${XDG_DATA_DIRS}")
++         find_path(MEDIAPLAYERINFO_PATH sony_psp.mpi
++            PATHS "${XDG_DATA_DIRS}"
++            PATH_SUFFIXES "media-player-info" NO_DEFAULT_PATH
++         )
++      endif(XDG_DATA_DIRS_ENV)
++
++      macro_log_feature(MEDIAPLAYERINFO_PATH
++         "media-player-info"
++         "Enables identification and querying of portable media players"
++         "http://www.freedesktop.org/wiki/Software/media-player-info"
++         FALSE
++         ""
++         "Runtime-only dependency of the udev solid backend. Support for m-p-i is included even if not found during build"
++      )
++   endif( UDEV_FOUND )
++
++
++   message(STATUS "Building Solid HAL backend." )
++   set(solid_LIB_SRCS ${solid_LIB_SRCS}
++   backends/hal/halacadapter.cpp
++   backends/hal/halaudiointerface.cpp
++   backends/hal/halbattery.cpp
++   backends/hal/halblock.cpp
++   backends/hal/halbutton.cpp
++   backends/hal/halcamera.cpp
++   backends/hal/halcdrom.cpp
++   backends/hal/haldeviceinterface.cpp
++   backends/hal/haldvbinterface.cpp
++   backends/hal/halfstabhandling.cpp
++   backends/hal/halgenericinterface.cpp
++   backends/hal/haldevice.cpp
++   backends/hal/halmanager.cpp
++   backends/hal/halnetworkinterface.cpp
++   backends/hal/halserialinterface.cpp
++   backends/hal/halopticaldisc.cpp
++   backends/hal/halportablemediaplayer.cpp
++   backends/hal/halprocessor.cpp
++   backends/hal/halstorageaccess.cpp
++   backends/hal/halstorage.cpp
++   backends/hal/halvideo.cpp
++   backends/hal/halvolume.cpp
++   backends/hal/halsmartcardreader.cpp
++   )
++
++   message(STATUS "Building Solid UPower backend." )
++   set(solid_LIB_SRCS ${solid_LIB_SRCS}
++   backends/upower/upowermanager.cpp
++   backends/upower/upowerdevice.cpp
++   backends/upower/upowerbattery.cpp
++   backends/upower/upoweracadapter.cpp
++   backends/upower/upowerdeviceinterface.cpp
++   backends/upower/upowergenericinterface.cpp
++   )
++
++   # FIXME: this should work on more Unix systems
++   if (CMAKE_SYSTEM_NAME MATCHES Linux)
++      message(STATUS "Building Solid UDisks backend." )
++      set(solid_LIB_SRCS ${solid_LIB_SRCS}
++      backends/udisks/udisksmanager.cpp
++      backends/udisks/udisksdevice.cpp
++      backends/udisks/udisksblock.cpp
++      backends/udisks/udisksstoragevolume.cpp
++      backends/udisks/udisksdeviceinterface.cpp
++      backends/udisks/udisksopticaldisc.cpp
++      backends/udisks/udisksopticaldrive.cpp
++      backends/udisks/udisksstoragedrive.cpp
++      backends/udisks/udisksstorageaccess.cpp
++      backends/udisks/udisksgenericinterface.cpp
++      )
++   endif (CMAKE_SYSTEM_NAME MATCHES Linux)
++
++   message(STATUS "Building Solid fstab backend." )
++   set(solid_LIB_SRCS ${solid_LIB_SRCS}
++   backends/fstab/fstabmanager.cpp
++   backends/fstab/fstabdevice.cpp
++   backends/fstab/fstabnetworkshare.cpp
++   backends/fstab/fstabstorageaccess.cpp
++   backends/fstab/fstabhandling.cpp
++   backends/fstab/fstabwatcher.cpp
++   )
++
++endif(NOT WIN32 AND NOT APPLE)
++
++if(APPLE)
++   find_package(IOKit REQUIRED)
++
++   message(STATUS "-- Building Solid IOKit backend." )
++   set(solid_LIB_SRCS ${solid_LIB_SRCS}
++   backends/iokit/iokitmanager.cpp
++   backends/iokit/iokitdevice.cpp
++   backends/iokit/cfhelper.cpp
++   backends/iokit/iokitdeviceinterface.cpp
++   backends/iokit/iokitgenericinterface.cpp
++   backends/iokit/iokitprocessor.cpp
++   backends/iokit/iokitnetworkinterface.cpp
++   backends/iokit/iokitserialinterface.cpp
++   backends/iokit/iokitbattery.cpp
++   )
++endif(APPLE)
++
++if(WIN32)
++   include(CheckIncludeFileCXX)
++   check_include_file_cxx(wbemidl.h HAVE_WBEM)
++   FIND_LIBRARY(WBEM_LIBRARIES NAMES wbemuuid wbemuuidd)
++   if(HAVE_WBEM AND WBEM_LIBRARIES)
++      set(HAVE_WBEM True)
++      message(STATUS "Found wbemuuid library: ${WBEM_LIBRARIES}")
++   else(HAVE_WBEM AND WBEM_LIBRARIES)
++      set(HAVE_WBEM False)
++   endif(HAVE_WBEM AND WBEM_LIBRARIES)
++   if(HAVE_WBEM AND NOT WINCE)
++       set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_WBEM")
++       message(STATUS "-- Building Solid WMI backend." )
++
++       set(solid_LIB_SRCS ${solid_LIB_SRCS}
++       backends/wmi/wmiacadapter.cpp
++       backends/wmi/wmiaudiointerface.cpp
++       backends/wmi/wmibattery.cpp
++       backends/wmi/wmiblock.cpp
++       backends/wmi/wmibutton.cpp
++       backends/wmi/wmicamera.cpp
++       backends/wmi/wmicdrom.cpp
++       backends/wmi/wmideviceinterface.cpp
++       backends/wmi/wmidvbinterface.cpp
++       backends/wmi/wmigenericinterface.cpp
++       backends/wmi/wmidevice.cpp
++       backends/wmi/wmimanager.cpp
++       backends/wmi/wminetworkinterface.cpp
++       backends/wmi/wmiopticaldisc.cpp
++       backends/wmi/wmiportablemediaplayer.cpp
++       backends/wmi/wmiprocessor.cpp
++       backends/wmi/wmiquery.cpp
++       backends/wmi/wmistorageaccess.cpp
++       backends/wmi/wmistorage.cpp
++       backends/wmi/wmivideo.cpp
++       backends/wmi/wmivolume.cpp
++
++       )
++    endif(HAVE_WBEM AND NOT WINCE)
++endif(WIN32)
++
++set_source_files_properties( org.freedesktop.PowerManagement.xml
++                             org.freedesktop.PowerManagement.Inhibit.xml
++                             org.kde.Solid.PowerManagement.PolicyAgent.xml
++                             PROPERTIES NO_NAMESPACE TRUE)
++
++qt4_add_dbus_interfaces(solid_LIB_SRCS org.freedesktop.PowerManagement.xml
++                        org.freedesktop.PowerManagement.Inhibit.xml
++                        org.kde.Solid.PowerManagement.PolicyAgent.xml)
++
++qt4_add_dbus_interface(solid_LIB_SRCS org.kde.Solid.Networking.Client.xml
++                       org_kde_solid_networking_client)
++
++set(solid_OPTIONAL_LIBS)
++
++if(WIN32)
++   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${KDEWIN_LIBRARY})
++   if(HAVE_WBEM)
++      set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${WBEM_LIBRARIES})
++   endif(HAVE_WBEM)
++endif(WIN32)
++
++if(APPLE)
++   set(solid_OPTIONAL_LIBS ${IOKIT_LIBRARY})
++endif(APPLE)
++
++kde4_add_library(solid ${LIBRARY_TYPE} ${solid_LIB_SRCS})
++
++if ( HUPNP_FOUND )
++   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${HUPNP_LIBS})
++endif( HUPNP_FOUND )
++
++if ( UDEV_FOUND )
++   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${UDEV_LIBS})
++endif ( UDEV_FOUND )
++
++target_link_libraries(solid ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTGUI_LIBRARY} ${solid_OPTIONAL_LIBS} )
++target_link_libraries(solid LINK_INTERFACE_LIBRARIES ${QT_CORE_LIBRARY} )
++
++if (WINCE)
++   target_link_libraries(solid ${WCECOMPAT_LIBRARIES})
++endif(WINCE)
++
++set_target_properties(solid PROPERTIES
++   VERSION ${GENERIC_LIB_VERSION}
++   SOVERSION ${GENERIC_LIB_SOVERSION}
++)
++install(TARGETS solid EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
++
++install(FILES org.kde.Solid.Networking.Client.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
++install(FILES org.kde.Solid.PowerManagement.PolicyAgent.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
++install(FILES org.freedesktop.PowerManagement.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
++install(FILES org.freedesktop.PowerManagement.Inhibit.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR})
++
++########### static lib for tests  ###############
++
++kde4_add_library(solid_static STATIC ${solid_LIB_SRCS})
++
++target_link_libraries(solid_static ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTGUI_LIBRARY} ${solid_OPTIONAL_LIBS})
++
++if(WIN32)
++   set_target_properties(solid_static PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
++endif(WIN32)
++########### install files ###############
++
++install( FILES ${CMAKE_CURRENT_BINARY_DIR}/solid_export.h solidnamespace.h device.h
++               devicenotifier.h deviceinterface.h genericinterface.h processor.h block.h
++               storageaccess.h storagedrive.h opticaldrive.h storagevolume.h opticaldisc.h
++               camera.h portablemediaplayer.h networkinterface.h acadapter.h battery.h
++               button.h audiointerface.h dvbinterface.h predicate.h powermanagement.h
++               networking.h video.h serialinterface.h smartcardreader.h internetgateway.h
++               networkshare.h DESTINATION ${INCLUDE_INSTALL_DIR}/solid COMPONENT Devel)
++
++########### parser build ###############
++
++set(lexer_FILE predicate_lexer)
++set(parser_FILE predicate_parser)
++
++find_package(Flex)
++macro_log_feature(FLEX_FOUND
++   "Flex"
++   "Allows the Solid predicate parser to be updated"
++   "http://flex.sourceforge.net"
++   FALSE
++   ""
++   "Required by the UpdateSolidPredicateParser target (mainly useful for developers)")
++
++find_program(BISON_EXECUTABLE bison)
++macro_log_feature(BISON_EXECUTABLE
++   "Bison"
++   "Allows the Solid predicate parser to be updated"
++   "http://www.gnu.org/software/bison"
++   FALSE
++   ""
++   "Required by the UpdateSolidPredicateParser target (mainly useful for developers)")
++mark_as_advanced(BISON_EXECUTABLE)      # don't show it in the simple view in cmake-gui/ccmake
++
++if (FLEX_EXECUTABLE AND BISON_EXECUTABLE)
++
++   add_custom_target(UpdateSolidPredicateParser
++                     COMMAND ${FLEX_EXECUTABLE} -P Solid -o${lexer_FILE}.c ${lexer_FILE}.l
++                     COMMAND ${BISON_EXECUTABLE} -p Solid -d -b ${parser_FILE} ${parser_FILE}.y
++                     COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.c ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.c
++                     COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.h ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.h
++                     COMMAND ${CMAKE_COMMAND} -E remove ${parser_FILE}.tab.c ${parser_FILE}.tab.h
++                     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
++
++else (FLEX_EXECUTABLE AND BISON_EXECUTABLE)
++   add_custom_target(UpdateSolidPredicateParser
++                     COMMAND echo "flex and/or bison not found, so target UpdateSolidPredicateParser inactive")
++endif (FLEX_EXECUTABLE AND BISON_EXECUTABLE)
++
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.cpp	2012-06-27 21:52:42.084597220 +0200
+@@ -0,0 +1,26 @@
++/*
++ * This file was generated by qdbusxml2cpp version 0.7
++ * Command line was: qdbusxml2cpp -p manager manager.xml
++ *
++ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
++ *
++ * This is an auto-generated file.
++ * This file may have been hand-edited. Look for HAND-EDIT comments
++ * before re-generating it.
++ */
++
++#include "manager.h"
++
++/*
++ * Implementation of interface class OrgFreedesktopDBusObjectManagerInterface
++ */
++
++OrgFreedesktopDBusObjectManagerInterface::OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
++    : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
++{
++}
++
++OrgFreedesktopDBusObjectManagerInterface::~OrgFreedesktopDBusObjectManagerInterface()
++{
++}
++
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.h kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.h	2012-06-27 21:52:42.084597220 +0200
+@@ -0,0 +1,59 @@
++/*
++ * This file was generated by qdbusxml2cpp version 0.7
++ * Command line was: qdbusxml2cpp -p manager manager.xml
++ *
++ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
++ *
++ * This is an auto-generated file.
++ * Do not edit! All changes made to it will be lost.
++ */
++
++#ifndef MANAGER_H_1329493525
++#define MANAGER_H_1329493525
++
++#include <QtCore/QObject>
++#include <QtCore/QByteArray>
++#include <QtCore/QList>
++#include <QtCore/QMap>
++#include <QtCore/QString>
++#include <QtCore/QStringList>
++#include <QtCore/QVariant>
++#include <QtDBus/QtDBus>
++
++#include "../udisks2.h"
++
++/*
++ * Proxy class for interface org.freedesktop.DBus.ObjectManager
++ */
++class OrgFreedesktopDBusObjectManagerInterface: public QDBusAbstractInterface
++{
++    Q_OBJECT
++public:
++    static inline const char *staticInterfaceName()
++    { return "org.freedesktop.DBus.ObjectManager"; }
++
++public:
++    OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
++
++    ~OrgFreedesktopDBusObjectManagerInterface();
++
++public Q_SLOTS: // METHODS
++    inline QDBusPendingReply<DBUSManagerStruct> GetManagedObjects()
++    {
++        QList<QVariant> argumentList;
++        return asyncCallWithArgumentList(QLatin1String("GetManagedObjects"), argumentList);
++    }
++
++Q_SIGNALS: // SIGNALS
++    void InterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void InterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++};
++
++namespace org {
++  namespace freedesktop {
++    namespace DBus {
++      typedef ::OrgFreedesktopDBusObjectManagerInterface ObjectManager;
++    }
++  }
++}
++#endif
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.xml kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.xml
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/dbus/manager.xml	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/dbus/manager.xml	2012-06-27 21:52:42.085597220 +0200
+@@ -0,0 +1,21 @@
++<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
++                      "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
++<node>
++  <interface name="org.freedesktop.DBus.ObjectManager">
++    <method name="GetManagedObjects">
++      <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out">
++        <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBUSManagerStruct"/>
++      </arg>
++    </method>
++    <signal name="InterfacesAdded">
++      <arg type="o" name="object_path"/>
++      <arg type="a{sa{sv}}" name="interfaces_and_properties">
++        <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QVariantMapMap"/>
++      </arg>
++    </signal>
++    <signal name="InterfacesRemoved">
++      <arg type="o" name="object_path"/>
++      <arg type="as" name="interfaces"/>
++    </signal>
++  </interface>
++</node>
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisks2.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisks2.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisks2.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisks2.h	2012-06-27 21:52:42.085597220 +0200
+@@ -0,0 +1,77 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef SOLID_BACKENDS_UDISKS2_H
++#define SOLID_BACKENDS_UDISKS2_H
++
++#include <QMetaType>
++#include <QtDBus>
++#include <QVariant>
++#include <QMap>
++#include <QList>
++
++typedef QList<QByteArray> QByteArrayList;
++Q_DECLARE_METATYPE(QByteArrayList)
++
++typedef QMap<QString,QVariantMap> QVariantMapMap;
++Q_DECLARE_METATYPE(QVariantMapMap)
++
++typedef QMap<QDBusObjectPath, QVariantMapMap> DBUSManagerStruct;
++Q_DECLARE_METATYPE(DBUSManagerStruct)
++
++/* UDisks2 */
++#define UD2_DBUS_SERVICE                 "org.freedesktop.UDisks2"
++#define UD2_DBUS_PATH                    "/org/freedesktop/UDisks2"
++#define UD2_UDI_DISKS_PREFIX             "/org/freedesktop/UDisks2"
++#define UD2_DBUS_PATH_MANAGER            "/org/freedesktop/UDisks2/Manager"
++#define UD2_DBUS_PATH_DRIVES             "/org/freedesktop/UDisks2/drives/"
++#define UD2_DBUS_PATH_JOBS               "/org/freedesktop/UDisks2/jobs/"
++#define DBUS_INTERFACE_PROPS             "org.freedesktop.DBus.Properties"
++#define DBUS_INTERFACE_INTROSPECT        "org.freedesktop.DBus.Introspectable"
++#define DBUS_INTERFACE_MANAGER           "org.freedesktop.DBus.ObjectManager"
++#define UD2_DBUS_INTERFACE_BLOCK         "org.freedesktop.UDisks2.Block"
++#define UD2_DBUS_INTERFACE_DRIVE         "org.freedesktop.UDisks2.Drive"
++#define UD2_DBUS_INTERFACE_PARTITION     "org.freedesktop.UDisks2.Partition"
++#define UD2_DBUS_INTERFACE_PARTITIONTABLE   "org.freedesktop.UDisks2.PartitionTable"
++#define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
++#define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
++#define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
++
++/* errors */
++#define UD2_ERROR_UNAUTHORIZED            "org.freedesktop.PolicyKit.Error.NotAuthorized"
++#define UD2_ERROR_BUSY                    "org.freedesktop.UDisks2.Error.DeviceBusy"
++#define UD2_ERROR_FAILED                  "org.freedesktop.UDisks2.Error.Failed"
++#define UD2_ERROR_CANCELED                "org.freedesktop.UDisks2.Error.Cancelled"
++#define UD2_ERROR_INVALID_OPTION          "org.freedesktop.UDisks2.Error.OptionNotPermitted"
++#define UD2_ERROR_MISSING_DRIVER          "org.freedesktop.UDisks2.Error.NotSupported"
++
++#define UD2_ERROR_ALREADY_MOUNTED         "org.freedesktop.UDisks2.Error.AlreadyMounted"
++#define UD2_ERROR_NOT_MOUNTED             "org.freedesktop.UDisks2.Error.NotMounted"
++#define UD2_ERROR_MOUNTED_BY_OTHER_USER   "org.freedesktop.UDisks2.Error.MountedByOtherUser"
++#define UD2_ERROR_ALREADY_UNMOUNTING      "org.freedesktop.UDisks2.Error.AlreadyUnmounting"
++#define UD2_ERROR_TIMED_OUT               "org.freedesktop.UDisks2.Error.Timedout"
++#define UD2_ERROR_WOULD_WAKEUP            "org.freedesktop.UDisks2.Error.WouldWakeup"
++#define UD2_ERROR_ALREADY_CANCELLED       "org.freedesktop.UDisks2.Error.AlreadyCancelled"
++
++#define UD2_ERROR_NOT_AUTHORIZED          "org.freedesktop.UDisks2.Error.NotAuthorized"
++#define UD2_ERROR_NOT_AUTHORIZED_CAN_OBTAIN  "org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain"
++#define UD2_ERROR_NOT_AUTHORIZED_DISMISSED   "org.freedesktop.UDisks2.Error.NotAuthorizedDismissed"
++
++#endif // SOLID_BACKENDS_UDISKS2_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.cpp	2012-06-27 21:52:42.085597220 +0200
+@@ -0,0 +1,84 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <linux/kdev_t.h>
++
++#include <QFile>
++#include <QtDBus/QDBusConnection>
++#include <QtDBus/QDBusPendingReply>
++
++#include "udisksblock.h"
++#include "dbus/manager.h"
++
++using namespace Solid::Backends::UDisks2;
++
++Block::Block(Device *dev)
++    : DeviceInterface(dev)
++{
++    m_devNum = m_device->prop("DeviceNumber").toULongLong();
++    m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
++
++    // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
++    if (m_devNum == 0 || m_devFile.isEmpty()) {
++        org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
++        QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
++        reply.waitForFinished();
++        if (!reply.isError()) {  // enum devices
++            Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
++                const QString udi = path.path();
++
++                if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                    continue;
++
++                Device device(udi);
++                if (device.drivePath() == dev->udi()) {
++                    m_devNum = device.prop("DeviceNumber").toULongLong();
++                    m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
++                    break;
++                }
++            }
++        }
++        else  // show error
++        {
++            qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++        }
++    }
++
++    //qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
++}
++
++Block::~Block()
++{
++}
++
++QString Block::device() const
++{
++    return m_devFile;
++}
++
++int Block::deviceMinor() const
++{
++    return MINOR(m_devNum);
++}
++
++int Block::deviceMajor() const
++{
++    return MAJOR(m_devNum);
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksblock.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksblock.h	2012-06-27 21:52:42.086597220 +0200
+@@ -0,0 +1,56 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2BLOCK_H
++#define UDISKS2BLOCK_H
++
++#include <solid/ifaces/block.h>
++#include "udisksdeviceinterface.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Block: public DeviceInterface, virtual public Solid::Ifaces::Block
++{
++
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::Block)
++
++public:
++    Block(Device *dev);
++    virtual ~Block();
++
++    virtual QString device() const;
++    virtual int deviceMinor() const;
++    virtual int deviceMajor() const;
++private:
++    dev_t m_devNum;
++    QString m_devFile;
++};
++
++}
++}
++}
++
++#endif // UDISKS2BLOCK_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.cpp	2012-06-27 21:52:42.087597220 +0200
+@@ -0,0 +1,910 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksdevice.h"
++#include "udisksblock.h"
++#include "udisksdeviceinterface.h"
++#include "udisksstoragevolume.h"
++#include "udisksopticaldisc.h"
++#include "udisksopticaldrive.h"
++#include "udisksstorageaccess.h"
++#include "udisksgenericinterface.h"
++
++#include <solid/genericinterface.h>
++#include <solid/deviceinterface.h>
++#include <solid/device.h>
++
++#include <QtCore/QDebug>
++
++#include <QtDBus/QDBusMessage>
++#include <QtDBus/QDBusMetaType>
++#include <QtDBus/QDBusPendingReply>
++#include <QtDBus/QDBusArgument>
++
++#include <QtXml/QDomDocument>
++
++using namespace Solid::Backends::UDisks2;
++
++// Adapted from KLocale as Solid needs to be Qt-only
++static QString formatByteSize(double size)
++{
++    // Per IEC 60027-2
++
++    // Binary prefixes
++    //Tebi-byte             TiB             2^40    1,099,511,627,776 bytes
++    //Gibi-byte             GiB             2^30    1,073,741,824 bytes
++    //Mebi-byte             MiB             2^20    1,048,576 bytes
++    //Kibi-byte             KiB             2^10    1,024 bytes
++
++    QString s;
++    // Gibi-byte
++    if ( size >= 1073741824.0 )
++    {
++        size /= 1073741824.0;
++        if ( size > 1024 ) // Tebi-byte
++            s = QObject::tr("%1 TiB").arg(QLocale().toString(size / 1024.0, 'f', 1));
++        else
++            s = QObject::tr("%1 GiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Mebi-byte
++    else if ( size >= 1048576.0 )
++    {
++        size /= 1048576.0;
++        s = QObject::tr("%1 MiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Kibi-byte
++    else if ( size >= 1024.0 )
++    {
++        size /= 1024.0;
++        s = QObject::tr("%1 KiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Just byte
++    else if ( size > 0 )
++    {
++        s = QObject::tr("%1 B").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Nothing
++    else
++    {
++        s = QObject::tr("0 B");
++    }
++    return s;
++}
++
++Device::Device(const QString &udi)
++    : Solid::Ifaces::Device()
++    , m_udi(udi)
++{
++    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
++                                  QString(), // no interface, we aggregate them
++                                  QDBusConnection::systemBus());
++
++    if (m_device->isValid()) {
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                             SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
++
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
++                                             this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
++                                             this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
++
++        initInterfaces();
++    }
++}
++
++Device::~Device()
++{
++    delete m_device;
++}
++
++QObject* Device::createDeviceInterface(const Solid::DeviceInterface::Type& type)
++{
++    if (!queryDeviceInterface(type)) {
++        return 0;
++    }
++
++    DeviceInterface *iface = 0;
++    switch (type)
++    {
++    case Solid::DeviceInterface::GenericInterface:
++        iface = new GenericInterface(this);
++        break;
++    case Solid::DeviceInterface::Block:
++        iface = new Block(this);
++        break;
++    case Solid::DeviceInterface::StorageAccess:
++        iface = new StorageAccess(this);
++        break;
++    case Solid::DeviceInterface::StorageDrive:
++        iface = new StorageDrive(this);
++        break;
++    case Solid::DeviceInterface::OpticalDrive:
++        iface = new OpticalDrive(this);
++        break;
++    case Solid::DeviceInterface::StorageVolume:
++        iface = new StorageVolume(this);
++        break;
++    case Solid::DeviceInterface::OpticalDisc:
++        iface = new OpticalDisc(this);
++        break;
++    default:
++        break;
++    }
++    return iface;
++}
++
++bool Device::queryDeviceInterface(const Solid::DeviceInterface::Type& type) const
++{
++    switch (type) {
++    case Solid::DeviceInterface::GenericInterface:
++        return true;
++    case Solid::DeviceInterface::Block:
++        return isBlock();
++    case Solid::DeviceInterface::StorageVolume:
++        return isStorageVolume();
++    case Solid::DeviceInterface::StorageAccess:
++        return isStorageAccess();
++    case Solid::DeviceInterface::StorageDrive:
++        return isDrive();
++    case Solid::DeviceInterface::OpticalDrive:
++        return isOpticalDrive();
++    case Solid::DeviceInterface::OpticalDisc:
++        return isOpticalDisc();
++    default:
++        return false;
++    }
++}
++
++QStringList Device::emblems() const
++{
++    QStringList res;
++
++    if (queryDeviceInterface(Solid::DeviceInterface::StorageAccess))
++    {
++        const UDisks2::StorageAccess accessIface(const_cast<Device *>(this));
++        if (accessIface.isAccessible())
++        {
++            if (isEncryptedContainer())
++                res << "emblem-encrypted-unlocked";
++            else
++                res << "emblem-mounted";
++        }
++        else
++        {
++            if (isEncryptedContainer())
++                res << "emblem-encrypted-locked";
++            else
++                res << "emblem-unmounted";
++        }
++    }
++
++    return res;
++}
++
++QString Device::description() const
++{
++    const QString hintName = prop("HintName").toString();
++    if (!hintName.isEmpty())
++        return hintName;
++
++    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
++        return storageDescription();
++    else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
++        return volumeDescription();
++    else
++        return product();
++}
++
++QString Device::storageDescription() const
++{
++    QString description;
++    const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
++    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
++    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++
++    if (drive_type == Solid::StorageDrive::CdromDrive)
++    {
++        const UDisks2::OpticalDrive opticalDrive(const_cast<Device*>(this));
++        Solid::OpticalDrive::MediumTypes mediumTypes = opticalDrive.supportedMedia();
++        QString first;
++        QString second;
++
++        first = QObject::tr("CD-ROM", "First item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Cdr)
++            first = QObject::tr("CD-R", "First item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Cdrw)
++            first = QObject::tr("CD-RW", "First item of %1%2 Drive sentence");
++
++        if (mediumTypes & Solid::OpticalDrive::Dvd)
++            second = QObject::tr("/DVD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdplusr)
++            second = QObject::tr("/DVD+R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdplusrw)
++            second = QObject::tr("/DVD+RW", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdr)
++            second = QObject::tr("/DVD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdrw)
++            second = QObject::tr("/DVD-RW", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdram)
++            second = QObject::tr("/DVD-RAM", "Second item of %1%2 Drive sentence");
++        if ((mediumTypes & Solid::OpticalDrive::Dvdr) && (mediumTypes & Solid::OpticalDrive::Dvdplusr))
++        {
++            if(mediumTypes & Solid::OpticalDrive::Dvdplusdl)
++                second = QObject::trUtf8("/DVD±R DL", "Second item of %1%2 Drive sentence");
++            else
++                second = QObject::trUtf8("/DVD±R", "Second item of %1%2 Drive sentence");
++        }
++        if ((mediumTypes & Solid::OpticalDrive::Dvdrw) && (mediumTypes & Solid::OpticalDrive::Dvdplusrw))
++        {
++            if((mediumTypes & Solid::OpticalDrive::Dvdplusdl) || (mediumTypes & Solid::OpticalDrive::Dvdplusdlrw))
++                second = QObject::trUtf8("/DVD±RW DL", "Second item of %1%2 Drive sentence");
++            else
++                second = QObject::trUtf8("/DVD±RW", "Second item of %1%2 Drive sentence");
++        }
++        if (mediumTypes & Solid::OpticalDrive::Bd)
++            second = QObject::tr("/BD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Bdr)
++            second = QObject::tr("/BD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Bdre)
++            second = QObject::tr("/BD-RE", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvd)
++            second = QObject::tr("/HD DVD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvdr)
++            second = QObject::tr("/HD DVD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvdrw)
++            second = QObject::tr("/HD DVD-RW", "Second item of %1%2 Drive sentence");
++
++        if (drive_is_hotpluggable)
++            description = QObject::tr("External %1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
++        else
++            description = QObject::tr("%1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
++
++        return description;
++    }
++
++    if (drive_type == Solid::StorageDrive::Floppy)
++    {
++        if (drive_is_hotpluggable)
++            description = QObject::tr("External Floppy Drive");
++        else
++            description = QObject::tr("Floppy Drive");
++
++        return description;
++    }
++
++    bool drive_is_removable = storageDrive.isRemovable();
++
++    if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
++    {
++        QString size_str = formatByteSize(storageDrive.size());
++        if (!size_str.isEmpty())
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
++            else
++                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
++        } else {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("External Hard Drive");
++            else
++                description = QObject::tr("Hard Drive");
++        }
++
++        return description;
++    }
++
++    QString vendormodel_str;
++    QString model = product();
++    QString vendor_str = vendor();
++
++    if (vendor_str.isEmpty())
++    {
++        if (!model.isEmpty())
++            vendormodel_str = model;
++    }
++    else
++    {
++        if (model.isEmpty())
++            vendormodel_str = vendor_str;
++        else
++        {
++            if (model.startsWith(vendor_str))
++            {
++                // e.g. vendor is "Nokia" and model is "Nokia N950" we do not want "Nokia Nokia N950" as description
++                vendormodel_str = model;
++            }
++            else
++            {
++                vendormodel_str = QObject::tr("%1 %2", "%1 is the vendor, %2 is the model of the device").arg(vendor_str).arg(model);
++            }
++        }
++    }
++
++    if (vendormodel_str.isEmpty())
++        description = QObject::tr("Drive");
++    else
++        description = vendormodel_str;
++
++    return description;
++}
++
++QString Device::volumeDescription() const
++{
++    QString description;
++    const UDisks2::StorageVolume storageVolume(const_cast<Device*>(this));
++    QString volume_label = prop("IdLabel").toString();
++    if (volume_label.isEmpty())
++        volume_label = prop("Name").toString();
++    if (!volume_label.isEmpty())
++        return volume_label;
++
++    UDisks2::Device storageDevice(drivePath());
++    const UDisks2::StorageDrive storageDrive(&storageDevice);
++    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
++
++    // Handle media in optical drives
++    if (drive_type == Solid::StorageDrive::CdromDrive)
++    {
++        const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
++        switch (disc.discType())
++        {
++            case Solid::OpticalDisc::UnknownDiscType:
++            case Solid::OpticalDisc::CdRom:
++                description = QObject::tr("CD-ROM");
++                break;
++
++            case Solid::OpticalDisc::CdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank CD-R");
++                else
++                    description = QObject::tr("CD-R");
++                break;
++
++            case Solid::OpticalDisc::CdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank CD-RW");
++                else
++                    description = QObject::tr("CD-RW");
++                break;
++
++            case Solid::OpticalDisc::DvdRom:
++                description = QObject::tr("DVD-ROM");
++                break;
++
++            case Solid::OpticalDisc::DvdRam:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-RAM");
++                else
++                    description = QObject::tr("DVD-RAM");
++                break;
++
++            case Solid::OpticalDisc::DvdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-R");
++                else
++                    description = QObject::tr("DVD-R");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRecordableDuallayer:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+R Dual-Layer");
++                else
++                    description = QObject::tr("DVD+R Dual-Layer");
++                break;
++
++            case Solid::OpticalDisc::DvdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-RW");
++                else
++                    description = QObject::tr("DVD-RW");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+R");
++                else
++                    description = QObject::tr("DVD+R");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+RW");
++                else
++                    description = QObject::tr("DVD+RW");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRewritableDuallayer:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+RW Dual-Layer");
++                else
++                    description = QObject::tr("DVD+RW Dual-Layer");
++                break;
++
++            case Solid::OpticalDisc::BluRayRom:
++                description = QObject::tr("BD-ROM");
++                break;
++
++            case Solid::OpticalDisc::BluRayRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank BD-R");
++                else
++                    description = QObject::tr("BD-R");
++                break;
++
++            case Solid::OpticalDisc::BluRayRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank BD-RE");
++                else
++                    description = QObject::tr("BD-RE");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRom:
++                description = QObject::tr("HD DVD-ROM");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank HD DVD-R");
++                else
++                    description = QObject::tr("HD DVD-R");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank HD DVD-RW");
++                else
++                    description = QObject::tr("HD DVD-RW");
++                break;
++            }
++
++        // Special case for pure audio disc
++        if (disc.availableContent() == Solid::OpticalDisc::Audio)
++            description = QObject::tr("Audio CD");
++
++        return description;
++    }
++
++    const bool drive_is_removable = storageDrive.isRemovable();
++    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++
++    QString size_str = formatByteSize(storageVolume.size());
++    if (isEncryptedContainer())
++    {
++        if (!size_str.isEmpty())
++            description = QObject::tr("%1 Encrypted Container", "%1 is the size").arg(size_str);
++        else
++            description = QObject::tr("Encrypted Container");
++    }
++    else if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
++    {
++        if (!size_str.isEmpty())
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
++            else
++                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
++        }
++        else
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("External Hard Drive");
++            else
++                description = QObject::tr("Hard Drive");
++        }
++    }
++    else
++    {
++        if (drive_is_removable)
++            description = QObject::tr("%1 Removable Media", "%1 is the size").arg(size_str);
++        else
++            description = QObject::tr("%1 Media", "%1 is the size").arg(size_str);
++    }
++
++    return description;
++}
++
++QString Device::icon() const
++{
++    QString iconName = prop( "HintIconName" ).toString();
++
++    if ( !iconName.isEmpty() )
++    {
++        return iconName;
++    }
++    else if (isDrive()) {
++        const bool isRemovable = prop("Removable").toBool();
++        const QString conn = prop("ConnectionBus").toString();
++
++        if (isOpticalDrive())
++            return "drive-optical";
++        else if (isRemovable && !isOpticalDisc()) {
++            if (conn == "usb")
++                return "drive-removable-media-usb";
++            else
++                return "drive-removable-media";
++        }
++    }
++    else if (isBlock()) {
++        Device drive(drivePath());
++
++        // handle media
++        const QString media = drive.prop("Media").toString();
++
++        if ( !media.isEmpty() )
++        {
++            if ( isOpticalDisc() )    // optical stuff
++            {
++                bool isWritable = drive.prop("OpticalBlank").toBool();
++
++                const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
++                Solid::OpticalDisc::ContentTypes availContent = disc.availableContent();
++
++                if (availContent & Solid::OpticalDisc::VideoDvd) // Video DVD
++                    return "media-optical-dvd-video";
++                else if ((availContent & Solid::OpticalDisc::VideoCd) || (availContent & Solid::OpticalDisc::SuperVideoCd)) // Video CD
++                    return "media-optical-video";
++                else if ((availContent & Solid::OpticalDisc::Data) && (availContent & Solid::OpticalDisc::Audio)) // Mixed CD
++                    return "media-optical-mixed-cd";
++                else if (availContent & Solid::OpticalDisc::Audio) // Audio CD
++                    return "media-optical-audio";
++                else if (availContent & Solid::OpticalDisc::Data) // Data CD
++                    return "media-optical-data";
++                else if ( isWritable )
++                    return "media-optical-recordable";
++                else
++                {
++                    if ( media.startsWith( "optical_dvd" ) || media.startsWith( "optical_hddvd" ) ) // DVD
++                        return "media-optical-dvd";
++                    else if ( media.startsWith( "optical_bd" ) ) // BluRay
++                        return "media-optical-blu-ray";
++                }
++
++                // fallback for every other optical disc
++                return "media-optical";
++            }
++
++            if ( media == "flash_ms" ) // Flash & Co.
++                return "media-flash-memory-stick";
++            else if ( media == "flash_sd" || media == "flash_sdhc" || media == "flash_sdxc" || media == "flash_mmc" )
++                return "media-flash-sd-mmc";
++            else if ( media == "flash_sm" )
++                return "media-flash-smart-media";
++            else if ( media == "thumb" )
++                return "drive-removable-media-usb-pendrive";
++            else if ( media.startsWith( "flash" ) )
++                return "media-flash";
++            else if ( media == "floppy" ) // the good ol' floppy
++                return "media-floppy";
++        }
++
++        if (drive.prop("ConnectionBus").toString() == "sdio")  // hack for SD cards connected thru sdio bus
++            return "media-flash-sd-mmc";
++
++        return drive.icon();
++    }
++
++    return "drive-harddisk";    // general fallback
++}
++
++QString Device::product() const
++{
++    QString product = prop("Model").toString();
++
++    if (!isDrive()) {
++        QString label = prop("IdLabel").toString();
++        if (!label.isEmpty()) {
++            product = label;
++        }
++    }
++
++    return product;
++}
++
++QString Device::vendor() const
++{
++    return prop("Vendor").toString();
++}
++
++QString Device::udi() const
++{
++    return m_udi;
++}
++
++QString Device::parentUdi() const
++{
++    QString parent;
++
++    if (isEncryptedContainer())
++        parent = prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
++    else if (propertyExists("Drive"))  // block
++        parent = prop("Drive").value<QDBusObjectPath>().path();
++    else if (propertyExists("Table"))  // partition
++        parent = prop("Table").value<QDBusObjectPath>().path();
++    else if (parent.isEmpty() || parent=="/") {
++        parent = UD2_UDI_DISKS_PREFIX;
++    }
++    return parent;
++}
++
++void Device::checkCache(const QString &key) const
++{
++    if (m_cache.isEmpty()) // recreate the cache
++        allProperties();
++
++    if (m_cache.contains(key))
++        return;
++
++    QVariant reply = m_device->property(key.toUtf8());
++
++    if (reply.isValid()) {
++        m_cache.insert(key, reply);
++    } else {
++        //qDebug() << "got invalid reply for cache:" << key;
++        //m_cache.insert(key, QVariant());
++    }
++}
++
++QString Device::introspect() const
++{
++    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
++                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
++    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
++    reply.waitForFinished();
++
++    if (reply.isValid())
++        return reply.value();
++    else {
++        return QString();
++    }
++}
++
++QVariant Device::prop(const QString &key) const
++{
++    checkCache(key);
++    return m_cache.value(key);
++}
++
++bool Device::propertyExists(const QString &key) const
++{
++    checkCache(key);
++    return m_cache.contains(key);
++}
++
++QVariantMap Device::allProperties() const
++{
++    Q_FOREACH (const QString & iface, m_interfaces) {
++        if (iface.startsWith("org.freedesktop.DBus"))
++            continue;
++        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
++        call << iface;
++        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
++        reply.waitForFinished();
++
++        if (reply.isValid())
++            m_cache.unite(reply.value());
++        else
++            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
++        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
++    }
++
++    return m_cache;
++}
++
++bool Device::hasInterface(const QString &name) const
++{
++    return m_interfaces.contains(name);
++}
++
++QStringList Device::interfaces() const
++{
++    return m_interfaces;
++}
++
++void Device::initInterfaces()
++{
++    m_interfaces.clear();
++    const QString xmlData = introspect();
++    QDomDocument dom;
++    dom.setContent(xmlData);
++    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
++    for (int i = 0; i < ifaceNodeList.count(); i++) {
++        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
++        if (!ifaceElem.isNull())
++            m_interfaces.append(ifaceElem.attribute("name"));
++    }
++    //qDebug() << "Device" << m_udi << "has interfaces:" << m_interfaces;
++}
++
++void Device::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    //Q_UNUSED(ifaceName);
++
++    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
++
++    QMap<QString, int> changeMap;
++
++    Q_FOREACH(const QString & key, invalidatedProps) {
++        m_cache.remove(key);
++        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
++        qDebug() << "\t invalidated:" << key;
++    }
++
++    QMapIterator<QString, QVariant> i(changedProps);
++    while (i.hasNext()) {
++        i.next();
++        const QString key = i.key();
++        m_cache.insert(key, i.value());  // replace the value
++        changeMap.insert(key, Solid::GenericInterface::PropertyModified);
++        qDebug() << "\t modified:" << key << ":" << m_cache.value(key);
++    }
++
++    Q_EMIT propertyChanged(changeMap);
++    Q_EMIT changed();
++}
++
++void Device::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
++{
++    if (object_path.path() == m_udi) {
++        m_interfaces.append(interfaces_and_properties.keys());
++    }
++}
++
++void Device::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
++{
++    if (object_path.path() == m_udi) {
++        Q_FOREACH(const QString & iface, interfaces) {
++            m_interfaces.removeAll(iface);
++        }
++    }
++}
++
++
++QString Device::errorToString(const QString & error) const
++{
++    if (error == UD2_ERROR_UNAUTHORIZED || error == UD2_ERROR_NOT_AUTHORIZED)
++        return QObject::tr("You are not authorized to perform this operation");
++    else if (error == UD2_ERROR_BUSY)
++        return QObject::tr("The device is currently busy");
++    else if (error == UD2_ERROR_FAILED)
++        return QObject::tr("The requested operation has failed");
++    else if (error == UD2_ERROR_CANCELED)
++        return QObject::tr("The requested operation has been canceled");
++    else if (error == UD2_ERROR_INVALID_OPTION)
++        return QObject::tr("An invalid or malformed option has been given");
++    else if (error == UD2_ERROR_MISSING_DRIVER)
++        return QObject::tr("The kernel driver for this filesystem type is not available");
++    else if (error == UD2_ERROR_ALREADY_MOUNTED)
++        return QObject::tr("The device is already mounted");
++    else if (error == UD2_ERROR_NOT_MOUNTED)
++        return QObject::tr("The device is not mounted");
++    else if (error == UD2_ERROR_MOUNTED_BY_OTHER_USER)
++        return QObject::tr("The device is mounted by another user");
++    else if (error == UD2_ERROR_ALREADY_UNMOUNTING)
++        return QObject::tr("The device is already unmounting");
++    else if (error == UD2_ERROR_TIMED_OUT)
++        return QObject::tr("The operation timed out");
++    else if (error == UD2_ERROR_WOULD_WAKEUP)
++        return QObject::tr("The operation would wake up a disk that is in a deep-sleep state");
++    else if (error == UD2_ERROR_ALREADY_CANCELLED)
++        return QObject::tr("The operation has already been canceled");
++    else
++        return QObject::tr("An unspecified error has occurred");
++}
++
++Solid::ErrorType Device::errorToSolidError(const QString & error) const
++{
++    if (error == UD2_ERROR_BUSY)
++        return Solid::DeviceBusy;
++    else if (error == UD2_ERROR_FAILED)
++        return Solid::OperationFailed;
++    else if (error == UD2_ERROR_CANCELED)
++        return Solid::UserCanceled;
++    else if (error == UD2_ERROR_INVALID_OPTION)
++        return Solid::InvalidOption;
++    else if (error == UD2_ERROR_MISSING_DRIVER)
++        return Solid::MissingDriver;
++    else
++        return Solid::UnauthorizedOperation;
++}
++
++bool Device::isBlock() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_BLOCK);
++}
++
++bool Device::isPartition() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_PARTITION);
++}
++
++bool Device::isPartitionTable() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_PARTITIONTABLE);
++}
++
++bool Device::isStorageVolume() const
++{
++    return isPartition() || isPartitionTable() || isStorageAccess() || isOpticalDisc();
++}
++
++bool Device::isStorageAccess() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM) || isEncryptedContainer();
++}
++
++bool Device::isDrive() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_DRIVE);
++}
++
++bool Device::isOpticalDrive() const
++{
++    return isDrive() && !prop("MediaCompatibility").toStringList().filter("optical_").isEmpty();
++}
++
++bool Device::isOpticalDisc() const
++{
++    const QString drv = drivePath();
++    if (drv.isEmpty() || drv == "/")
++        return false;
++
++    Device drive(drv);
++    return drive.prop("Optical").toBool();
++}
++
++bool Device::mightBeOpticalDisc() const
++{
++    const QString drv = drivePath();
++    if (drv.isEmpty() || drv == "/")
++        return false;
++
++    Device drive(drv);
++    return drive.isOpticalDrive();
++}
++
++bool Device::isMounted() const
++{
++    return propertyExists("MountPoints") && !qdbus_cast<QByteArrayList>(prop("MountPoints")).isEmpty();
++}
++
++bool Device::isEncryptedContainer() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_ENCRYPTED);
++}
++
++bool Device::isEncryptedCleartext() const
++{
++    const QString holderDevice = prop("CryptoBackingDevice").toString();
++    if (holderDevice.isEmpty() || holderDevice == "/")
++        return false;
++    else
++        return true;
++}
++
++bool Device::isSwap() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_SWAP);
++}
++
++QString Device::drivePath() const
++{
++    return prop("Drive").value<QDBusObjectPath>().path();
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdevice.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdevice.h	2012-06-27 21:52:42.087597220 +0200
+@@ -0,0 +1,112 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2DEVICE_H
++#define UDISKS2DEVICE_H
++
++#include "udisks2.h"
++
++#include <ifaces/device.h>
++#include <solid/deviceinterface.h>
++#include <solid/solidnamespace.h>
++
++#include <QtDBus/QDBusInterface>
++#include <QtDBus/QDBusObjectPath>
++#include <QtCore/QStringList>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Device: public Solid::Ifaces::Device
++{
++    Q_OBJECT
++public:
++    Device(const QString &udi);
++    virtual ~Device();
++
++    virtual QObject* createDeviceInterface(const Solid::DeviceInterface::Type& type);
++    virtual bool queryDeviceInterface(const Solid::DeviceInterface::Type& type) const;
++    virtual QString description() const;
++    virtual QStringList emblems() const;
++    virtual QString icon() const;
++    virtual QString product() const;
++    virtual QString vendor() const;
++    virtual QString udi() const;
++    virtual QString parentUdi() const;
++
++    QVariant prop(const QString &key) const;
++    bool propertyExists(const QString &key) const;
++    QVariantMap allProperties() const;
++
++    bool hasInterface(const QString & name) const;
++    QStringList interfaces() const;
++
++    QString errorToString(const QString & error) const;
++    Solid::ErrorType errorToSolidError(const QString & error) const;
++
++    bool isBlock() const;
++    bool isPartition() const;
++    bool isPartitionTable() const;
++    bool isStorageVolume() const;
++    bool isStorageAccess() const;
++    bool isDrive() const;
++    bool isOpticalDrive() const;
++    bool isOpticalDisc() const;
++    bool mightBeOpticalDisc() const;
++    bool isMounted() const;
++    bool isEncryptedContainer() const;
++    bool isEncryptedCleartext() const;
++    bool isSwap() const;
++
++    QString drivePath() const;
++
++Q_SIGNALS:
++    void changed();
++    void propertyChanged(const QMap<QString,int> &changes);
++
++private Q_SLOTS:
++    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++
++private:
++    QString storageDescription() const;
++    QString volumeDescription() const;
++    mutable QDBusInterface *m_device;
++    QString m_udi;
++    mutable QVariantMap m_cache;
++
++    void initInterfaces();
++    QStringList m_interfaces;
++
++    void checkCache(const QString &key) const;
++    QString introspect() const;
++};
++
++}
++}
++}
++
++#endif // UDISKS2DEVICE_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.cpp	2012-06-27 21:52:42.088597220 +0200
+@@ -0,0 +1,33 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksdeviceinterface.h"
++
++using namespace Solid::Backends::UDisks2;
++
++DeviceInterface::DeviceInterface(Device *device)
++    : QObject(device), m_device(device)
++{
++
++}
++
++DeviceInterface::~DeviceInterface()
++{
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksdeviceinterface.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksdeviceinterface.h	2012-06-27 21:52:42.088597220 +0200
+@@ -0,0 +1,148 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2DEVICEINTERFACE_H
++#define UDISKS2DEVICEINTERFACE_H
++
++#include <ifaces/deviceinterface.h>
++#include "udisksdevice.h"
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class DeviceInterface : public QObject, virtual public Solid::Ifaces::DeviceInterface
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::DeviceInterface)
++public:
++    DeviceInterface(Device *device);
++    virtual ~DeviceInterface();
++
++protected:
++    Device *m_device;
++
++public:
++    inline static QStringList toStringList(Solid::DeviceInterface::Type type)
++    {
++        QStringList list;
++
++        switch(type)
++        {
++        case Solid::DeviceInterface::GenericInterface:
++            list << "generic";
++            break;
++        case Solid::DeviceInterface::Processor:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Block:
++            list << "block";
++            break;
++        case Solid::DeviceInterface::StorageAccess:
++            list << "volume";
++            break;
++        case Solid::DeviceInterface::StorageDrive:
++            list << "storage";
++            break;
++        case Solid::DeviceInterface::OpticalDrive:
++            list << "storage.cdrom";
++            break;
++        case Solid::DeviceInterface::StorageVolume:
++            list << "volume";
++            break;
++        case Solid::DeviceInterface::OpticalDisc:
++            list << "volume.disc";
++            break;
++        case Solid::DeviceInterface::Camera:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::PortableMediaPlayer:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::NetworkInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::AcAdapter:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Battery:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Button:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::AudioInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::DvbInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Video:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::SerialInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::InternetGateway:
++            break;
++        case Solid::DeviceInterface::SmartCardReader:
++            // Doesn't exist with UDisks
++        case Solid::DeviceInterface::NetworkShare:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Unknown:
++            break;
++        case Solid::DeviceInterface::Last:
++            break;
++        }
++
++        return list;
++    }
++
++    inline static Solid::DeviceInterface::Type fromString(const QString &capability)
++    {
++        if (capability == "generic")
++            return Solid::DeviceInterface::GenericInterface;
++        else if (capability == "block")
++            return Solid::DeviceInterface::Block;
++        else if (capability == "storage")
++            return Solid::DeviceInterface::StorageDrive;
++        else if (capability == "storage.cdrom")
++            return Solid::DeviceInterface::OpticalDrive;
++        else if (capability == "volume")
++            return Solid::DeviceInterface::StorageVolume;
++        else if (capability == "volume.disc")
++            return Solid::DeviceInterface::OpticalDisc;
++        else
++            return Solid::DeviceInterface::Unknown;
++    }
++};
++
++}
++}
++}
++
++#endif // UDISKS2DEVICEINTERFACE_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.cpp	2012-06-27 21:52:42.088597220 +0200
+@@ -0,0 +1,53 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksgenericinterface.h"
++
++#include "udisksdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++
++GenericInterface::GenericInterface(Device *device)
++    : DeviceInterface(device)
++{
++    connect(device, SIGNAL(propertyChanged(QMap<QString,int>)),
++            this, SIGNAL(propertyChanged(QMap<QString,int>)));
++}
++
++GenericInterface::~GenericInterface()
++{
++}
++
++QVariant GenericInterface::property(const QString &key) const
++{
++    return m_device->prop(key);
++}
++
++QVariantMap GenericInterface::allProperties() const
++{
++    return m_device->allProperties();
++}
++
++bool GenericInterface::propertyExists(const QString &key) const
++{
++    return m_device->propertyExists(key);
++}
++
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksgenericinterface.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksgenericinterface.h	2012-06-27 21:52:42.089597220 +0200
+@@ -0,0 +1,57 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
++#define SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
++
++#include <solid/ifaces/genericinterface.h>
++#include <solid/genericinterface.h>
++#include "udisksdeviceinterface.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++class Device;
++
++class GenericInterface : public DeviceInterface, virtual public Solid::Ifaces::GenericInterface
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::GenericInterface)
++
++public:
++    GenericInterface(Device *device);
++    virtual ~GenericInterface();
++
++    virtual QVariant property(const QString &key) const;
++    virtual QVariantMap allProperties() const;
++    virtual bool propertyExists(const QString &key) const;
++
++Q_SIGNALS:
++    void propertyChanged(const QMap<QString, int> &changes);
++    void conditionRaised(const QString &condition, const QString &reason);
++};
++}
++}
++}
++
++#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.cpp	2012-06-27 21:52:42.089597220 +0200
+@@ -0,0 +1,227 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksmanager.h"
++
++#include <QtCore/QDebug>
++#include <QtDBus>
++
++#include "../shared/rootdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++using namespace Solid::Backends::Shared;
++
++Manager::Manager(QObject *parent)
++    : Solid::Ifaces::DeviceManager(parent),
++      m_manager(UD2_DBUS_SERVICE,
++                UD2_DBUS_PATH,
++                QDBusConnection::systemBus())
++{
++    m_supportedInterfaces
++            << Solid::DeviceInterface::GenericInterface
++            << Solid::DeviceInterface::Block
++            << Solid::DeviceInterface::StorageAccess
++            << Solid::DeviceInterface::StorageDrive
++            << Solid::DeviceInterface::OpticalDrive
++            << Solid::DeviceInterface::OpticalDisc
++            << Solid::DeviceInterface::StorageVolume;
++
++    qDBusRegisterMetaType<QList<QDBusObjectPath> >();
++    qDBusRegisterMetaType<QVariantMap>();
++    qDBusRegisterMetaType<QVariantMapMap>();
++    qDBusRegisterMetaType<QByteArrayList>();
++    qDBusRegisterMetaType<DBUSManagerStruct>();
++
++    bool serviceFound = m_manager.isValid();
++    if (!serviceFound) {
++        // find out whether it will be activated automatically
++        QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus",
++                                                              "/org/freedesktop/DBus",
++                                                              "org.freedesktop.DBus",
++                                                              "ListActivatableNames");
++
++        QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
++        if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
++            QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
++            serviceFound = true;
++        }
++    }
++
++    if (serviceFound) {
++        connect(&m_manager, SIGNAL(InterfacesAdded(QDBusObjectPath, QVariantMapMap)),
++                this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
++        connect(&m_manager, SIGNAL(InterfacesRemoved(QDBusObjectPath,QStringList)),
++                this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
++    }
++}
++
++Manager::~Manager()
++{
++}
++
++QObject* Manager::createDevice(const QString& udi)
++{
++    if (udi==udiPrefix()) {
++        RootDevice *root = new RootDevice(udi);
++
++        root->setProduct(tr("Storage"));
++        root->setDescription(tr("Storage devices"));
++        root->setIcon("server-database"); // Obviously wasn't meant for that, but maps nicely in oxygen icon set :-p
++
++        return root;
++    } else if (deviceCache().contains(udi)) {
++        return new Device(udi);
++    } else {
++        return 0;
++    }
++}
++
++QStringList Manager::devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type)
++{
++    QStringList result;
++
++    if (!parentUdi.isEmpty())
++    {
++        Q_FOREACH (const QString &udi, deviceCache())
++        {
++            Device device(udi);
++            if (device.queryDeviceInterface(type) && device.parentUdi() == parentUdi)
++                result << udi;
++        }
++
++        return result;
++    }
++    else if (type != Solid::DeviceInterface::Unknown)
++    {
++        Q_FOREACH (const QString &udi, deviceCache())
++        {
++            Device device(udi);
++            if (device.queryDeviceInterface(type))
++                result << udi;
++        }
++
++        return result;
++    }
++
++    return deviceCache();
++}
++
++QStringList Manager::allDevices()
++{
++    m_deviceCache.clear();
++
++    QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
++    reply.waitForFinished();
++    if (!reply.isError()) {  // enum devices
++        m_deviceCache << udiPrefix();
++
++        Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
++            const QString udi = path.path();
++            //qDebug() << "Adding device" << udi;
++
++            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                continue;
++
++            Device device(udi);
++            if (device.mightBeOpticalDisc()) {
++                QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                                     SLOT(slotMediaChanged(QDBusMessage)));
++                if (!device.isOpticalDisc())  // skip empty CD disc
++                    continue;
++            }
++
++            m_deviceCache.append(udi);
++        }
++    }
++    else  // show error
++    {
++        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++    }
++
++    return m_deviceCache;
++}
++
++
++QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
++{
++    return m_supportedInterfaces;
++}
++
++QString Manager::udiPrefix() const
++{
++    return UD2_UDI_DISKS_PREFIX;
++}
++
++void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
++{
++    const QString udi = object_path.path();
++
++    qDebug() << udi << "has new interfaces:" << interfaces_and_properties.keys();
++
++    // new device, we don't know it yet
++    if (!m_deviceCache.contains(udi)) {
++        m_deviceCache.append(udi);
++        Q_EMIT deviceAdded(udi);
++    }
++}
++
++void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
++{
++    const QString udi = object_path.path();
++
++    qDebug() << udi << "lost interfaces:" << interfaces;
++
++    Device device(udi);
++
++    if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty() || device.interfaces().contains(UD2_DBUS_INTERFACE_FILESYSTEM))) {
++        Q_EMIT deviceRemoved(udi);
++        m_deviceCache.removeAll(udi);
++    }
++}
++
++void Manager::slotMediaChanged(const QDBusMessage & msg)
++{
++    const QVariantMap properties = qdbus_cast<QVariantMap>(msg.arguments().at(1));
++
++    if (!properties.contains("Size"))  // react only on Size changes
++        return;
++
++    const QString udi = msg.path();
++    qulonglong size = properties.value("Size").toULongLong();
++    qDebug() << "MEDIA CHANGED in" << udi << "; size is:" << size;
++
++    if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the optdisc, got inserted
++        m_deviceCache.append(udi);
++        Q_EMIT deviceAdded(udi);
++    }
++
++    if (m_deviceCache.contains(udi) && size == 0) {  // we know the optdisc, got removed
++        Q_EMIT deviceRemoved(udi);
++        m_deviceCache.removeAll(udi);
++    }
++}
++
++const QStringList & Manager::deviceCache()
++{
++    if (m_deviceCache.isEmpty())
++        allDevices();
++
++    return m_deviceCache;
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksmanager.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksmanager.h	2012-06-27 21:52:42.091597220 +0200
+@@ -0,0 +1,69 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2MANAGER_H
++#define UDISKS2MANAGER_H
++
++#include "udisks2.h"
++#include "udisksdevice.h"
++#include "dbus/manager.h"
++
++#include "solid/ifaces/devicemanager.h"
++
++#include <QtDBus/QDBusInterface>
++#include <QtCore/QSet>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Manager: public Solid::Ifaces::DeviceManager
++{
++    Q_OBJECT
++
++public:
++    Manager(QObject *parent);
++    virtual QObject* createDevice(const QString& udi);
++    virtual QStringList devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type);
++    virtual QStringList allDevices();
++    virtual QSet< Solid::DeviceInterface::Type > supportedInterfaces() const;
++    virtual QString udiPrefix() const;
++    virtual ~Manager();
++
++private Q_SLOTS:
++    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++    void slotMediaChanged(const QDBusMessage &msg);
++
++private:
++    const QStringList &deviceCache();
++    QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
++    org::freedesktop::DBus::ObjectManager m_manager;
++    QStringList m_deviceCache;
++};
++
++}
++}
++}
++#endif // UDISKS2MANAGER_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.cpp	2012-06-27 21:52:42.092597220 +0200
+@@ -0,0 +1,277 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <sys/types.h>
++#include <unistd.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++
++#include <QtCore/QFile>
++#include <QtDBus/QDBusConnection>
++
++#include "../shared/udevqtclient.h"
++
++#include "udisks2.h"
++#include "udisksopticaldisc.h"
++
++// inspired by http://cgit.freedesktop.org/hal/tree/hald/linux/probing/probe-volume.c
++static Solid::OpticalDisc::ContentType advancedDiscDetect(const QByteArray & device_file)
++{
++    /* the discs block size */
++    unsigned short bs;
++    /* the path table size */
++    unsigned short ts;
++    /* the path table location (in blocks) */
++    unsigned int tl;
++    /* length of the directory name in current path table entry */
++    unsigned char len_di = 0;
++    /* the number of the parent directory's path table entry */
++    unsigned int parent = 0;
++    /* filename for the current path table entry */
++    char dirname[256];
++    /* our position into the path table */
++    int pos = 0;
++    /* the path table record we're on */
++    int curr_record = 1;
++
++    Solid::OpticalDisc::ContentType result = Solid::OpticalDisc::NoContent;
++
++    int fd = open(device_file.constData(), O_RDONLY);
++
++    /* read the block size */
++    lseek (fd, 0x8080, SEEK_CUR);
++    if (read (fd, &bs, 2) != 2)
++    {
++        qDebug("Advanced probing on %s failed while reading block size", qPrintable(device_file));
++        goto out;
++    }
++
++    /* read in size of path table */
++    lseek (fd, 2, SEEK_CUR);
++    if (read (fd, &ts, 2) != 2)
++    {
++        qDebug("Advanced probing on %s failed while reading path table size", qPrintable(device_file));
++        goto out;
++    }
++
++    /* read in which block path table is in */
++    lseek (fd, 6, SEEK_CUR);
++    if (read (fd, &tl, 4) != 4)
++    {
++        qDebug("Advanced probing on %s failed while reading path table block", qPrintable(device_file));
++        goto out;
++    }
++
++    /* seek to the path table */
++    lseek (fd, bs * tl, SEEK_SET);
++
++    /* loop through the path table entries */
++    while (pos < ts)
++    {
++        /* get the length of the filename of the current entry */
++        if (read (fd, &len_di, 1) != 1)
++        {
++            qDebug("Advanced probing on %s failed, cannot read more entries", qPrintable(device_file));
++            break;
++        }
++
++        /* get the record number of this entry's parent
++           i'm pretty sure that the 1st entry is always the top directory */
++        lseek (fd, 5, SEEK_CUR);
++        if (read (fd, &parent, 2) != 2)
++        {
++            qDebug("Advanced probing on %s failed, couldn't read parent entry", qPrintable(device_file));
++            break;
++        }
++
++        /* read the name */
++        if (read (fd, dirname, len_di) != len_di)
++        {
++            qDebug("Advanced probing on %s failed, couldn't read the entry name", qPrintable(device_file));
++            break;
++        }
++        dirname[len_di] = 0;
++
++        /* if we found a folder that has the root as a parent, and the directory name matches
++           one of the special directories then set the properties accordingly */
++        if (parent == 1)
++        {
++            if (!strcasecmp (dirname, "VIDEO_TS"))
++            {
++                qDebug("Disc in %s is a Video DVD", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoDvd;
++                break;
++            }
++            else if (!strcasecmp (dirname, "BDMV"))
++            {
++                qDebug("Disc in %s is a Blu-ray video disc", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoBluRay;
++                break;
++            }
++            else if (!strcasecmp (dirname, "VCD"))
++            {
++                qDebug("Disc in %s is a Video CD", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoCd;
++                break;
++            }
++            else if (!strcasecmp (dirname, "SVCD"))
++            {
++                qDebug("Disc in %s is a Super Video CD", qPrintable(device_file));
++                result = Solid::OpticalDisc::SuperVideoCd;
++                break;
++            }
++        }
++
++        /* all path table entries are padded to be even,
++           so if this is an odd-length table, seek a byte to fix it */
++        if (len_di%2 == 1)
++        {
++            lseek (fd, 1, SEEK_CUR);
++            pos++;
++        }
++
++        /* update our position */
++        pos += 8 + len_di;
++        curr_record++;
++    }
++
++    close(fd);
++    return result;
++
++out:
++    /* go back to the start of the file */
++    lseek (fd, 0, SEEK_SET);
++    close(fd);
++    return result;
++}
++
++using namespace Solid::Backends::UDisks2;
++
++OpticalDisc::OpticalDisc(Device *dev)
++    : StorageVolume(dev), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
++{
++    UdevQt::Client client(this);
++    m_udevDevice = client.deviceByDeviceFile(device());
++    //qDebug() << "udev device:" << m_udevDevice.name() << "valid:" << m_udevDevice.isValid();
++    /*qDebug() << "\tProperties:" << */ m_udevDevice.deviceProperties(); // initialize the properties DB so that it doesn't crash further down, #298416
++
++    m_drive = new Device(m_device->prop("Drive").value<QDBusObjectPath>().path());
++    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_drive->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                         SLOT(slotDrivePropertiesChanged(QString,QVariantMap,QStringList)));
++}
++
++OpticalDisc::~OpticalDisc()
++{
++    delete m_drive;
++}
++
++qulonglong OpticalDisc::capacity() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++bool OpticalDisc::isRewritable() const
++{
++    // the hard way, udisks has no notion of a disc "rewritability"
++    const QString mediaType = media();
++    return mediaType == "optical_cd_rw" || mediaType == "optical_dvd_rw" || mediaType == "optical_dvd_ram" ||
++            mediaType == "optical_dvd_plus_rw" || mediaType == "optical_dvd_plus_rw_dl" ||
++            mediaType == "optical_bd_re" || mediaType == "optical_hddvd_rw";
++}
++
++bool OpticalDisc::isBlank() const
++{
++    return m_drive->prop("OpticalBlank").toBool();
++}
++
++bool OpticalDisc::isAppendable() const
++{
++    //qDebug() << "appendable prop" << m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE");
++    return m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE").toString() == QLatin1String("appendable");
++}
++
++Solid::OpticalDisc::DiscType OpticalDisc::discType() const
++{
++    QMap<Solid::OpticalDisc::DiscType, QString> map;
++    map[Solid::OpticalDisc::CdRom] = "optical_cd";
++    map[Solid::OpticalDisc::CdRecordable] = "optical_cd_r";
++    map[Solid::OpticalDisc::CdRewritable] = "optical_cd_rw";
++    map[Solid::OpticalDisc::DvdRom] = "optical_dvd";
++    map[Solid::OpticalDisc::DvdRecordable] = "optical_dvd_r";
++    map[Solid::OpticalDisc::DvdRewritable] ="optical_dvd_rw";
++    map[Solid::OpticalDisc::DvdRam] ="optical_dvd_ram";
++    map[Solid::OpticalDisc::DvdPlusRecordable] ="optical_dvd_plus_r";
++    map[Solid::OpticalDisc::DvdPlusRewritable] ="optical_dvd_plus_rw";
++    map[Solid::OpticalDisc::DvdPlusRecordableDuallayer] ="optical_dvd_plus_r_dl";
++    map[Solid::OpticalDisc::DvdPlusRewritableDuallayer] ="optical_dvd_plus_rw_dl";
++    map[Solid::OpticalDisc::BluRayRom] ="optical_bd";
++    map[Solid::OpticalDisc::BluRayRecordable] ="optical_bd_r";
++    map[Solid::OpticalDisc::BluRayRewritable] ="optical_bd_re";
++    map[Solid::OpticalDisc::HdDvdRom] ="optical_hddvd";
++    map[Solid::OpticalDisc::HdDvdRecordable] ="optical_hddvd_r";
++    map[Solid::OpticalDisc::HdDvdRewritable] ="optical_hddvd_rw";
++    // TODO add these to Solid
++    //map[Solid::OpticalDisc::MagnetoOptical] ="optical_mo";
++    //map[Solid::OpticalDisc::MountRainer] ="optical_mrw";
++    //map[Solid::OpticalDisc::MountRainerWritable] ="optical_mrw_w";
++
++    return map.key(media(), Solid::OpticalDisc::UnknownDiscType);  // FIXME optimize, lookup by value, not key
++}
++
++Solid::OpticalDisc::ContentTypes OpticalDisc::availableContent() const
++{
++    if (isBlank()) {
++        m_needsReprobe = false;
++        return Solid::OpticalDisc::NoContent;
++    }
++
++    if (m_needsReprobe) {
++        m_cachedContent = Solid::OpticalDisc::NoContent;
++        const bool hasData = m_drive->prop("OpticalNumDataTracks").toUInt() > 0;
++        const bool hasAudio = m_drive->prop("OpticalNumAudioTracks").toUInt() > 0;
++
++        if ( hasData ) {
++            m_cachedContent |= Solid::OpticalDisc::Data;
++            m_cachedContent |= advancedDiscDetect(m_device->prop("Device").toByteArray());
++        }
++        if ( hasAudio )
++            m_cachedContent |= Solid::OpticalDisc::Audio;
++
++        m_needsReprobe = false;
++    }
++
++    return m_cachedContent;
++}
++
++void OpticalDisc::slotDrivePropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    Q_UNUSED(ifaceName);
++
++    if (changedProps.keys().contains("Media") || invalidatedProps.contains("Media")) {
++        m_needsReprobe = true;
++        m_cachedContent = Solid::OpticalDisc::NoContent;
++    }
++}
++
++QString OpticalDisc::media() const
++{
++    return m_drive->prop("Media").toString();
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldisc.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-27 21:52:42.092597220 +0200
+@@ -0,0 +1,69 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2OPTICALDISC_H
++#define UDISKS2OPTICALDISC_H
++
++#include <solid/ifaces/opticaldisc.h>
++
++#include "../shared/udevqtdevice.h"
++
++#include "udisksstoragevolume.h"
++#include "udisksdevice.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class OpticalDisc: public StorageVolume, virtual public Solid::Ifaces::OpticalDisc
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::OpticalDisc)
++
++public:
++    OpticalDisc(Device *dev);
++    virtual ~OpticalDisc();
++
++    virtual qulonglong capacity() const;
++    virtual bool isRewritable() const;
++    virtual bool isBlank() const;
++    virtual bool isAppendable() const;
++    virtual Solid::OpticalDisc::DiscType discType() const;
++    virtual Solid::OpticalDisc::ContentTypes availableContent() const;
++
++private Q_SLOTS:
++    void slotDrivePropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++
++private:
++    QString media() const;
++    mutable bool m_needsReprobe;
++    mutable Solid::OpticalDisc::ContentTypes m_cachedContent;
++    Device * m_drive;
++    UdevQt::Device m_udevDevice;
++};
++
++}
++}
++}
++#endif // UDISKS2OPTICALDISC_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.cpp	2012-06-27 21:52:42.093597220 +0200
+@@ -0,0 +1,222 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <string.h>
++#include <errno.h>
++#include <unistd.h>
++#include <stdlib.h>
++
++#include <QtCore/QFile>
++#include <QtCore/QDebug>
++
++#include "udisksopticaldrive.h"
++#include "udisks2.h"
++#include "udisksdevice.h"
++#include "dbus/manager.h"
++
++using namespace Solid::Backends::UDisks2;
++
++OpticalDrive::OpticalDrive(Device *device)
++    : StorageDrive(device), m_ejectInProgress(false), m_readSpeed(0), m_writeSpeed(0), m_speedsInit(false)
++{
++    m_device->registerAction("eject", this,
++                             SLOT(slotEjectRequested()),
++                             SLOT(slotEjectDone(int, const QString&)));
++
++    connect(m_device, SIGNAL(changed()), this, SLOT(slotChanged()));
++}
++
++OpticalDrive::~OpticalDrive()
++{
++}
++
++bool OpticalDrive::eject()
++{
++    if (m_ejectInProgress)
++        return false;
++    m_ejectInProgress = true;
++    m_device->broadcastActionRequested("eject");
++
++    const QString path = m_device->udi();
++    QDBusConnection c = QDBusConnection::systemBus();
++
++    // if the device is mounted, unmount first
++    QString blockPath;
++    org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, c);
++    QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
++    reply.waitForFinished();
++    if (!reply.isError()) {  // enum devices
++        Q_FOREACH(const QDBusObjectPath &objPath, reply.value().keys()) {
++            const QString udi = objPath.path();
++
++            //qDebug() << "Inspecting" << udi;
++
++            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                continue;
++
++            Device device(udi);
++            if (device.drivePath() == path && device.isMounted()) {
++                //qDebug() << "Got mounted block device:" << udi;
++                blockPath = udi;
++                break;
++            }
++        }
++    }
++    else  // show error
++    {
++        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++    }
++
++    if (!blockPath.isEmpty()) {
++        //qDebug() << "Calling unmount on" << blockPath;
++        QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, blockPath, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
++        msg << QVariantMap();   // options, unused now
++        c.call(msg, QDBus::BlockWithGui);
++    }
++
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_DRIVE, "Eject");
++    msg << QVariantMap();
++    return c.callWithCallback(msg, this, SLOT(slotDBusReply(const QDBusMessage &)), SLOT(slotDBusError(const QDBusError &)));
++}
++
++void OpticalDrive::slotDBusReply(const QDBusMessage &/*reply*/)
++{
++    m_ejectInProgress = false;
++    m_device->broadcastActionDone("eject");
++}
++
++void OpticalDrive::slotDBusError(const QDBusError &error)
++{
++    m_ejectInProgress = false;
++    m_device->broadcastActionDone("eject", m_device->errorToSolidError(error.name()),
++                                  m_device->errorToString(error.name()) + ": " +error.message());
++}
++
++void OpticalDrive::slotEjectRequested()
++{
++    m_ejectInProgress = true;
++    Q_EMIT ejectRequested(m_device->udi());
++}
++
++void OpticalDrive::slotEjectDone(int error, const QString &errorString)
++{
++    m_ejectInProgress = false;
++    Q_EMIT ejectDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++void OpticalDrive::initReadWriteSpeeds() const
++{
++#if 0
++    int read_speed, write_speed;
++    char *write_speeds = 0;
++    QByteArray device_file = QFile::encodeName(m_device->property("Device").toString());
++
++    //qDebug("Doing open (\"%s\", O_RDONLY | O_NONBLOCK)", device_file.constData());
++    int fd = open(device_file, O_RDONLY | O_NONBLOCK);
++    if (fd < 0) {
++        qWarning("Cannot open %s: %s", device_file.constData(), strerror (errno));
++        return;
++    }
++
++    if (get_read_write_speed(fd, &read_speed, &write_speed, &write_speeds) >= 0) {
++        m_readSpeed = read_speed;
++        m_writeSpeed = write_speed;
++
++        QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts);
++        Q_FOREACH (const QString & speed, list)
++            m_writeSpeeds.append(speed.toInt());
++
++        free(write_speeds);
++
++        m_speedsInit = true;
++    }
++
++    close(fd);
++#endif
++}
++
++QList<int> OpticalDrive::writeSpeeds() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    //qDebug() << "solid write speeds:" << m_writeSpeeds;
++    return m_writeSpeeds;
++}
++
++int OpticalDrive::writeSpeed() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    return m_writeSpeed;
++}
++
++int OpticalDrive::readSpeed() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    return m_readSpeed;
++}
++
++Solid::OpticalDrive::MediumTypes OpticalDrive::supportedMedia() const
++{
++    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
++    Solid::OpticalDrive::MediumTypes supported;
++
++    QMap<Solid::OpticalDrive::MediumType, QString> map;
++    map[Solid::OpticalDrive::Cdr] = "optical_cd_r";
++    map[Solid::OpticalDrive::Cdrw] = "optical_cd_rw";
++    map[Solid::OpticalDrive::Dvd] = "optical_dvd";
++    map[Solid::OpticalDrive::Dvdr] = "optical_dvd_r";
++    map[Solid::OpticalDrive::Dvdrw] ="optical_dvd_rw";
++    map[Solid::OpticalDrive::Dvdram] ="optical_dvd_ram";
++    map[Solid::OpticalDrive::Dvdplusr] ="optical_dvd_plus_r";
++    map[Solid::OpticalDrive::Dvdplusrw] ="optical_dvd_plus_rw";
++    map[Solid::OpticalDrive::Dvdplusdl] ="optical_dvd_plus_r_dl";
++    map[Solid::OpticalDrive::Dvdplusdlrw] ="optical_dvd_plus_rw_dl";
++    map[Solid::OpticalDrive::Bd] ="optical_bd";
++    map[Solid::OpticalDrive::Bdr] ="optical_bd_r";
++    map[Solid::OpticalDrive::Bdre] ="optical_bd_re";
++    map[Solid::OpticalDrive::HdDvd] ="optical_hddvd";
++    map[Solid::OpticalDrive::HdDvdr] ="optical_hddvd_r";
++    map[Solid::OpticalDrive::HdDvdrw] ="optical_hddvd_rw";
++    // TODO add these to Solid
++    //map[Solid::OpticalDrive::Mo] ="optical_mo";
++    //map[Solid::OpticalDrive::Mr] ="optical_mrw";
++    //map[Solid::OpticalDrive::Mrw] ="optical_mrw_w";
++
++    Q_FOREACH ( const Solid::OpticalDrive::MediumType & type, map.keys() )
++    {
++        if ( mediaTypes.contains( map[type] ) )
++        {
++            supported |= type;
++        }
++    }
++
++    return supported;
++}
++
++void OpticalDrive::slotChanged()
++{
++    m_speedsInit = false; // reset the read/write speeds, changes eg. with an inserted media
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksopticaldrive.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksopticaldrive.h	2012-06-27 21:52:42.093597220 +0200
+@@ -0,0 +1,81 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2OPTICALDRIVE_H
++#define UDISKS2OPTICALDRIVE_H
++
++#include <solid/ifaces/opticaldrive.h>
++#include "udisksstoragedrive.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class OpticalDrive: public StorageDrive, virtual public Solid::Ifaces::OpticalDrive
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::OpticalDrive)
++
++public:
++    OpticalDrive(Device *device);
++    virtual ~OpticalDrive();
++
++Q_SIGNALS:
++    void ejectPressed(const QString &udi);
++    void ejectDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void ejectRequested(const QString &udi);
++
++public:
++    virtual bool eject();
++    virtual QList<int> writeSpeeds() const;
++    virtual int writeSpeed() const;
++    virtual int readSpeed() const;
++    virtual Solid::OpticalDrive::MediumTypes supportedMedia() const;
++
++private Q_SLOTS:
++    void slotDBusReply(const QDBusMessage &reply);
++    void slotDBusError(const QDBusError &error);
++
++    void slotEjectRequested();
++    void slotEjectDone(int error, const QString &errorString);
++
++    void slotChanged();
++
++private:
++    void initReadWriteSpeeds() const;
++
++    bool m_ejectInProgress;
++
++    // read/write speeds
++    mutable int m_readSpeed;
++    mutable int m_writeSpeed;
++    mutable QList<int> m_writeSpeeds;
++    mutable bool m_speedsInit;
++};
++
++}
++}
++}
++
++#endif // UDISKS2OPTICALDRIVE_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.cpp	2012-06-27 21:52:42.093597220 +0200
+@@ -0,0 +1,360 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstorageaccess.h"
++#include "udisks2.h"
++
++#include <QtCore/QProcess>
++#include <QtDBus/QtDBus>
++#include <QtGui/QApplication>
++#include <QtGui/QWidget>
++
++using namespace Solid::Backends::UDisks2;
++
++StorageAccess::StorageAccess(Device *device)
++    : DeviceInterface(device), m_setupInProgress(false), m_teardownInProgress(false), m_passphraseRequested(false)
++{
++    connect(device, SIGNAL(changed()), this, SLOT(checkAccessibility()));
++    updateCache();
++
++    // Delay connecting to DBus signals to avoid the related time penalty
++    // in hot paths such as predicate matching
++    QTimer::singleShot(0, this, SLOT(connectDBusSignals()));
++}
++
++StorageAccess::~StorageAccess()
++{
++}
++
++void StorageAccess::connectDBusSignals()
++{
++    m_device->registerAction("setup", this,
++                             SLOT(slotSetupRequested()),
++                             SLOT(slotSetupDone(int, const QString&)));
++
++    m_device->registerAction("teardown", this,
++                             SLOT(slotTeardownRequested()),
++                             SLOT(slotTeardownDone(int, const QString&)));
++}
++
++bool StorageAccess::isLuksDevice() const
++{
++    return m_device->isEncryptedContainer(); // encrypted device
++}
++
++bool StorageAccess::isAccessible() const
++{
++    if (isLuksDevice()) { // check if the cleartext slave is mounted
++        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
++            return false;
++        Device holderDevice(m_clearTextPath);
++        return holderDevice.isMounted();
++    }
++
++    return m_device->isMounted();
++}
++
++QString StorageAccess::filePath() const
++{
++    if (!isAccessible())
++        return QString();
++
++    QByteArrayList mntPoints;
++
++    if (isLuksDevice()) {  // encrypted (and unlocked) device
++        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
++            return QString();
++        Device holderDevice(m_clearTextPath);
++        mntPoints = qdbus_cast<QByteArrayList>(holderDevice.prop("MountPoints"));
++        if (!mntPoints.isEmpty())
++            return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
++        else
++            return QString();
++    }
++
++    mntPoints = qdbus_cast<QByteArrayList>(m_device->prop("MountPoints"));
++
++    if (!mntPoints.isEmpty())
++        return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
++    else
++        return QString();
++}
++
++bool StorageAccess::isIgnored() const
++{
++    return m_device->prop("HintIgnore").toBool(); // FIXME tune
++}
++
++bool StorageAccess::setup()
++{
++    if ( m_teardownInProgress || m_setupInProgress )
++        return false;
++    m_setupInProgress = true;
++    m_device->broadcastActionRequested("setup");
++
++    if (m_device->isEncryptedContainer())
++        return requestPassphrase();
++    else
++        return mount();
++}
++
++bool StorageAccess::teardown()
++{
++    if ( m_teardownInProgress || m_setupInProgress )
++        return false;
++    m_teardownInProgress = true;
++    m_device->broadcastActionRequested("teardown");
++
++    return unmount();
++}
++
++void StorageAccess::updateCache()
++{
++    m_isAccessible = isAccessible();
++}
++
++void StorageAccess::checkAccessibility()
++{
++    const bool old_isAccessible = m_isAccessible;
++    updateCache();
++
++    if (old_isAccessible != m_isAccessible) {
++        Q_EMIT accessibilityChanged(m_isAccessible, isLuksDevice() ? m_clearTextPath : m_device->udi());
++    }
++}
++
++void StorageAccess::slotDBusReply( const QDBusMessage & reply )
++{
++    if (m_setupInProgress)
++    {
++        if (isLuksDevice() && !isAccessible()) { // unlocked device, now mount it
++            if (reply.type() == QDBusMessage::ReplyMessage)  // we've got a response from Unlock
++                m_clearTextPath = reply.arguments().value(0).value<QDBusObjectPath>().path();
++            mount();
++        }
++        else // Don't broadcast setupDone unless the setup is really done. (Fix kde#271156)
++        {
++            m_setupInProgress = false;
++            m_device->broadcastActionDone("setup");
++
++            checkAccessibility();
++        }
++    }
++    else if (m_teardownInProgress)  // FIXME
++    {
++        if (isLuksDevice() && !m_clearTextPath.isEmpty() && m_clearTextPath != "/") // unlocked device, lock it
++        {
++            callCryptoTeardown();
++        }
++        else if (!m_clearTextPath.isEmpty() && m_clearTextPath != "/") {
++            callCryptoTeardown(true); // Lock crypted parent
++        }
++        else
++        {
++            // try to "eject" (aka safely remove) from the (parent) drive, e.g. SD card from a reader
++            QString drivePath = m_device->prop("Drive").value<QDBusObjectPath>().path();
++            if (!drivePath.isEmpty() || drivePath != "/")
++            {
++                Device drive(drivePath);
++                if (drive.prop("Ejectable").toBool() && !m_device->isOpticalDisc()) // optical drives have their Eject method
++                {
++                    QDBusConnection c = QDBusConnection::systemBus();
++                    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, drivePath, UD2_DBUS_INTERFACE_DRIVE, "Eject");
++                    msg << QVariantMap();   // options, unused now
++                    c.call(msg, QDBus::NoBlock);
++                }
++            }
++
++            m_teardownInProgress = false;
++            m_device->broadcastActionDone("teardown");
++
++            checkAccessibility();
++        }
++    }
++}
++
++void StorageAccess::slotDBusError( const QDBusError & error )
++{
++    if (m_setupInProgress)
++    {
++        m_setupInProgress = false;
++        m_device->broadcastActionDone("setup", m_device->errorToSolidError(error.name()),
++                                      m_device->errorToString(error.name()) + ": " +error.message());
++
++        checkAccessibility();
++    }
++    else if (m_teardownInProgress)
++    {
++        m_teardownInProgress = false;
++        m_clearTextPath.clear();
++        m_device->broadcastActionDone("teardown", m_device->errorToSolidError(error.name()),
++                                      m_device->errorToString(error.name()) + ": " + error.message());
++        checkAccessibility();
++    }
++}
++
++void StorageAccess::slotSetupRequested()
++{
++    m_setupInProgress = true;
++    //qDebug() << "SETUP REQUESTED:" << m_device->udi();
++    Q_EMIT setupRequested(m_device->udi());
++}
++
++void StorageAccess::slotSetupDone(int error, const QString &errorString)
++{
++    m_setupInProgress = false;
++    //qDebug() << "SETUP DONE:" << m_device->udi();
++    Q_EMIT setupDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++
++    checkAccessibility();
++}
++
++void StorageAccess::slotTeardownRequested()
++{
++    m_teardownInProgress = true;
++    Q_EMIT teardownRequested(m_device->udi());
++}
++
++void StorageAccess::slotTeardownDone(int error, const QString &errorString)
++{
++    m_teardownInProgress = false;
++    m_clearTextPath.clear();
++    Q_EMIT teardownDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++
++    checkAccessibility();
++}
++
++bool StorageAccess::mount()
++{
++    QString path = m_device->udi();
++
++    if (isLuksDevice()) { // mount options for the cleartext volume
++        path = m_clearTextPath;
++    }
++
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Mount");
++    QVariantMap options;
++
++    if (m_device->prop("IdType").toString() == "vfat")
++        options.insert("options", "flush");
++
++    msg << options;
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)));
++}
++
++bool StorageAccess::unmount()
++{
++    QString path = m_device->udi();
++
++    if (isLuksDevice()) { // unmount options for the cleartext volume
++        path = m_clearTextPath;
++    }
++
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
++
++    msg << QVariantMap();   // options, unused now
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)),
++                              s_unmountTimeout);
++}
++
++QString StorageAccess::generateReturnObjectPath()
++{
++    static int number = 1;
++
++    return "/org/kde/solid/UDisks2StorageAccess_"+QString::number(number++);
++}
++
++bool StorageAccess::requestPassphrase()
++{
++    QString udi = m_device->udi();
++    QString returnService = QDBusConnection::sessionBus().baseService();
++    m_lastReturnObject = generateReturnObjectPath();
++
++    QDBusConnection::sessionBus().registerObject(m_lastReturnObject, this, QDBusConnection::ExportScriptableSlots);
++
++    QWidget *activeWindow = QApplication::activeWindow();
++    uint wId = 0;
++    if (activeWindow!=0)
++        wId = (uint)activeWindow->winId();
++
++    QString appId = QCoreApplication::applicationName();
++
++    QDBusInterface soliduiserver("org.kde.kded5", "/modules/soliduiserver", "org.kde.SolidUiServer");
++    QDBusReply<void> reply = soliduiserver.call("showPassphraseDialog", udi, returnService,
++                                                m_lastReturnObject, wId, appId);
++    m_passphraseRequested = reply.isValid();
++    if (!m_passphraseRequested)
++        qWarning() << "Failed to call the SolidUiServer, D-Bus said:" << reply.error();
++
++    return m_passphraseRequested;
++}
++
++void StorageAccess::passphraseReply(const QString & passphrase)
++{
++    if (m_passphraseRequested)
++    {
++        QDBusConnection::sessionBus().unregisterObject(m_lastReturnObject);
++        m_passphraseRequested = false;
++        if (!passphrase.isEmpty())
++            callCryptoSetup(passphrase);
++        else
++        {
++            m_setupInProgress = false;
++            m_device->broadcastActionDone("setup");
++        }
++    }
++}
++
++void StorageAccess::callCryptoSetup(const QString & passphrase)
++{
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_device->udi(), UD2_DBUS_INTERFACE_ENCRYPTED, "Unlock");
++
++    msg << passphrase;
++    msg << QVariantMap();   // options, unused now
++
++    c.callWithCallback(msg, this,
++                       SLOT(slotDBusReply(const QDBusMessage &)),
++                       SLOT(slotDBusError(const QDBusError &)));
++}
++
++bool StorageAccess::callCryptoTeardown(bool actOnParent)
++{
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE,
++                                                      actOnParent ? (m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path()) : m_device->udi(),
++                                                      UD2_DBUS_INTERFACE_ENCRYPTED, "Lock");
++    msg << QVariantMap();   // options, unused now
++
++    m_clearTextPath.clear();
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)));
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstorageaccess.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstorageaccess.h	2012-06-27 21:52:42.094597220 +0200
+@@ -0,0 +1,104 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEACCESS_H
++#define UDISKS2STORAGEACCESS_H
++
++#include <solid/ifaces/storageaccess.h>
++#include "udisksdeviceinterface.h"
++
++#include <QtDBus/QDBusMessage>
++#include <QtDBus/QDBusError>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++class StorageAccess : public DeviceInterface, virtual public Solid::Ifaces::StorageAccess
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageAccess)
++
++public:
++    StorageAccess(Device *device);
++    virtual ~StorageAccess();
++
++    virtual bool isAccessible() const;
++    virtual QString filePath() const;
++    virtual bool isIgnored() const;
++    virtual bool setup();
++    virtual bool teardown();
++
++Q_SIGNALS:
++    void accessibilityChanged(bool accessible, const QString &udi);
++    void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void teardownDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void setupRequested(const QString &udi);
++    void teardownRequested(const QString &udi);
++
++public Q_SLOTS:
++    Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString & passphrase);
++
++private Q_SLOTS:
++    void slotDBusReply(const QDBusMessage & reply);
++    void slotDBusError(const QDBusError & error);
++
++    void connectDBusSignals();
++
++    void slotSetupRequested();
++    void slotSetupDone(int error, const QString &errorString);
++    void slotTeardownRequested();
++    void slotTeardownDone(int error, const QString &errorString);
++
++    void checkAccessibility();
++
++private:
++    /// @return true if this device is luks and unlocked
++    bool isLuksDevice() const;
++
++    void updateCache();
++
++    bool mount();
++    bool unmount();
++
++    bool requestPassphrase();
++    void callCryptoSetup( const QString & passphrase );
++    bool callCryptoTeardown( bool actOnParent=false );
++
++    QString generateReturnObjectPath();
++
++private:
++    bool m_isAccessible;
++    bool m_setupInProgress;
++    bool m_teardownInProgress;
++    bool m_passphraseRequested;
++    QString m_lastReturnObject;
++    QString m_clearTextPath;  // path to the unlocked cleartext device
++
++    static const int s_unmountTimeout = 0x7fffffff;
++};
++}
++}
++}
++
++#endif // UDISKS2STORAGEACCESS_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.cpp	2012-06-27 21:52:42.094597220 +0200
+@@ -0,0 +1,147 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstoragedrive.h"
++
++#include "../shared/udevqtclient.h"
++
++#include <QtCore/QDebug>
++#include <QtCore/QFile>
++
++using namespace Solid::Backends::UDisks2;
++
++StorageDrive::StorageDrive(Device *dev)
++    : Block(dev)
++{
++    UdevQt::Client client(this);
++    m_udevDevice = client.deviceByDeviceFile(device());
++    m_udevDevice.deviceProperties();
++}
++
++StorageDrive::~StorageDrive()
++{
++}
++
++qulonglong StorageDrive::size() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++bool StorageDrive::isHotpluggable() const
++{
++    const Solid::StorageDrive::Bus _bus = bus();
++    return _bus == Solid::StorageDrive::Usb || _bus == Solid::StorageDrive::Ieee1394;
++}
++
++bool StorageDrive::isRemovable() const
++{
++    return m_device->prop("MediaRemovable").toBool() || m_device->prop("Removable").toBool();
++}
++
++Solid::StorageDrive::DriveType StorageDrive::driveType() const
++{
++    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
++
++    if ( m_device->isOpticalDrive() ) // optical disks
++    {
++        return Solid::StorageDrive::CdromDrive;
++    }
++    else if ( mediaTypes.contains( "floppy" ) )
++    {
++        return Solid::StorageDrive::Floppy;
++    }
++#if 0 // TODO add to Solid
++    else if ( mediaTypes.contains( "floppy_jaz" ) )
++    {
++        return Solid::StorageDrive::Jaz;
++    }
++    else if ( mediaTypes.contains( "floppy_zip" ) )
++    {
++        return Solid::StorageDrive::Zip;
++    }
++    else if ( mediaTypes.contains( "flash" ) )
++    {
++        return Solid::StorageDrive::Flash;
++    }
++#endif
++    else if ( mediaTypes.contains( "flash_cf" ) )
++    {
++        return Solid::StorageDrive::CompactFlash;
++    }
++    else if ( mediaTypes.contains( "flash_ms" ) )
++    {
++        return Solid::StorageDrive::MemoryStick;
++    }
++    else if ( mediaTypes.contains( "flash_sm" ) )
++    {
++        return Solid::StorageDrive::SmartMedia;
++    }
++    else if ( mediaTypes.contains( "flash_sd" ) || mediaTypes.contains( "flash_sdhc" )
++              || mediaTypes.contains( "flash_mmc" ) || mediaTypes.contains("flash_sdxc") )
++    {
++        return Solid::StorageDrive::SdMmc;
++    }
++    // FIXME: udisks2 doesn't know about xD cards
++    else
++    {
++        return Solid::StorageDrive::HardDisk;
++    }
++}
++
++Solid::StorageDrive::Bus StorageDrive::bus() const
++{
++    const QString bus = m_device->prop("ConnectionBus").toString();
++    const QString udevBus = m_udevDevice.deviceProperty("ID_BUS").toString();
++
++    //qDebug() << "bus:" << bus << "udev bus:" << udevBus;
++
++    if (udevBus == "ata")
++    {
++        if (m_udevDevice.deviceProperty("ID_ATA_SATA").toInt() == 1) // serial ATA
++            return Solid::StorageDrive::Sata;
++        else  // parallel (classical) ATA
++            return Solid::StorageDrive::Ide;
++    }
++    else if (bus == "usb")
++    {
++        return Solid::StorageDrive::Usb;
++    }
++    else if (bus == "ieee1394")
++    {
++        return Solid::StorageDrive::Ieee1394;
++    }
++    else if (udevBus == "scsi")
++    {
++        return Solid::StorageDrive::Scsi;
++    }
++#if 0  // TODO add these to Solid
++    else if ( bus == "sdio" )
++    {
++        return Solid::StorageDrive::SDIO;
++    }
++    else if ( bus == "virtual" )
++    {
++        return Solid::StorageDrive::Virtual;
++    }
++#endif
++    else
++        return Solid::StorageDrive::Platform;
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragedrive.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-27 21:52:42.095597221 +0200
+@@ -0,0 +1,61 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEDRIVE_H
++#define UDISKS2STORAGEDRIVE_H
++
++#include <ifaces/storagedrive.h>
++
++#include "../shared/udevqtdevice.h"
++
++#include "udisksblock.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class StorageDrive: public Block, virtual public Solid::Ifaces::StorageDrive
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageDrive)
++
++public:
++    StorageDrive(Device *dev);
++    virtual ~StorageDrive();
++
++    virtual qulonglong size() const;
++    virtual bool isHotpluggable() const;
++    virtual bool isRemovable() const;
++    virtual Solid::StorageDrive::DriveType driveType() const;
++    virtual Solid::StorageDrive::Bus bus() const;
++
++private:
++    UdevQt::Device m_udevDevice;
++};
++
++}
++}
++}
++
++#endif // UDISK2SSTORAGEDRIVE_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.cpp kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.cpp
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.cpp	2012-06-27 21:52:42.095597221 +0200
+@@ -0,0 +1,105 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstoragevolume.h"
++#include "udisks2.h"
++
++using namespace Solid::Backends::UDisks2;
++
++StorageVolume::StorageVolume(Device *device)
++    : Block(device)
++{
++}
++
++StorageVolume::~StorageVolume()
++{
++}
++
++QString StorageVolume::encryptedContainerUdi() const
++{
++    const QString path = m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
++    if ( path.isEmpty() || path == "/")
++        return QString();
++    else
++        return path;
++}
++
++qulonglong StorageVolume::size() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++QString StorageVolume::uuid() const
++{
++    return m_device->prop("IdUUID").toString();
++}
++
++QString StorageVolume::label() const
++{
++    QString label = m_device->prop("HintName").toString();
++    if (label.isEmpty())
++        label = m_device->prop("IdLabel").toString();
++    if (label.isEmpty())
++        label = m_device->prop("Name").toString();
++    return label;
++}
++
++QString StorageVolume::fsType() const
++{
++    return m_device->prop("IdType").toString();
++}
++
++Solid::StorageVolume::UsageType StorageVolume::usage() const
++{
++    const QString usage = m_device->prop("IdUsage").toString();
++
++    if (m_device->hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM))
++    {
++        return Solid::StorageVolume::FileSystem;
++    }
++    else if (m_device->isPartitionTable())
++    {
++        return Solid::StorageVolume::PartitionTable;
++    }
++    else if (usage == "raid")
++    {
++        return Solid::StorageVolume::Raid;
++    }
++    else if (m_device->isEncryptedContainer())
++    {
++        return Solid::StorageVolume::Encrypted;
++    }
++    else if (usage == "unused" || usage.isEmpty())
++    {
++        return Solid::StorageVolume::Unused;
++    }
++    else
++    {
++        return Solid::StorageVolume::Other;
++    }
++}
++
++bool StorageVolume::isIgnored() const
++{
++    const Solid::StorageVolume::UsageType usg = usage();
++    return m_device->prop("HintIgnore").toBool() || m_device->isSwap() ||
++            ((usg == Solid::StorageVolume::Unused || usg == Solid::StorageVolume::Other || usg == Solid::StorageVolume::PartitionTable) && !m_device->isOpticalDisc());
++}
+diff -ruN kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.h kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.h
+--- kdelibs-4.8.95.orig/solid/solid/backends/udisks2/udisksstoragevolume.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.95/solid/solid/backends/udisks2/udisksstoragevolume.h	2012-06-27 21:52:42.096597222 +0200
+@@ -0,0 +1,57 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEVOLUME_H
++#define UDISKS2STORAGEVOLUME_H
++
++#include <ifaces/storagevolume.h>
++#include "udisksblock.h"
++
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class StorageVolume: public Block, virtual public Solid::Ifaces::StorageVolume
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageVolume)
++
++public:
++    StorageVolume(Device *device);
++    virtual ~StorageVolume();
++
++    virtual QString encryptedContainerUdi() const;
++    virtual qulonglong size() const;
++    virtual QString uuid() const;
++    virtual QString label() const;
++    virtual QString fsType() const;
++    virtual Solid::StorageVolume::UsageType usage() const;
++    virtual bool isIgnored() const;
++};
++
++}
++}
++}
++
++#endif // UDISKS2STORAGEVOLUME_H
+diff -ruN kdelibs-4.8.95.orig/solid/solid/managerbase.cpp kdelibs-4.8.95/solid/solid/managerbase.cpp
+--- kdelibs-4.8.95.orig/solid/solid/managerbase.cpp	2012-05-23 01:45:29.000000000 +0200
++++ kdelibs-4.8.95/solid/solid/managerbase.cpp	2012-06-27 21:51:57.030594701 +0200
+@@ -21,7 +21,7 @@
+ #include "managerbase_p.h"
+ 
+ #include <stdlib.h>
+-#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
++#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
+ #include <config-solid.h>
+ #endif
+ 
+@@ -30,8 +30,7 @@
+ #if defined (Q_OS_MAC)
+ #include "backends/iokit/iokitmanager.h"
+ #elif defined (Q_OS_UNIX)
+-#include "backends/hal/halmanager.h"
+-#include "backends/udisks/udisksmanager.h"
++#include "backends/udisks2/udisksmanager.h"
+ #include "backends/upower/upowermanager.h"
+ 
+ #if defined (HUPNP_FOUND)
+@@ -44,7 +43,7 @@
+ 
+ #include "backends/fstab/fstabmanager.h"
+ 
+-#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
++#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+ #include "backends/wmi/wmimanager.h"
+ #endif
+ 
+@@ -68,25 +67,16 @@
+ #        if defined(Q_OS_MAC)
+             m_backends << new Solid::Backends::IOKit::IOKitManager(0);
+ 
+-#        elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
++#        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+             m_backends << new Solid::Backends::Wmi::WmiManager(0);
+ 
+-#        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
+-            m_backends << new Solid::Backends::Hal::HalManager(0);
+-
+ #        elif defined(Q_OS_LINUX)
+-            bool solidHalLegacyEnabled
+-                = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
+-            if (solidHalLegacyEnabled) {
+-                m_backends << new Solid::Backends::Hal::HalManager(0);
+-            } else {
+ #               if defined(UDEV_FOUND)
+                     m_backends << new Solid::Backends::UDev::UDevManager(0);
+ #               endif
+-                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
++                m_backends << new Solid::Backends::UDisks2::Manager(0)
+                            << new Solid::Backends::UPower::UPowerManager(0)
+                            << new Solid::Backends::Fstab::FstabManager(0);
+-            }
+ #        endif
+ 
+ #        if defined (HUPNP_FOUND)
+diff -ruN kdelibs-4.8.95.orig/solid/tests/CMakeLists.txt kdelibs-4.8.95/solid/tests/CMakeLists.txt
+--- kdelibs-4.8.95.orig/solid/tests/CMakeLists.txt	2012-05-23 01:45:29.000000000 +0200
++++ kdelibs-4.8.95/solid/tests/CMakeLists.txt	2012-06-27 21:50:56.880591338 +0200
+@@ -16,20 +16,6 @@
+ add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
+ 
+ 
+-########### halbasictest ###############
+-
+-if(NOT WIN32 AND NOT APPLE)
+-set(halbasictest_SRCS halbasictest.cpp )
+-
+-kde4_add_executable(halbasictest ${halbasictest_SRCS})
+-
+-if(WIN32)
+-  set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
+-endif(WIN32)
+-
+-target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
+-endif(NOT WIN32 AND NOT APPLE)
+-
+ ########### solidhwtest ###############
+ 
+ set(solidhwtest_SRCS 

diff --git a/kde-base/kdelibs/kdelibs-4.8.95.ebuild b/kde-base/kdelibs/kdelibs-4.8.95.ebuild
index 2503764..0ea0a98 100644
--- a/kde-base/kdelibs/kdelibs-4.8.95.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.95.ebuild
@@ -129,7 +129,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2.patch"
+	"${FILESDIR}/${PN}-4.8.95-udisks2.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-06-21 20:20 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-06-21 20:20 UTC (permalink / raw
  To: gentoo-commits

commit:     547648a0d41f2e5444f5e43f46fee68abf5489d5
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Thu Jun 21 19:48:10 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Thu Jun 21 19:48:10 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=547648a0

[kde-base/kdelibs] make 4.8.x work with soprano-2.7.6 again

(Portage version: 2.2.0_alpha110/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 kde-base/kdelibs/files/kdelibs-4.8.4-power.patch   |   25 +++++++++++++++++
 .../files/kdelibs-4.8.4-sopranorevert1.patch       |   28 +++++++++++++++++++
 .../files/kdelibs-4.8.4-sopranorevert2.patch       |   29 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.8.4.ebuild              |    5 +++-
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    2 +-
 5 files changed, 87 insertions(+), 2 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-power.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-power.patch
new file mode 100644
index 0000000..61ea0aa
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.4-power.patch
@@ -0,0 +1,25 @@
+From 5926264d13900efec70aaac434b7b67f9d8e6837 Mon Sep 17 00:00:00 2001
+From: Lukas Tinkl <lukas@kde.org>
+Date: Tue, 19 Jun 2012 18:27:04 +0200
+Subject: [PATCH 5/5] correctly report power saving status
+
+---
+ solid/solid/powermanagement.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/solid/solid/powermanagement.cpp b/solid/solid/powermanagement.cpp
+index 8dc8535..faadea4 100644
+--- a/solid/solid/powermanagement.cpp
++++ b/solid/solid/powermanagement.cpp
+@@ -73,7 +73,7 @@ Solid::PowerManagement::Notifier::Notifier()
+ 
+ bool Solid::PowerManagement::appShouldConserveResources()
+ {
+-    return globalPowerManager->powerSaveStatus;
++    return globalPowerManager->managerIface.GetPowerSaveStatus();
+ }
+ 
+ QSet<Solid::PowerManagement::SleepState> Solid::PowerManagement::supportedSleepStates()
+-- 
+1.7.9.2
+

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert1.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert1.patch
new file mode 100644
index 0000000..59c3174
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert1.patch
@@ -0,0 +1,28 @@
+From 76e0376d7582cfe5b898c56bf3779ca2279dace8 Mon Sep 17 00:00:00 2001
+From: Vishesh Handa <me@vhanda.in>
+Date: Thu, 14 Jun 2012 02:55:32 +0530
+Subject: [PATCH 1/5] Revert "Disconnect before re-connecting. Soprano does
+ not do that for us."
+
+This reverts commit 3708be2d09700b21f934c2129218e1c7ea44efdf.
+
+This is being done so that KDE 4.8.x works with Soprano 2.7.6
+---
+ nepomuk/core/nepomukmainmodel.cpp |    1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/nepomuk/core/nepomukmainmodel.cpp b/nepomuk/core/nepomukmainmodel.cpp
+index 8dc0b1f..ff742d7 100644
+--- a/nepomuk/core/nepomukmainmodel.cpp
++++ b/nepomuk/core/nepomukmainmodel.cpp
+@@ -97,7 +97,6 @@ public:
+         if ( forced || (!m_socketConnectFailed && !localSocketClient.isConnected()) ) {
+             delete localSocketModel;
+             localSocketModel = 0;
+-            localSocketClient.disconnect();
+             QString socketName = KGlobal::dirs()->locateLocal( "socket", "nepomuk-socket" );
+             kDebug() << "Connecting to local socket" << socketName;
+             if ( localSocketClient.connect( socketName ) ) {
+-- 
+1.7.9.2
+

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert2.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert2.patch
new file mode 100644
index 0000000..206e654
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.4-sopranorevert2.patch
@@ -0,0 +1,29 @@
+From bde5aad1e9f7bfb6f8d5c60197797de4a315158d Mon Sep 17 00:00:00 2001
+From: Vishesh Handa <me@vhanda.in>
+Date: Thu, 14 Jun 2012 02:56:31 +0530
+Subject: [PATCH 2/5] Revert "Always rec-connect if forced (ie. when Nepomuk
+ server restarts)"
+
+This reverts commit a43824a200ed76cef48a90bd3aee8547698b7c91.
+
+This is done so that 4.8.x works with Soprano 2.7.6
+---
+ nepomuk/core/nepomukmainmodel.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nepomuk/core/nepomukmainmodel.cpp b/nepomuk/core/nepomukmainmodel.cpp
+index ff742d7..be23b38 100644
+--- a/nepomuk/core/nepomukmainmodel.cpp
++++ b/nepomuk/core/nepomukmainmodel.cpp
+@@ -94,7 +94,7 @@ public:
+ 
+         // we may get disconnected from the server but we don't want to try
+         // to connect every time the model is requested
+-        if ( forced || (!m_socketConnectFailed && !localSocketClient.isConnected()) ) {
++        if ( !m_socketConnectFailed && !localSocketClient.isConnected() ) {
+             delete localSocketModel;
+             localSocketModel = 0;
+             QString socketName = KGlobal::dirs()->locateLocal( "socket", "nepomuk-socket" );
+-- 
+1.7.9.2
+

diff --git a/kde-base/kdelibs/kdelibs-4.8.4.ebuild b/kde-base/kdelibs/kdelibs-4.8.4.ebuild
index 28d09d4..c56902b 100644
--- a/kde-base/kdelibs/kdelibs-4.8.4.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.4.ebuild
@@ -77,7 +77,7 @@ COMMONDEPEND="
 	policykit? ( >=sys-auth/polkit-qt-0.103.0 )
 	semantic-desktop? (
 		>=dev-libs/shared-desktop-ontologies-0.8.1
-		>=dev-libs/soprano-2.7.56-r1[dbus,raptor,redland]
+		>=dev-libs/soprano-2.7.6[dbus,raptor,redland]
 	)
 	spell? ( app-text/enchant )
 	ssl? ( dev-libs/openssl )
@@ -128,6 +128,9 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.4-sopranorevert1.patch"
+	"${FILESDIR}/${PN}-4.8.4-sopranorevert2.patch"
+	"${FILESDIR}/${PN}-4.8.4-power.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index c1bc0d0..89d0593 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -78,7 +78,7 @@ COMMONDEPEND="
 	policykit? ( >=sys-auth/polkit-qt-0.103.0 )
 	semantic-desktop? (
 		>=dev-libs/shared-desktop-ontologies-0.8.1
-		>=dev-libs/soprano-2.7.56-r1[dbus,raptor,redland]
+		>=dev-libs/soprano-2.7.6[dbus,raptor,redland]
 	)
 	spell? ( app-text/enchant )
 	ssl? ( dev-libs/openssl )



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-06-20 11:44 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-06-20 11:44 UTC (permalink / raw
  To: gentoo-commits

commit:     0beb40a3423f2a6237e75992aba020f982a72cef
Author:     Andreas K. Huettel <andreas.huettel <AT> physik <DOT> uni-r <DOT> de>
AuthorDate: Wed Jun 20 11:43:41 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Wed Jun 20 11:43:41 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=0beb40a3

[kde-base/kdelibs] Properly apply udisks2 patch

(Portage version: 2.2.0_alpha110/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.8.90-udisks2.patch     | 3643 ++++++++++++++++++++
 .../files/kdelibs-4.8.90-udisks2_post.patch        |  113 -
 .../files/kdelibs-4.8.90-udisks2_prep.patch        |   65 -
 kde-base/kdelibs/kdelibs-4.8.90.ebuild             |    5 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    5 +-
 5 files changed, 3645 insertions(+), 186 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2.patch
new file mode 100644
index 0000000..294ceb8
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2.patch
@@ -0,0 +1,3643 @@
+diff -ruN kdelibs-4.8.90.orig/solid/solid/CMakeLists.txt kdelibs-4.8.90/solid/solid/CMakeLists.txt
+--- kdelibs-4.8.90.orig/solid/solid/CMakeLists.txt	2012-05-23 01:45:27.000000000 +0200
++++ kdelibs-4.8.90/solid/solid/CMakeLists.txt	2012-06-20 13:39:51.000000000 +0200
+@@ -1,6 +1,7 @@
+ set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
+ add_subdirectory( ifaces )
+ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
++include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
+ 
+ if(WIN32)
+    include_directories( ${KDEWIN_INCLUDES} )
+@@ -39,7 +40,6 @@
+ 
+ file(MAKE_DIRECTORY
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
+-   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
+ )
+@@ -225,33 +225,6 @@
+    endif( UDEV_FOUND )
+ 
+ 
+-   message(STATUS "Building Solid HAL backend." )
+-   set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-   backends/hal/halacadapter.cpp
+-   backends/hal/halaudiointerface.cpp
+-   backends/hal/halbattery.cpp
+-   backends/hal/halblock.cpp
+-   backends/hal/halbutton.cpp
+-   backends/hal/halcamera.cpp
+-   backends/hal/halcdrom.cpp
+-   backends/hal/haldeviceinterface.cpp
+-   backends/hal/haldvbinterface.cpp
+-   backends/hal/halfstabhandling.cpp
+-   backends/hal/halgenericinterface.cpp
+-   backends/hal/haldevice.cpp
+-   backends/hal/halmanager.cpp
+-   backends/hal/halnetworkinterface.cpp
+-   backends/hal/halserialinterface.cpp
+-   backends/hal/halopticaldisc.cpp
+-   backends/hal/halportablemediaplayer.cpp
+-   backends/hal/halprocessor.cpp
+-   backends/hal/halstorageaccess.cpp
+-   backends/hal/halstorage.cpp
+-   backends/hal/halvideo.cpp
+-   backends/hal/halvolume.cpp
+-   backends/hal/halsmartcardreader.cpp
+-   )
+-
+    message(STATUS "Building Solid UPower backend." )
+    set(solid_LIB_SRCS ${solid_LIB_SRCS}
+    backends/upower/upowermanager.cpp
+@@ -264,18 +237,19 @@
+ 
+    # FIXME: this should work on more Unix systems
+    if (CMAKE_SYSTEM_NAME MATCHES Linux)
+-      message(STATUS "Building Solid UDisks backend." )
++      message(STATUS "Building Solid UDisks2 backend." )
+       set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-      backends/udisks/udisksmanager.cpp
+-      backends/udisks/udisksdevice.cpp
+-      backends/udisks/udisksblock.cpp
+-      backends/udisks/udisksstoragevolume.cpp
+-      backends/udisks/udisksdeviceinterface.cpp
+-      backends/udisks/udisksopticaldisc.cpp
+-      backends/udisks/udisksopticaldrive.cpp
+-      backends/udisks/udisksstoragedrive.cpp
+-      backends/udisks/udisksstorageaccess.cpp
+-      backends/udisks/udisksgenericinterface.cpp
++      backends/udisks2/udisksmanager.cpp
++      backends/udisks2/udisksdevice.cpp
++      backends/udisks2/udisksblock.cpp
++      backends/udisks2/udisksstoragevolume.cpp
++      backends/udisks2/udisksdeviceinterface.cpp
++      backends/udisks2/udisksopticaldisc.cpp
++      backends/udisks2/udisksopticaldrive.cpp
++      backends/udisks2/udisksstoragedrive.cpp
++      backends/udisks2/udisksstorageaccess.cpp
++      backends/udisks2/udisksgenericinterface.cpp
++      backends/udisks2/dbus/manager.cpp
+       )
+    endif (CMAKE_SYSTEM_NAME MATCHES Linux)
+ 
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/dbus/manager.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/dbus/manager.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/dbus/manager.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/dbus/manager.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,26 @@
++/*
++ * This file was generated by qdbusxml2cpp version 0.7
++ * Command line was: qdbusxml2cpp -p manager manager.xml
++ *
++ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
++ *
++ * This is an auto-generated file.
++ * This file may have been hand-edited. Look for HAND-EDIT comments
++ * before re-generating it.
++ */
++
++#include "manager.h"
++
++/*
++ * Implementation of interface class OrgFreedesktopDBusObjectManagerInterface
++ */
++
++OrgFreedesktopDBusObjectManagerInterface::OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
++    : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
++{
++}
++
++OrgFreedesktopDBusObjectManagerInterface::~OrgFreedesktopDBusObjectManagerInterface()
++{
++}
++
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/dbus/manager.h kdelibs-4.8.90/solid/solid/backends/udisks2/dbus/manager.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/dbus/manager.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/dbus/manager.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++ * This file was generated by qdbusxml2cpp version 0.7
++ * Command line was: qdbusxml2cpp -p manager manager.xml
++ *
++ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
++ *
++ * This is an auto-generated file.
++ * Do not edit! All changes made to it will be lost.
++ */
++
++#ifndef MANAGER_H_1329493525
++#define MANAGER_H_1329493525
++
++#include <QtCore/QObject>
++#include <QtCore/QByteArray>
++#include <QtCore/QList>
++#include <QtCore/QMap>
++#include <QtCore/QString>
++#include <QtCore/QStringList>
++#include <QtCore/QVariant>
++#include <QtDBus/QtDBus>
++
++#include "../udisks2.h"
++
++/*
++ * Proxy class for interface org.freedesktop.DBus.ObjectManager
++ */
++class OrgFreedesktopDBusObjectManagerInterface: public QDBusAbstractInterface
++{
++    Q_OBJECT
++public:
++    static inline const char *staticInterfaceName()
++    { return "org.freedesktop.DBus.ObjectManager"; }
++
++public:
++    OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
++
++    ~OrgFreedesktopDBusObjectManagerInterface();
++
++public Q_SLOTS: // METHODS
++    inline QDBusPendingReply<DBUSManagerStruct> GetManagedObjects()
++    {
++        QList<QVariant> argumentList;
++        return asyncCallWithArgumentList(QLatin1String("GetManagedObjects"), argumentList);
++    }
++
++Q_SIGNALS: // SIGNALS
++    void InterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void InterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++};
++
++namespace org {
++  namespace freedesktop {
++    namespace DBus {
++      typedef ::OrgFreedesktopDBusObjectManagerInterface ObjectManager;
++    }
++  }
++}
++#endif
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/dbus/manager.xml kdelibs-4.8.90/solid/solid/backends/udisks2/dbus/manager.xml
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/dbus/manager.xml	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/dbus/manager.xml	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,21 @@
++<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
++                      "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
++<node>
++  <interface name="org.freedesktop.DBus.ObjectManager">
++    <method name="GetManagedObjects">
++      <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out">
++        <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBUSManagerStruct"/>
++      </arg>
++    </method>
++    <signal name="InterfacesAdded">
++      <arg type="o" name="object_path"/>
++      <arg type="a{sa{sv}}" name="interfaces_and_properties">
++        <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QVariantMapMap"/>
++      </arg>
++    </signal>
++    <signal name="InterfacesRemoved">
++      <arg type="o" name="object_path"/>
++      <arg type="as" name="interfaces"/>
++    </signal>
++  </interface>
++</node>
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisks2.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisks2.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisks2.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisks2.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,77 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef SOLID_BACKENDS_UDISKS2_H
++#define SOLID_BACKENDS_UDISKS2_H
++
++#include <QMetaType>
++#include <QtDBus>
++#include <QVariant>
++#include <QMap>
++#include <QList>
++
++typedef QList<QByteArray> QByteArrayList;
++Q_DECLARE_METATYPE(QByteArrayList)
++
++typedef QMap<QString,QVariantMap> QVariantMapMap;
++Q_DECLARE_METATYPE(QVariantMapMap)
++
++typedef QMap<QDBusObjectPath, QVariantMapMap> DBUSManagerStruct;
++Q_DECLARE_METATYPE(DBUSManagerStruct)
++
++/* UDisks2 */
++#define UD2_DBUS_SERVICE                 "org.freedesktop.UDisks2"
++#define UD2_DBUS_PATH                    "/org/freedesktop/UDisks2"
++#define UD2_UDI_DISKS_PREFIX             "/org/freedesktop/UDisks2"
++#define UD2_DBUS_PATH_MANAGER            "/org/freedesktop/UDisks2/Manager"
++#define UD2_DBUS_PATH_DRIVES             "/org/freedesktop/UDisks2/drives/"
++#define UD2_DBUS_PATH_JOBS               "/org/freedesktop/UDisks2/jobs/"
++#define DBUS_INTERFACE_PROPS             "org.freedesktop.DBus.Properties"
++#define DBUS_INTERFACE_INTROSPECT        "org.freedesktop.DBus.Introspectable"
++#define DBUS_INTERFACE_MANAGER           "org.freedesktop.DBus.ObjectManager"
++#define UD2_DBUS_INTERFACE_BLOCK         "org.freedesktop.UDisks2.Block"
++#define UD2_DBUS_INTERFACE_DRIVE         "org.freedesktop.UDisks2.Drive"
++#define UD2_DBUS_INTERFACE_PARTITION     "org.freedesktop.UDisks2.Partition"
++#define UD2_DBUS_INTERFACE_PARTITIONTABLE   "org.freedesktop.UDisks2.PartitionTable"
++#define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
++#define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
++#define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
++
++/* errors */
++#define UD2_ERROR_UNAUTHORIZED            "org.freedesktop.PolicyKit.Error.NotAuthorized"
++#define UD2_ERROR_BUSY                    "org.freedesktop.UDisks2.Error.DeviceBusy"
++#define UD2_ERROR_FAILED                  "org.freedesktop.UDisks2.Error.Failed"
++#define UD2_ERROR_CANCELED                "org.freedesktop.UDisks2.Error.Cancelled"
++#define UD2_ERROR_INVALID_OPTION          "org.freedesktop.UDisks2.Error.OptionNotPermitted"
++#define UD2_ERROR_MISSING_DRIVER          "org.freedesktop.UDisks2.Error.NotSupported"
++
++#define UD2_ERROR_ALREADY_MOUNTED         "org.freedesktop.UDisks2.Error.AlreadyMounted"
++#define UD2_ERROR_NOT_MOUNTED             "org.freedesktop.UDisks2.Error.NotMounted"
++#define UD2_ERROR_MOUNTED_BY_OTHER_USER   "org.freedesktop.UDisks2.Error.MountedByOtherUser"
++#define UD2_ERROR_ALREADY_UNMOUNTING      "org.freedesktop.UDisks2.Error.AlreadyUnmounting"
++#define UD2_ERROR_TIMED_OUT               "org.freedesktop.UDisks2.Error.Timedout"
++#define UD2_ERROR_WOULD_WAKEUP            "org.freedesktop.UDisks2.Error.WouldWakeup"
++#define UD2_ERROR_ALREADY_CANCELLED       "org.freedesktop.UDisks2.Error.AlreadyCancelled"
++
++#define UD2_ERROR_NOT_AUTHORIZED          "org.freedesktop.UDisks2.Error.NotAuthorized"
++#define UD2_ERROR_NOT_AUTHORIZED_CAN_OBTAIN  "org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain"
++#define UD2_ERROR_NOT_AUTHORIZED_DISMISSED   "org.freedesktop.UDisks2.Error.NotAuthorizedDismissed"
++
++#endif // SOLID_BACKENDS_UDISKS2_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksblock.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksblock.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksblock.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksblock.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,84 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <linux/kdev_t.h>
++
++#include <QFile>
++#include <QtDBus/QDBusConnection>
++#include <QtDBus/QDBusPendingReply>
++
++#include "udisksblock.h"
++#include "dbus/manager.h"
++
++using namespace Solid::Backends::UDisks2;
++
++Block::Block(Device *dev)
++    : DeviceInterface(dev)
++{
++    m_devNum = m_device->prop("DeviceNumber").toULongLong();
++    m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
++
++    // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
++    if (m_devNum == 0 || m_devFile.isEmpty()) {
++        org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
++        QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
++        reply.waitForFinished();
++        if (!reply.isError()) {  // enum devices
++            Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
++                const QString udi = path.path();
++
++                if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                    continue;
++
++                Device device(udi);
++                if (device.drivePath() == dev->udi()) {
++                    m_devNum = device.prop("DeviceNumber").toULongLong();
++                    m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
++                    break;
++                }
++            }
++        }
++        else  // show error
++        {
++            qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++        }
++    }
++
++    qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
++}
++
++Block::~Block()
++{
++}
++
++QString Block::device() const
++{
++    return m_devFile;
++}
++
++int Block::deviceMinor() const
++{
++    return MINOR(m_devNum);
++}
++
++int Block::deviceMajor() const
++{
++    return MAJOR(m_devNum);
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksblock.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksblock.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksblock.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksblock.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,56 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2BLOCK_H
++#define UDISKS2BLOCK_H
++
++#include <solid/ifaces/block.h>
++#include "udisksdeviceinterface.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Block: public DeviceInterface, virtual public Solid::Ifaces::Block
++{
++
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::Block)
++
++public:
++    Block(Device *dev);
++    virtual ~Block();
++
++    virtual QString device() const;
++    virtual int deviceMinor() const;
++    virtual int deviceMajor() const;
++private:
++    dev_t m_devNum;
++    QString m_devFile;
++};
++
++}
++}
++}
++
++#endif // UDISKS2BLOCK_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdevice.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdevice.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdevice.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdevice.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,910 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksdevice.h"
++#include "udisksblock.h"
++#include "udisksdeviceinterface.h"
++#include "udisksstoragevolume.h"
++#include "udisksopticaldisc.h"
++#include "udisksopticaldrive.h"
++#include "udisksstorageaccess.h"
++#include "udisksgenericinterface.h"
++
++#include <solid/genericinterface.h>
++#include <solid/deviceinterface.h>
++#include <solid/device.h>
++
++#include <QtCore/QDebug>
++
++#include <QtDBus/QDBusMessage>
++#include <QtDBus/QDBusMetaType>
++#include <QtDBus/QDBusPendingReply>
++#include <QtDBus/QDBusArgument>
++
++#include <QtXml/QDomDocument>
++
++using namespace Solid::Backends::UDisks2;
++
++// Adapted from KLocale as Solid needs to be Qt-only
++static QString formatByteSize(double size)
++{
++    // Per IEC 60027-2
++
++    // Binary prefixes
++    //Tebi-byte             TiB             2^40    1,099,511,627,776 bytes
++    //Gibi-byte             GiB             2^30    1,073,741,824 bytes
++    //Mebi-byte             MiB             2^20    1,048,576 bytes
++    //Kibi-byte             KiB             2^10    1,024 bytes
++
++    QString s;
++    // Gibi-byte
++    if ( size >= 1073741824.0 )
++    {
++        size /= 1073741824.0;
++        if ( size > 1024 ) // Tebi-byte
++            s = QObject::tr("%1 TiB").arg(QLocale().toString(size / 1024.0, 'f', 1));
++        else
++            s = QObject::tr("%1 GiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Mebi-byte
++    else if ( size >= 1048576.0 )
++    {
++        size /= 1048576.0;
++        s = QObject::tr("%1 MiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Kibi-byte
++    else if ( size >= 1024.0 )
++    {
++        size /= 1024.0;
++        s = QObject::tr("%1 KiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Just byte
++    else if ( size > 0 )
++    {
++        s = QObject::tr("%1 B").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Nothing
++    else
++    {
++        s = QObject::tr("0 B");
++    }
++    return s;
++}
++
++Device::Device(const QString &udi)
++    : Solid::Ifaces::Device()
++    , m_udi(udi)
++{
++    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
++                                  QString(), // no interface, we aggregate them
++                                  QDBusConnection::systemBus());
++
++    if (m_device->isValid()) {
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                             SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
++
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
++                                             this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
++                                             this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
++
++        initInterfaces();
++    }
++}
++
++Device::~Device()
++{
++    delete m_device;
++}
++
++QObject* Device::createDeviceInterface(const Solid::DeviceInterface::Type& type)
++{
++    if (!queryDeviceInterface(type)) {
++        return 0;
++    }
++
++    DeviceInterface *iface = 0;
++    switch (type)
++    {
++    case Solid::DeviceInterface::GenericInterface:
++        iface = new GenericInterface(this);
++        break;
++    case Solid::DeviceInterface::Block:
++        iface = new Block(this);
++        break;
++    case Solid::DeviceInterface::StorageAccess:
++        iface = new StorageAccess(this);
++        break;
++    case Solid::DeviceInterface::StorageDrive:
++        iface = new StorageDrive(this);
++        break;
++    case Solid::DeviceInterface::OpticalDrive:
++        iface = new OpticalDrive(this);
++        break;
++    case Solid::DeviceInterface::StorageVolume:
++        iface = new StorageVolume(this);
++        break;
++    case Solid::DeviceInterface::OpticalDisc:
++        iface = new OpticalDisc(this);
++        break;
++    default:
++        break;
++    }
++    return iface;
++}
++
++bool Device::queryDeviceInterface(const Solid::DeviceInterface::Type& type) const
++{
++    switch (type) {
++    case Solid::DeviceInterface::GenericInterface:
++        return true;
++    case Solid::DeviceInterface::Block:
++        return isBlock();
++    case Solid::DeviceInterface::StorageVolume:
++        return isStorageVolume();
++    case Solid::DeviceInterface::StorageAccess:
++        return isStorageAccess();
++    case Solid::DeviceInterface::StorageDrive:
++        return isDrive();
++    case Solid::DeviceInterface::OpticalDrive:
++        return isOpticalDrive();
++    case Solid::DeviceInterface::OpticalDisc:
++        return isOpticalDisc();
++    default:
++        return false;
++    }
++}
++
++QStringList Device::emblems() const
++{
++    QStringList res;
++
++    if (queryDeviceInterface(Solid::DeviceInterface::StorageAccess))
++    {
++        const UDisks2::StorageAccess accessIface(const_cast<Device *>(this));
++        if (accessIface.isAccessible())
++        {
++            if (isEncryptedContainer())
++                res << "emblem-encrypted-unlocked";
++            else
++                res << "emblem-mounted";
++        }
++        else
++        {
++            if (isEncryptedContainer())
++                res << "emblem-encrypted-locked";
++            else
++                res << "emblem-unmounted";
++        }
++    }
++
++    return res;
++}
++
++QString Device::description() const
++{
++    const QString hintName = prop("HintName").toString();
++    if (!hintName.isEmpty())
++        return hintName;
++
++    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
++        return storageDescription();
++    else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
++        return volumeDescription();
++    else
++        return product();
++}
++
++QString Device::storageDescription() const
++{
++    QString description;
++    const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
++    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
++    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++
++    if (drive_type == Solid::StorageDrive::CdromDrive)
++    {
++        const UDisks2::OpticalDrive opticalDrive(const_cast<Device*>(this));
++        Solid::OpticalDrive::MediumTypes mediumTypes = opticalDrive.supportedMedia();
++        QString first;
++        QString second;
++
++        first = QObject::tr("CD-ROM", "First item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Cdr)
++            first = QObject::tr("CD-R", "First item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Cdrw)
++            first = QObject::tr("CD-RW", "First item of %1%2 Drive sentence");
++
++        if (mediumTypes & Solid::OpticalDrive::Dvd)
++            second = QObject::tr("/DVD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdplusr)
++            second = QObject::tr("/DVD+R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdplusrw)
++            second = QObject::tr("/DVD+RW", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdr)
++            second = QObject::tr("/DVD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdrw)
++            second = QObject::tr("/DVD-RW", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdram)
++            second = QObject::tr("/DVD-RAM", "Second item of %1%2 Drive sentence");
++        if ((mediumTypes & Solid::OpticalDrive::Dvdr) && (mediumTypes & Solid::OpticalDrive::Dvdplusr))
++        {
++            if(mediumTypes & Solid::OpticalDrive::Dvdplusdl)
++                second = QObject::trUtf8("/DVD±R DL", "Second item of %1%2 Drive sentence");
++            else
++                second = QObject::trUtf8("/DVD±R", "Second item of %1%2 Drive sentence");
++        }
++        if ((mediumTypes & Solid::OpticalDrive::Dvdrw) && (mediumTypes & Solid::OpticalDrive::Dvdplusrw))
++        {
++            if((mediumTypes & Solid::OpticalDrive::Dvdplusdl) || (mediumTypes & Solid::OpticalDrive::Dvdplusdlrw))
++                second = QObject::trUtf8("/DVD±RW DL", "Second item of %1%2 Drive sentence");
++            else
++                second = QObject::trUtf8("/DVD±RW", "Second item of %1%2 Drive sentence");
++        }
++        if (mediumTypes & Solid::OpticalDrive::Bd)
++            second = QObject::tr("/BD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Bdr)
++            second = QObject::tr("/BD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Bdre)
++            second = QObject::tr("/BD-RE", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvd)
++            second = QObject::tr("/HD DVD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvdr)
++            second = QObject::tr("/HD DVD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvdrw)
++            second = QObject::tr("/HD DVD-RW", "Second item of %1%2 Drive sentence");
++
++        if (drive_is_hotpluggable)
++            description = QObject::tr("External %1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
++        else
++            description = QObject::tr("%1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
++
++        return description;
++    }
++
++    if (drive_type == Solid::StorageDrive::Floppy)
++    {
++        if (drive_is_hotpluggable)
++            description = QObject::tr("External Floppy Drive");
++        else
++            description = QObject::tr("Floppy Drive");
++
++        return description;
++    }
++
++    bool drive_is_removable = storageDrive.isRemovable();
++
++    if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
++    {
++        QString size_str = formatByteSize(storageDrive.size());
++        if (!size_str.isEmpty())
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
++            else
++                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
++        } else {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("External Hard Drive");
++            else
++                description = QObject::tr("Hard Drive");
++        }
++
++        return description;
++    }
++
++    QString vendormodel_str;
++    QString model = product();
++    QString vendor_str = vendor();
++
++    if (vendor_str.isEmpty())
++    {
++        if (!model.isEmpty())
++            vendormodel_str = model;
++    }
++    else
++    {
++        if (model.isEmpty())
++            vendormodel_str = vendor_str;
++        else
++        {
++            if (model.startsWith(vendor_str))
++            {
++                // e.g. vendor is "Nokia" and model is "Nokia N950" we do not want "Nokia Nokia N950" as description
++                vendormodel_str = model;
++            }
++            else
++            {
++                vendormodel_str = QObject::tr("%1 %2", "%1 is the vendor, %2 is the model of the device").arg(vendor_str).arg(model);
++            }
++        }
++    }
++
++    if (vendormodel_str.isEmpty())
++        description = QObject::tr("Drive");
++    else
++        description = vendormodel_str;
++
++    return description;
++}
++
++QString Device::volumeDescription() const
++{
++    QString description;
++    const UDisks2::StorageVolume storageVolume(const_cast<Device*>(this));
++    QString volume_label = prop("IdLabel").toString();
++    if (volume_label.isEmpty())
++        volume_label = prop("Name").toString();
++    if (!volume_label.isEmpty())
++        return volume_label;
++
++    UDisks2::Device storageDevice(drivePath());
++    const UDisks2::StorageDrive storageDrive(&storageDevice);
++    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
++
++    // Handle media in optical drives
++    if (drive_type == Solid::StorageDrive::CdromDrive)
++    {
++        const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
++        switch (disc.discType())
++        {
++            case Solid::OpticalDisc::UnknownDiscType:
++            case Solid::OpticalDisc::CdRom:
++                description = QObject::tr("CD-ROM");
++                break;
++
++            case Solid::OpticalDisc::CdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank CD-R");
++                else
++                    description = QObject::tr("CD-R");
++                break;
++
++            case Solid::OpticalDisc::CdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank CD-RW");
++                else
++                    description = QObject::tr("CD-RW");
++                break;
++
++            case Solid::OpticalDisc::DvdRom:
++                description = QObject::tr("DVD-ROM");
++                break;
++
++            case Solid::OpticalDisc::DvdRam:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-RAM");
++                else
++                    description = QObject::tr("DVD-RAM");
++                break;
++
++            case Solid::OpticalDisc::DvdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-R");
++                else
++                    description = QObject::tr("DVD-R");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRecordableDuallayer:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+R Dual-Layer");
++                else
++                    description = QObject::tr("DVD+R Dual-Layer");
++                break;
++
++            case Solid::OpticalDisc::DvdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-RW");
++                else
++                    description = QObject::tr("DVD-RW");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+R");
++                else
++                    description = QObject::tr("DVD+R");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+RW");
++                else
++                    description = QObject::tr("DVD+RW");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRewritableDuallayer:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+RW Dual-Layer");
++                else
++                    description = QObject::tr("DVD+RW Dual-Layer");
++                break;
++
++            case Solid::OpticalDisc::BluRayRom:
++                description = QObject::tr("BD-ROM");
++                break;
++
++            case Solid::OpticalDisc::BluRayRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank BD-R");
++                else
++                    description = QObject::tr("BD-R");
++                break;
++
++            case Solid::OpticalDisc::BluRayRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank BD-RE");
++                else
++                    description = QObject::tr("BD-RE");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRom:
++                description = QObject::tr("HD DVD-ROM");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank HD DVD-R");
++                else
++                    description = QObject::tr("HD DVD-R");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank HD DVD-RW");
++                else
++                    description = QObject::tr("HD DVD-RW");
++                break;
++            }
++
++        // Special case for pure audio disc
++        if (disc.availableContent() == Solid::OpticalDisc::Audio)
++            description = QObject::tr("Audio CD");
++
++        return description;
++    }
++
++    const bool drive_is_removable = storageDrive.isRemovable();
++    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++
++    QString size_str = formatByteSize(storageVolume.size());
++    if (isEncryptedContainer())
++    {
++        if (!size_str.isEmpty())
++            description = QObject::tr("%1 Encrypted Container", "%1 is the size").arg(size_str);
++        else
++            description = QObject::tr("Encrypted Container");
++    }
++    else if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
++    {
++        if (!size_str.isEmpty())
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
++            else
++                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
++        }
++        else
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("External Hard Drive");
++            else
++                description = QObject::tr("Hard Drive");
++        }
++    }
++    else
++    {
++        if (drive_is_removable)
++            description = QObject::tr("%1 Removable Media", "%1 is the size").arg(size_str);
++        else
++            description = QObject::tr("%1 Media", "%1 is the size").arg(size_str);
++    }
++
++    return description;
++}
++
++QString Device::icon() const
++{
++    QString iconName = prop( "HintIconName" ).toString();
++
++    if ( !iconName.isEmpty() )
++    {
++        return iconName;
++    }
++    else if (isDrive()) {
++        const bool isRemovable = prop("Removable").toBool();
++        const QString conn = prop("ConnectionBus").toString();
++
++        if (isOpticalDrive())
++            return "drive-optical";
++        else if (isRemovable && !isOpticalDisc()) {
++            if (conn == "usb")
++                return "drive-removable-media-usb";
++            else
++                return "drive-removable-media";
++        }
++    }
++    else if (isBlock()) {
++        Device drive(drivePath());
++
++        // handle media
++        const QString media = drive.prop("Media").toString();
++
++        if ( !media.isEmpty() )
++        {
++            if ( isOpticalDisc() )    // optical stuff
++            {
++                bool isWritable = drive.prop("OpticalBlank").toBool();
++
++                const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
++                Solid::OpticalDisc::ContentTypes availContent = disc.availableContent();
++
++                if (availContent & Solid::OpticalDisc::VideoDvd) // Video DVD
++                    return "media-optical-dvd-video";
++                else if ((availContent & Solid::OpticalDisc::VideoCd) || (availContent & Solid::OpticalDisc::SuperVideoCd)) // Video CD
++                    return "media-optical-video";
++                else if ((availContent & Solid::OpticalDisc::Data) && (availContent & Solid::OpticalDisc::Audio)) // Mixed CD
++                    return "media-optical-mixed-cd";
++                else if (availContent & Solid::OpticalDisc::Audio) // Audio CD
++                    return "media-optical-audio";
++                else if (availContent & Solid::OpticalDisc::Data) // Data CD
++                    return "media-optical-data";
++                else if ( isWritable )
++                    return "media-optical-recordable";
++                else
++                {
++                    if ( media.startsWith( "optical_dvd" ) || media.startsWith( "optical_hddvd" ) ) // DVD
++                        return "media-optical-dvd";
++                    else if ( media.startsWith( "optical_bd" ) ) // BluRay
++                        return "media-optical-blu-ray";
++                }
++
++                // fallback for every other optical disc
++                return "media-optical";
++            }
++
++            if ( media == "flash_ms" ) // Flash & Co.
++                return "media-flash-memory-stick";
++            else if ( media == "flash_sd" || media == "flash_sdhc" || media == "flash_sdxc" || media == "flash_mmc" )
++                return "media-flash-sd-mmc";
++            else if ( media == "flash_sm" )
++                return "media-flash-smart-media";
++            else if ( media == "thumb" )
++                return "drive-removable-media-usb-pendrive";
++            else if ( media.startsWith( "flash" ) )
++                return "media-flash";
++            else if ( media == "floppy" ) // the good ol' floppy
++                return "media-floppy";
++        }
++
++        if (drive.prop("ConnectionBus").toString() == "sdio")  // hack for SD cards connected thru sdio bus
++            return "media-flash-sd-mmc";
++
++        return drive.icon();
++    }
++
++    return "drive-harddisk";    // general fallback
++}
++
++QString Device::product() const
++{
++    QString product = prop("Model").toString();
++
++    if (!isDrive()) {
++        QString label = prop("IdLabel").toString();
++        if (!label.isEmpty()) {
++            product = label;
++        }
++    }
++
++    return product;
++}
++
++QString Device::vendor() const
++{
++    return prop("Vendor").toString();
++}
++
++QString Device::udi() const
++{
++    return m_udi;
++}
++
++QString Device::parentUdi() const
++{
++    QString parent;
++
++    if (isEncryptedContainer())
++        parent = prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
++    else if (propertyExists("Drive"))  // block
++        parent = prop("Drive").value<QDBusObjectPath>().path();
++    else if (propertyExists("Table"))  // partition
++        parent = prop("Table").value<QDBusObjectPath>().path();
++    else if (parent.isEmpty() || parent=="/") {
++        parent = UD2_UDI_DISKS_PREFIX;
++    }
++    return parent;
++}
++
++void Device::checkCache(const QString &key) const
++{
++    if (m_cache.isEmpty()) // recreate the cache
++        allProperties();
++
++    if (m_cache.contains(key))
++        return;
++
++    QVariant reply = m_device->property(key.toUtf8());
++
++    if (reply.isValid()) {
++        m_cache.insert(key, reply);
++    } else {
++        //qDebug() << "got invalid reply for cache:" << key;
++        //m_cache.insert(key, QVariant());
++    }
++}
++
++QString Device::introspect() const
++{
++    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
++                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
++    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
++    reply.waitForFinished();
++
++    if (reply.isValid())
++        return reply.value();
++    else {
++        return QString();
++    }
++}
++
++QVariant Device::prop(const QString &key) const
++{
++    checkCache(key);
++    return m_cache.value(key);
++}
++
++bool Device::propertyExists(const QString &key) const
++{
++    checkCache(key);
++    return m_cache.contains(key);
++}
++
++QVariantMap Device::allProperties() const
++{
++    Q_FOREACH (const QString & iface, m_interfaces) {
++        if (iface.startsWith("org.freedesktop.DBus"))
++            continue;
++        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
++        call << iface;
++        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
++        reply.waitForFinished();
++
++        if (reply.isValid())
++            m_cache.unite(reply.value());
++        else
++            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
++        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
++    }
++
++    return m_cache;
++}
++
++bool Device::hasInterface(const QString &name) const
++{
++    return m_interfaces.contains(name);
++}
++
++QStringList Device::interfaces() const
++{
++    return m_interfaces;
++}
++
++void Device::initInterfaces()
++{
++    m_interfaces.clear();
++    const QString xmlData = introspect();
++    QDomDocument dom;
++    dom.setContent(xmlData);
++    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
++    for (int i = 0; i < ifaceNodeList.count(); i++) {
++        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
++        if (!ifaceElem.isNull())
++            m_interfaces.append(ifaceElem.attribute("name"));
++    }
++    //qDebug() << "Device" << m_udi << "has interfaces:" << m_interfaces;
++}
++
++void Device::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    //Q_UNUSED(ifaceName);
++
++    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
++
++    QMap<QString, int> changeMap;
++
++    Q_FOREACH(const QString & key, invalidatedProps) {
++        m_cache.remove(key);
++        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
++        qDebug() << "\t invalidated:" << key;
++    }
++
++    QMapIterator<QString, QVariant> i(changedProps);
++    while (i.hasNext()) {
++        i.next();
++        const QString key = i.key();
++        m_cache.insert(key, i.value());  // replace the value
++        changeMap.insert(key, Solid::GenericInterface::PropertyModified);
++        qDebug() << "\t modified:" << key << ":" << m_cache.value(key);
++    }
++
++    Q_EMIT propertyChanged(changeMap);
++    Q_EMIT changed();
++}
++
++void Device::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
++{
++    if (object_path.path() == m_udi) {
++        m_interfaces.append(interfaces_and_properties.keys());
++    }
++}
++
++void Device::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
++{
++    if (object_path.path() == m_udi) {
++        Q_FOREACH(const QString & iface, interfaces) {
++            m_interfaces.removeAll(iface);
++        }
++    }
++}
++
++
++QString Device::errorToString(const QString & error) const
++{
++    if (error == UD2_ERROR_UNAUTHORIZED || error == UD2_ERROR_NOT_AUTHORIZED)
++        return QObject::tr("You are not authorized to perform this operation");
++    else if (error == UD2_ERROR_BUSY)
++        return QObject::tr("The device is currently busy");
++    else if (error == UD2_ERROR_FAILED)
++        return QObject::tr("The requested operation has failed");
++    else if (error == UD2_ERROR_CANCELED)
++        return QObject::tr("The requested operation has been canceled");
++    else if (error == UD2_ERROR_INVALID_OPTION)
++        return QObject::tr("An invalid or malformed option has been given");
++    else if (error == UD2_ERROR_MISSING_DRIVER)
++        return QObject::tr("The kernel driver for this filesystem type is not available");
++    else if (error == UD2_ERROR_ALREADY_MOUNTED)
++        return QObject::tr("The device is already mounted");
++    else if (error == UD2_ERROR_NOT_MOUNTED)
++        return QObject::tr("The device is not mounted");
++    else if (error == UD2_ERROR_MOUNTED_BY_OTHER_USER)
++        return QObject::tr("The device is mounted by another user");
++    else if (error == UD2_ERROR_ALREADY_UNMOUNTING)
++        return QObject::tr("The device is already unmounting");
++    else if (error == UD2_ERROR_TIMED_OUT)
++        return QObject::tr("The operation timed out");
++    else if (error == UD2_ERROR_WOULD_WAKEUP)
++        return QObject::tr("The operation would wake up a disk that is in a deep-sleep state");
++    else if (error == UD2_ERROR_ALREADY_CANCELLED)
++        return QObject::tr("The operation has already been canceled");
++    else
++        return QObject::tr("An unspecified error has occurred");
++}
++
++Solid::ErrorType Device::errorToSolidError(const QString & error) const
++{
++    if (error == UD2_ERROR_BUSY)
++        return Solid::DeviceBusy;
++    else if (error == UD2_ERROR_FAILED)
++        return Solid::OperationFailed;
++    else if (error == UD2_ERROR_CANCELED)
++        return Solid::UserCanceled;
++    else if (error == UD2_ERROR_INVALID_OPTION)
++        return Solid::InvalidOption;
++    else if (error == UD2_ERROR_MISSING_DRIVER)
++        return Solid::MissingDriver;
++    else
++        return Solid::UnauthorizedOperation;
++}
++
++bool Device::isBlock() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_BLOCK);
++}
++
++bool Device::isPartition() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_PARTITION);
++}
++
++bool Device::isPartitionTable() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_PARTITIONTABLE);
++}
++
++bool Device::isStorageVolume() const
++{
++    return isPartition() || isPartitionTable() || isStorageAccess() || isOpticalDisc();
++}
++
++bool Device::isStorageAccess() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM) || isEncryptedContainer();
++}
++
++bool Device::isDrive() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_DRIVE);
++}
++
++bool Device::isOpticalDrive() const
++{
++    return isDrive() && !prop("MediaCompatibility").toStringList().filter("optical_").isEmpty();
++}
++
++bool Device::isOpticalDisc() const
++{
++    const QString drv = drivePath();
++    if (drv.isEmpty() || drv == "/")
++        return false;
++
++    Device drive(drv);
++    return drive.prop("Optical").toBool();
++}
++
++bool Device::mightBeOpticalDisc() const
++{
++    const QString drv = drivePath();
++    if (drv.isEmpty() || drv == "/")
++        return false;
++
++    Device drive(drv);
++    return drive.isOpticalDrive();
++}
++
++bool Device::isMounted() const
++{
++    return propertyExists("MountPoints") && !qdbus_cast<QByteArrayList>(prop("MountPoints")).isEmpty();
++}
++
++bool Device::isEncryptedContainer() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_ENCRYPTED);
++}
++
++bool Device::isEncryptedCleartext() const
++{
++    const QString holderDevice = prop("CryptoBackingDevice").toString();
++    if (holderDevice.isEmpty() || holderDevice == "/")
++        return false;
++    else
++        return true;
++}
++
++bool Device::isSwap() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_SWAP);
++}
++
++QString Device::drivePath() const
++{
++    return prop("Drive").value<QDBusObjectPath>().path();
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdevice.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdevice.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdevice.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdevice.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,112 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2DEVICE_H
++#define UDISKS2DEVICE_H
++
++#include "udisks2.h"
++
++#include <ifaces/device.h>
++#include <solid/deviceinterface.h>
++#include <solid/solidnamespace.h>
++
++#include <QtDBus/QDBusInterface>
++#include <QtDBus/QDBusObjectPath>
++#include <QtCore/QStringList>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Device: public Solid::Ifaces::Device
++{
++    Q_OBJECT
++public:
++    Device(const QString &udi);
++    virtual ~Device();
++
++    virtual QObject* createDeviceInterface(const Solid::DeviceInterface::Type& type);
++    virtual bool queryDeviceInterface(const Solid::DeviceInterface::Type& type) const;
++    virtual QString description() const;
++    virtual QStringList emblems() const;
++    virtual QString icon() const;
++    virtual QString product() const;
++    virtual QString vendor() const;
++    virtual QString udi() const;
++    virtual QString parentUdi() const;
++
++    QVariant prop(const QString &key) const;
++    bool propertyExists(const QString &key) const;
++    QVariantMap allProperties() const;
++
++    bool hasInterface(const QString & name) const;
++    QStringList interfaces() const;
++
++    QString errorToString(const QString & error) const;
++    Solid::ErrorType errorToSolidError(const QString & error) const;
++
++    bool isBlock() const;
++    bool isPartition() const;
++    bool isPartitionTable() const;
++    bool isStorageVolume() const;
++    bool isStorageAccess() const;
++    bool isDrive() const;
++    bool isOpticalDrive() const;
++    bool isOpticalDisc() const;
++    bool mightBeOpticalDisc() const;
++    bool isMounted() const;
++    bool isEncryptedContainer() const;
++    bool isEncryptedCleartext() const;
++    bool isSwap() const;
++
++    QString drivePath() const;
++
++Q_SIGNALS:
++    void changed();
++    void propertyChanged(const QMap<QString,int> &changes);
++
++private Q_SLOTS:
++    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++
++private:
++    QString storageDescription() const;
++    QString volumeDescription() const;
++    mutable QDBusInterface *m_device;
++    QString m_udi;
++    mutable QVariantMap m_cache;
++
++    void initInterfaces();
++    QStringList m_interfaces;
++
++    void checkCache(const QString &key) const;
++    QString introspect() const;
++};
++
++}
++}
++}
++
++#endif // UDISKS2DEVICE_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdeviceinterface.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdeviceinterface.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdeviceinterface.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdeviceinterface.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,33 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksdeviceinterface.h"
++
++using namespace Solid::Backends::UDisks2;
++
++DeviceInterface::DeviceInterface(Device *device)
++    : QObject(device), m_device(device)
++{
++
++}
++
++DeviceInterface::~DeviceInterface()
++{
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdeviceinterface.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdeviceinterface.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksdeviceinterface.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksdeviceinterface.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,148 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2DEVICEINTERFACE_H
++#define UDISKS2DEVICEINTERFACE_H
++
++#include <ifaces/deviceinterface.h>
++#include "udisksdevice.h"
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class DeviceInterface : public QObject, virtual public Solid::Ifaces::DeviceInterface
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::DeviceInterface)
++public:
++    DeviceInterface(Device *device);
++    virtual ~DeviceInterface();
++
++protected:
++    Device *m_device;
++
++public:
++    inline static QStringList toStringList(Solid::DeviceInterface::Type type)
++    {
++        QStringList list;
++
++        switch(type)
++        {
++        case Solid::DeviceInterface::GenericInterface:
++            list << "generic";
++            break;
++        case Solid::DeviceInterface::Processor:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Block:
++            list << "block";
++            break;
++        case Solid::DeviceInterface::StorageAccess:
++            list << "volume";
++            break;
++        case Solid::DeviceInterface::StorageDrive:
++            list << "storage";
++            break;
++        case Solid::DeviceInterface::OpticalDrive:
++            list << "storage.cdrom";
++            break;
++        case Solid::DeviceInterface::StorageVolume:
++            list << "volume";
++            break;
++        case Solid::DeviceInterface::OpticalDisc:
++            list << "volume.disc";
++            break;
++        case Solid::DeviceInterface::Camera:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::PortableMediaPlayer:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::NetworkInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::AcAdapter:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Battery:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Button:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::AudioInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::DvbInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Video:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::SerialInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::InternetGateway:
++            break;
++        case Solid::DeviceInterface::SmartCardReader:
++            // Doesn't exist with UDisks
++        case Solid::DeviceInterface::NetworkShare:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Unknown:
++            break;
++        case Solid::DeviceInterface::Last:
++            break;
++        }
++
++        return list;
++    }
++
++    inline static Solid::DeviceInterface::Type fromString(const QString &capability)
++    {
++        if (capability == "generic")
++            return Solid::DeviceInterface::GenericInterface;
++        else if (capability == "block")
++            return Solid::DeviceInterface::Block;
++        else if (capability == "storage")
++            return Solid::DeviceInterface::StorageDrive;
++        else if (capability == "storage.cdrom")
++            return Solid::DeviceInterface::OpticalDrive;
++        else if (capability == "volume")
++            return Solid::DeviceInterface::StorageVolume;
++        else if (capability == "volume.disc")
++            return Solid::DeviceInterface::OpticalDisc;
++        else
++            return Solid::DeviceInterface::Unknown;
++    }
++};
++
++}
++}
++}
++
++#endif // UDISKS2DEVICEINTERFACE_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksgenericinterface.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksgenericinterface.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksgenericinterface.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksgenericinterface.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,53 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksgenericinterface.h"
++
++#include "udisksdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++
++GenericInterface::GenericInterface(Device *device)
++    : DeviceInterface(device)
++{
++    connect(device, SIGNAL(propertyChanged(QMap<QString,int>)),
++            this, SIGNAL(propertyChanged(QMap<QString,int>)));
++}
++
++GenericInterface::~GenericInterface()
++{
++}
++
++QVariant GenericInterface::property(const QString &key) const
++{
++    return m_device->prop(key);
++}
++
++QVariantMap GenericInterface::allProperties() const
++{
++    return m_device->allProperties();
++}
++
++bool GenericInterface::propertyExists(const QString &key) const
++{
++    return m_device->propertyExists(key);
++}
++
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksgenericinterface.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksgenericinterface.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksgenericinterface.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksgenericinterface.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,57 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
++#define SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
++
++#include <solid/ifaces/genericinterface.h>
++#include <solid/genericinterface.h>
++#include "udisksdeviceinterface.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++class Device;
++
++class GenericInterface : public DeviceInterface, virtual public Solid::Ifaces::GenericInterface
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::GenericInterface)
++
++public:
++    GenericInterface(Device *device);
++    virtual ~GenericInterface();
++
++    virtual QVariant property(const QString &key) const;
++    virtual QVariantMap allProperties() const;
++    virtual bool propertyExists(const QString &key) const;
++
++Q_SIGNALS:
++    void propertyChanged(const QMap<QString, int> &changes);
++    void conditionRaised(const QString &condition, const QString &reason);
++};
++}
++}
++}
++
++#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksmanager.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksmanager.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksmanager.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksmanager.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,227 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksmanager.h"
++
++#include <QtCore/QDebug>
++#include <QtDBus>
++
++#include "../shared/rootdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++using namespace Solid::Backends::Shared;
++
++Manager::Manager(QObject *parent)
++    : Solid::Ifaces::DeviceManager(parent),
++      m_manager(UD2_DBUS_SERVICE,
++                UD2_DBUS_PATH,
++                QDBusConnection::systemBus())
++{
++    m_supportedInterfaces
++            << Solid::DeviceInterface::GenericInterface
++            << Solid::DeviceInterface::Block
++            << Solid::DeviceInterface::StorageAccess
++            << Solid::DeviceInterface::StorageDrive
++            << Solid::DeviceInterface::OpticalDrive
++            << Solid::DeviceInterface::OpticalDisc
++            << Solid::DeviceInterface::StorageVolume;
++
++    qDBusRegisterMetaType<QList<QDBusObjectPath> >();
++    qDBusRegisterMetaType<QVariantMap>();
++    qDBusRegisterMetaType<QVariantMapMap>();
++    qDBusRegisterMetaType<QByteArrayList>();
++    qDBusRegisterMetaType<DBUSManagerStruct>();
++
++    bool serviceFound = m_manager.isValid();
++    if (!serviceFound) {
++        // find out whether it will be activated automatically
++        QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus",
++                                                              "/org/freedesktop/DBus",
++                                                              "org.freedesktop.DBus",
++                                                              "ListActivatableNames");
++
++        QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
++        if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
++            QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
++            serviceFound = true;
++        }
++    }
++
++    if (serviceFound) {
++        connect(&m_manager, SIGNAL(InterfacesAdded(QDBusObjectPath, QVariantMapMap)),
++                this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
++        connect(&m_manager, SIGNAL(InterfacesRemoved(QDBusObjectPath,QStringList)),
++                this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
++    }
++}
++
++Manager::~Manager()
++{
++}
++
++QObject* Manager::createDevice(const QString& udi)
++{
++    if (udi==udiPrefix()) {
++        RootDevice *root = new RootDevice(udi);
++
++        root->setProduct(tr("Storage"));
++        root->setDescription(tr("Storage devices"));
++        root->setIcon("server-database"); // Obviously wasn't meant for that, but maps nicely in oxygen icon set :-p
++
++        return root;
++    } else if (deviceCache().contains(udi)) {
++        return new Device(udi);
++    } else {
++        return 0;
++    }
++}
++
++QStringList Manager::devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type)
++{
++    QStringList result;
++
++    if (!parentUdi.isEmpty())
++    {
++        Q_FOREACH (const QString &udi, deviceCache())
++        {
++            Device device(udi);
++            if (device.queryDeviceInterface(type) && device.parentUdi() == parentUdi)
++                result << udi;
++        }
++
++        return result;
++    }
++    else if (type != Solid::DeviceInterface::Unknown)
++    {
++        Q_FOREACH (const QString &udi, deviceCache())
++        {
++            Device device(udi);
++            if (device.queryDeviceInterface(type))
++                result << udi;
++        }
++
++        return result;
++    }
++
++    return deviceCache();
++}
++
++QStringList Manager::allDevices()
++{
++    m_deviceCache.clear();
++
++    QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
++    reply.waitForFinished();
++    if (!reply.isError()) {  // enum devices
++        m_deviceCache << udiPrefix();
++
++        Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
++            const QString udi = path.path();
++            qDebug() << "Adding device" << udi;
++
++            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                continue;
++
++            Device device(udi);
++            if (device.mightBeOpticalDisc()) {
++                QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                                     SLOT(slotMediaChanged(QDBusMessage)));
++                if (!device.isOpticalDisc())  // skip empty CD disc
++                    continue;
++            }
++
++            m_deviceCache.append(udi);
++        }
++    }
++    else  // show error
++    {
++        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++    }
++
++    return m_deviceCache;
++}
++
++
++QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
++{
++    return m_supportedInterfaces;
++}
++
++QString Manager::udiPrefix() const
++{
++    return UD2_UDI_DISKS_PREFIX;
++}
++
++void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
++{
++    const QString udi = object_path.path();
++
++    qDebug() << udi << "has new interfaces:" << interfaces_and_properties.keys();
++
++    // new device, we don't know it yet
++    if (!m_deviceCache.contains(udi)) {
++        m_deviceCache.append(udi);
++        Q_EMIT deviceAdded(udi);
++    }
++}
++
++void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
++{
++    const QString udi = object_path.path();
++
++    qDebug() << udi << "lost interfaces:" << interfaces;
++
++    Device device(udi);
++
++    if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty() || device.interfaces().contains(UD2_DBUS_INTERFACE_FILESYSTEM))) {
++        Q_EMIT deviceRemoved(udi);
++        m_deviceCache.removeAll(udi);
++    }
++}
++
++void Manager::slotMediaChanged(const QDBusMessage & msg)
++{
++    const QVariantMap properties = qdbus_cast<QVariantMap>(msg.arguments().at(1));
++
++    if (!properties.contains("Size"))  // react only on Size changes
++        return;
++
++    const QString udi = msg.path();
++    qulonglong size = properties.value("Size").toULongLong();
++    qDebug() << "MEDIA CHANGED in" << udi << "; size is:" << size;
++
++    if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the optdisc, got inserted
++        m_deviceCache.append(udi);
++        Q_EMIT deviceAdded(udi);
++    }
++
++    if (m_deviceCache.contains(udi) && size == 0) {  // we know the optdisc, got removed
++        Q_EMIT deviceRemoved(udi);
++        m_deviceCache.removeAll(udi);
++    }
++}
++
++const QStringList & Manager::deviceCache()
++{
++    if (m_deviceCache.isEmpty())
++        allDevices();
++
++    return m_deviceCache;
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksmanager.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksmanager.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksmanager.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksmanager.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,69 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2MANAGER_H
++#define UDISKS2MANAGER_H
++
++#include "udisks2.h"
++#include "udisksdevice.h"
++#include "dbus/manager.h"
++
++#include "solid/ifaces/devicemanager.h"
++
++#include <QtDBus/QDBusInterface>
++#include <QtCore/QSet>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Manager: public Solid::Ifaces::DeviceManager
++{
++    Q_OBJECT
++
++public:
++    Manager(QObject *parent);
++    virtual QObject* createDevice(const QString& udi);
++    virtual QStringList devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type);
++    virtual QStringList allDevices();
++    virtual QSet< Solid::DeviceInterface::Type > supportedInterfaces() const;
++    virtual QString udiPrefix() const;
++    virtual ~Manager();
++
++private Q_SLOTS:
++    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++    void slotMediaChanged(const QDBusMessage &msg);
++
++private:
++    const QStringList &deviceCache();
++    QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
++    org::freedesktop::DBus::ObjectManager m_manager;
++    QStringList m_deviceCache;
++};
++
++}
++}
++}
++#endif // UDISKS2MANAGER_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldisc.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldisc.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldisc.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,277 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <sys/types.h>
++#include <unistd.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++
++#include <QtCore/QFile>
++#include <QtDBus/QDBusConnection>
++
++#include "../shared/udevqtclient.h"
++
++#include "udisks2.h"
++#include "udisksopticaldisc.h"
++
++// inspired by http://cgit.freedesktop.org/hal/tree/hald/linux/probing/probe-volume.c
++static Solid::OpticalDisc::ContentType advancedDiscDetect(const QByteArray & device_file)
++{
++    /* the discs block size */
++    unsigned short bs;
++    /* the path table size */
++    unsigned short ts;
++    /* the path table location (in blocks) */
++    unsigned int tl;
++    /* length of the directory name in current path table entry */
++    unsigned char len_di = 0;
++    /* the number of the parent directory's path table entry */
++    unsigned int parent = 0;
++    /* filename for the current path table entry */
++    char dirname[256];
++    /* our position into the path table */
++    int pos = 0;
++    /* the path table record we're on */
++    int curr_record = 1;
++
++    Solid::OpticalDisc::ContentType result = Solid::OpticalDisc::NoContent;
++
++    int fd = open(device_file.constData(), O_RDONLY);
++
++    /* read the block size */
++    lseek (fd, 0x8080, SEEK_CUR);
++    if (read (fd, &bs, 2) != 2)
++    {
++        qDebug("Advanced probing on %s failed while reading block size", qPrintable(device_file));
++        goto out;
++    }
++
++    /* read in size of path table */
++    lseek (fd, 2, SEEK_CUR);
++    if (read (fd, &ts, 2) != 2)
++    {
++        qDebug("Advanced probing on %s failed while reading path table size", qPrintable(device_file));
++        goto out;
++    }
++
++    /* read in which block path table is in */
++    lseek (fd, 6, SEEK_CUR);
++    if (read (fd, &tl, 4) != 4)
++    {
++        qDebug("Advanced probing on %s failed while reading path table block", qPrintable(device_file));
++        goto out;
++    }
++
++    /* seek to the path table */
++    lseek (fd, bs * tl, SEEK_SET);
++
++    /* loop through the path table entries */
++    while (pos < ts)
++    {
++        /* get the length of the filename of the current entry */
++        if (read (fd, &len_di, 1) != 1)
++        {
++            qDebug("Advanced probing on %s failed, cannot read more entries", qPrintable(device_file));
++            break;
++        }
++
++        /* get the record number of this entry's parent
++           i'm pretty sure that the 1st entry is always the top directory */
++        lseek (fd, 5, SEEK_CUR);
++        if (read (fd, &parent, 2) != 2)
++        {
++            qDebug("Advanced probing on %s failed, couldn't read parent entry", qPrintable(device_file));
++            break;
++        }
++
++        /* read the name */
++        if (read (fd, dirname, len_di) != len_di)
++        {
++            qDebug("Advanced probing on %s failed, couldn't read the entry name", qPrintable(device_file));
++            break;
++        }
++        dirname[len_di] = 0;
++
++        /* if we found a folder that has the root as a parent, and the directory name matches
++           one of the special directories then set the properties accordingly */
++        if (parent == 1)
++        {
++            if (!strcasecmp (dirname, "VIDEO_TS"))
++            {
++                qDebug("Disc in %s is a Video DVD", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoDvd;
++                break;
++            }
++            else if (!strcasecmp (dirname, "BDMV"))
++            {
++                qDebug("Disc in %s is a Blu-ray video disc", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoBluRay;
++                break;
++            }
++            else if (!strcasecmp (dirname, "VCD"))
++            {
++                qDebug("Disc in %s is a Video CD", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoCd;
++                break;
++            }
++            else if (!strcasecmp (dirname, "SVCD"))
++            {
++                qDebug("Disc in %s is a Super Video CD", qPrintable(device_file));
++                result = Solid::OpticalDisc::SuperVideoCd;
++                break;
++            }
++        }
++
++        /* all path table entries are padded to be even,
++           so if this is an odd-length table, seek a byte to fix it */
++        if (len_di%2 == 1)
++        {
++            lseek (fd, 1, SEEK_CUR);
++            pos++;
++        }
++
++        /* update our position */
++        pos += 8 + len_di;
++        curr_record++;
++    }
++
++    close(fd);
++    return result;
++
++out:
++    /* go back to the start of the file */
++    lseek (fd, 0, SEEK_SET);
++    close(fd);
++    return result;
++}
++
++using namespace Solid::Backends::UDisks2;
++
++OpticalDisc::OpticalDisc(Device *dev)
++    : StorageVolume(dev), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
++{
++    UdevQt::Client client(this);
++    m_udevDevice = client.deviceByDeviceFile(device());
++    //qDebug() << "udev device:" << m_udevDevice.name() << "valid:" << m_udevDevice.isValid();
++    /*qDebug() << "\tProperties:" << */ m_udevDevice.deviceProperties(); // initialize the properties DB so that it doesn't crash further down, #298416
++
++    m_drive = new Device(m_device->prop("Drive").value<QDBusObjectPath>().path());
++    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_drive->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                         SLOT(slotDrivePropertiesChanged(QString,QVariantMap,QStringList)));
++}
++
++OpticalDisc::~OpticalDisc()
++{
++    delete m_drive;
++}
++
++qulonglong OpticalDisc::capacity() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++bool OpticalDisc::isRewritable() const
++{
++    // the hard way, udisks has no notion of a disc "rewritability"
++    const QString mediaType = media();
++    return mediaType == "optical_cd_rw" || mediaType == "optical_dvd_rw" || mediaType == "optical_dvd_ram" ||
++            mediaType == "optical_dvd_plus_rw" || mediaType == "optical_dvd_plus_rw_dl" ||
++            mediaType == "optical_bd_re" || mediaType == "optical_hddvd_rw";
++}
++
++bool OpticalDisc::isBlank() const
++{
++    return m_drive->prop("OpticalBlank").toBool();
++}
++
++bool OpticalDisc::isAppendable() const
++{
++    //qDebug() << "appendable prop" << m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE");
++    return m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE").toString() == QLatin1String("appendable");
++}
++
++Solid::OpticalDisc::DiscType OpticalDisc::discType() const
++{
++    QMap<Solid::OpticalDisc::DiscType, QString> map;
++    map[Solid::OpticalDisc::CdRom] = "optical_cd";
++    map[Solid::OpticalDisc::CdRecordable] = "optical_cd_r";
++    map[Solid::OpticalDisc::CdRewritable] = "optical_cd_rw";
++    map[Solid::OpticalDisc::DvdRom] = "optical_dvd";
++    map[Solid::OpticalDisc::DvdRecordable] = "optical_dvd_r";
++    map[Solid::OpticalDisc::DvdRewritable] ="optical_dvd_rw";
++    map[Solid::OpticalDisc::DvdRam] ="optical_dvd_ram";
++    map[Solid::OpticalDisc::DvdPlusRecordable] ="optical_dvd_plus_r";
++    map[Solid::OpticalDisc::DvdPlusRewritable] ="optical_dvd_plus_rw";
++    map[Solid::OpticalDisc::DvdPlusRecordableDuallayer] ="optical_dvd_plus_r_dl";
++    map[Solid::OpticalDisc::DvdPlusRewritableDuallayer] ="optical_dvd_plus_rw_dl";
++    map[Solid::OpticalDisc::BluRayRom] ="optical_bd";
++    map[Solid::OpticalDisc::BluRayRecordable] ="optical_bd_r";
++    map[Solid::OpticalDisc::BluRayRewritable] ="optical_bd_re";
++    map[Solid::OpticalDisc::HdDvdRom] ="optical_hddvd";
++    map[Solid::OpticalDisc::HdDvdRecordable] ="optical_hddvd_r";
++    map[Solid::OpticalDisc::HdDvdRewritable] ="optical_hddvd_rw";
++    // TODO add these to Solid
++    //map[Solid::OpticalDisc::MagnetoOptical] ="optical_mo";
++    //map[Solid::OpticalDisc::MountRainer] ="optical_mrw";
++    //map[Solid::OpticalDisc::MountRainerWritable] ="optical_mrw_w";
++
++    return map.key(media(), Solid::OpticalDisc::UnknownDiscType);  // FIXME optimize, lookup by value, not key
++}
++
++Solid::OpticalDisc::ContentTypes OpticalDisc::availableContent() const
++{
++    if (isBlank()) {
++        m_needsReprobe = false;
++        return Solid::OpticalDisc::NoContent;
++    }
++
++    if (m_needsReprobe) {
++        m_cachedContent = Solid::OpticalDisc::NoContent;
++        const bool hasData = m_drive->prop("OpticalNumDataTracks").toUInt() > 0;
++        const bool hasAudio = m_drive->prop("OpticalNumAudioTracks").toUInt() > 0;
++
++        if ( hasData ) {
++            m_cachedContent |= Solid::OpticalDisc::Data;
++            m_cachedContent |= advancedDiscDetect(m_device->prop("Device").toByteArray());
++        }
++        if ( hasAudio )
++            m_cachedContent |= Solid::OpticalDisc::Audio;
++
++        m_needsReprobe = false;
++    }
++
++    return m_cachedContent;
++}
++
++void OpticalDisc::slotDrivePropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    Q_UNUSED(ifaceName);
++
++    if (changedProps.keys().contains("Media") || invalidatedProps.contains("Media")) {
++        m_needsReprobe = true;
++        m_cachedContent = Solid::OpticalDisc::NoContent;
++    }
++}
++
++QString OpticalDisc::media() const
++{
++    return m_drive->prop("Media").toString();
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldisc.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldisc.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldisc.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldisc.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,69 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2OPTICALDISC_H
++#define UDISKS2OPTICALDISC_H
++
++#include <solid/ifaces/opticaldisc.h>
++
++#include "../shared/udevqtdevice.h"
++
++#include "udisksstoragevolume.h"
++#include "udisksdevice.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class OpticalDisc: public StorageVolume, virtual public Solid::Ifaces::OpticalDisc
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::OpticalDisc)
++
++public:
++    OpticalDisc(Device *dev);
++    virtual ~OpticalDisc();
++
++    virtual qulonglong capacity() const;
++    virtual bool isRewritable() const;
++    virtual bool isBlank() const;
++    virtual bool isAppendable() const;
++    virtual Solid::OpticalDisc::DiscType discType() const;
++    virtual Solid::OpticalDisc::ContentTypes availableContent() const;
++
++private Q_SLOTS:
++    void slotDrivePropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++
++private:
++    QString media() const;
++    mutable bool m_needsReprobe;
++    mutable Solid::OpticalDisc::ContentTypes m_cachedContent;
++    Device * m_drive;
++    UdevQt::Device m_udevDevice;
++};
++
++}
++}
++}
++#endif // UDISKS2OPTICALDISC_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldrive.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldrive.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldrive.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldrive.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,188 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <string.h>
++#include <errno.h>
++#include <unistd.h>
++#include <stdlib.h>
++
++#include <QtCore/QFile>
++#include <QtCore/QDebug>
++
++#include "udisksopticaldrive.h"
++#include "udisks2.h"
++#include "udisksdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++
++OpticalDrive::OpticalDrive(Device *device)
++    : StorageDrive(device), m_ejectInProgress(false), m_readSpeed(0), m_writeSpeed(0), m_speedsInit(false)
++{
++    m_device->registerAction("eject", this,
++                             SLOT(slotEjectRequested()),
++                             SLOT(slotEjectDone(int, const QString&)));
++
++    connect(m_device, SIGNAL(changed()), this, SLOT(slotChanged()));
++}
++
++OpticalDrive::~OpticalDrive()
++{
++}
++
++bool OpticalDrive::eject()
++{
++    if (m_ejectInProgress)
++        return false;
++    m_ejectInProgress = true;
++    m_device->broadcastActionRequested("eject");
++
++    QDBusConnection c = QDBusConnection::systemBus();
++
++    QString path = m_device->udi();
++
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_DRIVE, "Eject");
++    msg << QVariantMap();
++    return c.callWithCallback(msg, this, SLOT(slotDBusReply(const QDBusMessage &)), SLOT(slotDBusError(const QDBusError &)));
++}
++
++void OpticalDrive::slotDBusReply(const QDBusMessage &/*reply*/)
++{
++    m_ejectInProgress = false;
++    m_device->broadcastActionDone("eject");
++}
++
++void OpticalDrive::slotDBusError(const QDBusError &error)
++{
++    m_ejectInProgress = false;
++    m_device->broadcastActionDone("eject", m_device->errorToSolidError(error.name()),
++                                  m_device->errorToString(error.name()) + ": " +error.message());
++}
++
++void OpticalDrive::slotEjectRequested()
++{
++    m_ejectInProgress = true;
++    Q_EMIT ejectRequested(m_device->udi());
++}
++
++void OpticalDrive::slotEjectDone(int error, const QString &errorString)
++{
++    m_ejectInProgress = false;
++    Q_EMIT ejectDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++void OpticalDrive::initReadWriteSpeeds() const
++{
++#if 0
++    int read_speed, write_speed;
++    char *write_speeds = 0;
++    QByteArray device_file = QFile::encodeName(m_device->property("Device").toString());
++
++    //qDebug("Doing open (\"%s\", O_RDONLY | O_NONBLOCK)", device_file.constData());
++    int fd = open(device_file, O_RDONLY | O_NONBLOCK);
++    if (fd < 0) {
++        qWarning("Cannot open %s: %s", device_file.constData(), strerror (errno));
++        return;
++    }
++
++    if (get_read_write_speed(fd, &read_speed, &write_speed, &write_speeds) >= 0) {
++        m_readSpeed = read_speed;
++        m_writeSpeed = write_speed;
++
++        QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts);
++        Q_FOREACH (const QString & speed, list)
++            m_writeSpeeds.append(speed.toInt());
++
++        free(write_speeds);
++
++        m_speedsInit = true;
++    }
++
++    close(fd);
++#endif
++}
++
++QList<int> OpticalDrive::writeSpeeds() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    //qDebug() << "solid write speeds:" << m_writeSpeeds;
++    return m_writeSpeeds;
++}
++
++int OpticalDrive::writeSpeed() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    return m_writeSpeed;
++}
++
++int OpticalDrive::readSpeed() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    return m_readSpeed;
++}
++
++Solid::OpticalDrive::MediumTypes OpticalDrive::supportedMedia() const
++{
++    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
++    Solid::OpticalDrive::MediumTypes supported;
++
++    QMap<Solid::OpticalDrive::MediumType, QString> map;
++    map[Solid::OpticalDrive::Cdr] = "optical_cd_r";
++    map[Solid::OpticalDrive::Cdrw] = "optical_cd_rw";
++    map[Solid::OpticalDrive::Dvd] = "optical_dvd";
++    map[Solid::OpticalDrive::Dvdr] = "optical_dvd_r";
++    map[Solid::OpticalDrive::Dvdrw] ="optical_dvd_rw";
++    map[Solid::OpticalDrive::Dvdram] ="optical_dvd_ram";
++    map[Solid::OpticalDrive::Dvdplusr] ="optical_dvd_plus_r";
++    map[Solid::OpticalDrive::Dvdplusrw] ="optical_dvd_plus_rw";
++    map[Solid::OpticalDrive::Dvdplusdl] ="optical_dvd_plus_r_dl";
++    map[Solid::OpticalDrive::Dvdplusdlrw] ="optical_dvd_plus_rw_dl";
++    map[Solid::OpticalDrive::Bd] ="optical_bd";
++    map[Solid::OpticalDrive::Bdr] ="optical_bd_r";
++    map[Solid::OpticalDrive::Bdre] ="optical_bd_re";
++    map[Solid::OpticalDrive::HdDvd] ="optical_hddvd";
++    map[Solid::OpticalDrive::HdDvdr] ="optical_hddvd_r";
++    map[Solid::OpticalDrive::HdDvdrw] ="optical_hddvd_rw";
++    // TODO add these to Solid
++    //map[Solid::OpticalDrive::Mo] ="optical_mo";
++    //map[Solid::OpticalDrive::Mr] ="optical_mrw";
++    //map[Solid::OpticalDrive::Mrw] ="optical_mrw_w";
++
++    Q_FOREACH ( const Solid::OpticalDrive::MediumType & type, map.keys() )
++    {
++        if ( mediaTypes.contains( map[type] ) )
++        {
++            supported |= type;
++        }
++    }
++
++    return supported;
++}
++
++void OpticalDrive::slotChanged()
++{
++    m_speedsInit = false; // reset the read/write speeds, changes eg. with an inserted media
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldrive.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldrive.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksopticaldrive.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksopticaldrive.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,81 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2OPTICALDRIVE_H
++#define UDISKS2OPTICALDRIVE_H
++
++#include <solid/ifaces/opticaldrive.h>
++#include "udisksstoragedrive.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class OpticalDrive: public StorageDrive, virtual public Solid::Ifaces::OpticalDrive
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::OpticalDrive)
++
++public:
++    OpticalDrive(Device *device);
++    virtual ~OpticalDrive();
++
++Q_SIGNALS:
++    void ejectPressed(const QString &udi);
++    void ejectDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void ejectRequested(const QString &udi);
++
++public:
++    virtual bool eject();
++    virtual QList<int> writeSpeeds() const;
++    virtual int writeSpeed() const;
++    virtual int readSpeed() const;
++    virtual Solid::OpticalDrive::MediumTypes supportedMedia() const;
++
++private Q_SLOTS:
++    void slotDBusReply(const QDBusMessage &reply);
++    void slotDBusError(const QDBusError &error);
++
++    void slotEjectRequested();
++    void slotEjectDone(int error, const QString &errorString);
++
++    void slotChanged();
++
++private:
++    void initReadWriteSpeeds() const;
++
++    bool m_ejectInProgress;
++
++    // read/write speeds
++    mutable int m_readSpeed;
++    mutable int m_writeSpeed;
++    mutable QList<int> m_writeSpeeds;
++    mutable bool m_speedsInit;
++};
++
++}
++}
++}
++
++#endif // UDISKS2OPTICALDRIVE_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstorageaccess.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstorageaccess.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstorageaccess.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstorageaccess.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,359 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstorageaccess.h"
++#include "udisks2.h"
++
++#include <QtCore/QProcess>
++#include <QtDBus/QtDBus>
++#include <QtGui/QApplication>
++#include <QtGui/QWidget>
++
++using namespace Solid::Backends::UDisks2;
++
++StorageAccess::StorageAccess(Device *device)
++    : DeviceInterface(device), m_setupInProgress(false), m_teardownInProgress(false), m_passphraseRequested(false)
++{
++    updateCache();
++    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_device->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                         SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
++
++    // Delay connecting to DBus signals to avoid the related time penalty
++    // in hot paths such as predicate matching
++    QTimer::singleShot(0, this, SLOT(connectDBusSignals()));
++}
++
++StorageAccess::~StorageAccess()
++{
++}
++
++void StorageAccess::connectDBusSignals()
++{
++    m_device->registerAction("setup", this,
++                             SLOT(slotSetupRequested()),
++                             SLOT(slotSetupDone(int, const QString&)));
++
++    m_device->registerAction("teardown", this,
++                             SLOT(slotTeardownRequested()),
++                             SLOT(slotTeardownDone(int, const QString&)));
++}
++
++bool StorageAccess::isLuksDevice() const
++{
++    return m_device->isEncryptedContainer(); // encrypted device
++}
++
++bool StorageAccess::isAccessible() const
++{
++    if (isLuksDevice()) { // check if the cleartext slave is mounted
++        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
++            return false;
++        Device holderDevice(m_clearTextPath);
++        return holderDevice.isMounted();
++    }
++
++    return m_device->isMounted();
++}
++
++QString StorageAccess::filePath() const
++{
++    if (!isAccessible())
++        return QString();
++
++    QByteArrayList mntPoints;
++
++    if (isLuksDevice()) {  // encrypted (and unlocked) device
++        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
++            return QString();
++        Device holderDevice(m_clearTextPath);
++        mntPoints = qdbus_cast<QByteArrayList>(holderDevice.prop("MountPoints"));
++        if (!mntPoints.isEmpty())
++            return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
++        else
++            return QString();
++    }
++
++    mntPoints = qdbus_cast<QByteArrayList>(m_device->prop("MountPoints"));
++
++    if (!mntPoints.isEmpty())
++        return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
++    else
++        return QString();
++}
++
++bool StorageAccess::isIgnored() const
++{
++    return m_device->prop("HintIgnore").toBool(); // FIXME tune
++}
++
++bool StorageAccess::setup()
++{
++    if ( m_teardownInProgress || m_setupInProgress )
++        return false;
++    m_setupInProgress = true;
++    m_device->broadcastActionRequested("setup");
++
++    if (m_device->isEncryptedContainer())
++        return requestPassphrase();
++    else
++        return mount();
++}
++
++bool StorageAccess::teardown()
++{
++    if ( m_teardownInProgress || m_setupInProgress )
++        return false;
++    m_teardownInProgress = true;
++    m_device->broadcastActionRequested("teardown");
++
++    return unmount();
++}
++
++void StorageAccess::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    Q_UNUSED(ifaceName);
++
++    if (changedProps.keys().contains("MountPoints") || invalidatedProps.contains("MountPoints")) {
++        Q_EMIT accessibilityChanged(isAccessible(), isLuksDevice() ? m_clearTextPath : m_device->udi());
++    }
++}
++
++void StorageAccess::updateCache()
++{
++    m_isAccessible = isAccessible();
++}
++
++void StorageAccess::checkAccessibility()
++{
++    const bool old_isAccessible = m_isAccessible;
++    updateCache();
++
++    if (old_isAccessible != m_isAccessible) {
++        Q_EMIT accessibilityChanged(m_isAccessible, isLuksDevice() ? m_clearTextPath : m_device->udi());
++    }
++}
++
++void StorageAccess::slotDBusReply( const QDBusMessage & reply )
++{
++    if (m_setupInProgress)
++    {
++        if (isLuksDevice() && !isAccessible()) { // unlocked device, now mount it
++            if (reply.type() == QDBusMessage::ReplyMessage)  // we've got a response from Unlock
++                m_clearTextPath = reply.arguments().value(0).value<QDBusObjectPath>().path();
++            mount();
++        }
++        else // Don't broadcast setupDone unless the setup is really done. (Fix kde#271156)
++        {
++            m_setupInProgress = false;
++            m_device->broadcastActionDone("setup");
++
++            checkAccessibility();
++        }
++    }
++    else if (m_teardownInProgress)  // FIXME
++    {
++        if (isLuksDevice() && !m_clearTextPath.isEmpty() && m_clearTextPath != "/") // unlocked device, lock it
++        {
++            callCryptoTeardown();
++        }
++        else if (!m_clearTextPath.isEmpty() && m_clearTextPath != "/") {
++            callCryptoTeardown(true); // Lock crypted parent
++        }
++        else
++        {
++            if (m_device->prop("Ejectable").toBool() && !m_device->isOpticalDisc()) // optical drives have their Eject method
++            {
++                // try to "eject" (aka safely remove) from the (parent) drive, e.g. SD card from a reader
++                QString drivePath = m_device->prop("Drive").value<QDBusObjectPath>().path();
++                if (!drivePath.isEmpty() || drivePath != "/")
++                {
++                    QDBusConnection c = QDBusConnection::systemBus();
++                    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, drivePath, UD2_DBUS_INTERFACE_DRIVE, "Eject");
++                    msg << QVariantMap();   // options, unused now
++                    c.call(msg, QDBus::NoBlock);
++                }
++            }
++
++            m_teardownInProgress = false;
++            m_device->broadcastActionDone("teardown");
++
++            checkAccessibility();
++        }
++    }
++}
++
++void StorageAccess::slotDBusError( const QDBusError & error )
++{
++    if (m_setupInProgress)
++    {
++        m_setupInProgress = false;
++        m_device->broadcastActionDone("setup", m_device->errorToSolidError(error.name()),
++                                      m_device->errorToString(error.name()) + ": " +error.message());
++
++        checkAccessibility();
++    }
++    else if (m_teardownInProgress)
++    {
++        m_teardownInProgress = false;
++        m_clearTextPath.clear();
++        m_device->broadcastActionDone("teardown", m_device->errorToSolidError(error.name()),
++                                      m_device->errorToString(error.name()) + ": " + error.message());
++        checkAccessibility();
++    }
++}
++
++void StorageAccess::slotSetupRequested()
++{
++    m_setupInProgress = true;
++    Q_EMIT setupRequested(m_device->udi());
++}
++
++void StorageAccess::slotSetupDone(int error, const QString &errorString)
++{
++    m_setupInProgress = false;
++    Q_EMIT setupDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++void StorageAccess::slotTeardownRequested()
++{
++    m_teardownInProgress = true;
++    Q_EMIT teardownRequested(m_device->udi());
++}
++
++void StorageAccess::slotTeardownDone(int error, const QString &errorString)
++{
++    m_teardownInProgress = false;
++    m_clearTextPath.clear();
++    Q_EMIT teardownDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++bool StorageAccess::mount()
++{
++    QString path = m_device->udi();
++
++    if (isLuksDevice()) { // mount options for the cleartext volume
++        path = m_clearTextPath;
++    }
++
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Mount");
++
++    msg << QVariantMap();   // options, unused now
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)));
++}
++
++bool StorageAccess::unmount()
++{
++    QString path = m_device->udi();
++
++    if (isLuksDevice()) { // unmount options for the cleartext volume
++        path = m_clearTextPath;
++    }
++
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
++
++    msg << QVariantMap();   // options, unused now
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)),
++                              s_unmountTimeout);
++}
++
++QString StorageAccess::generateReturnObjectPath()
++{
++    static int number = 1;
++
++    return "/org/kde/solid/UDisks2StorageAccess_"+QString::number(number++);
++}
++
++bool StorageAccess::requestPassphrase()
++{
++    QString udi = m_device->udi();
++    QString returnService = QDBusConnection::sessionBus().baseService();
++    m_lastReturnObject = generateReturnObjectPath();
++
++    QDBusConnection::sessionBus().registerObject(m_lastReturnObject, this, QDBusConnection::ExportScriptableSlots);
++
++    QWidget *activeWindow = QApplication::activeWindow();
++    uint wId = 0;
++    if (activeWindow!=0)
++        wId = (uint)activeWindow->winId();
++
++    QString appId = QCoreApplication::applicationName();
++
++    QDBusInterface soliduiserver("org.kde.kded5", "/modules/soliduiserver", "org.kde.SolidUiServer");
++    QDBusReply<void> reply = soliduiserver.call("showPassphraseDialog", udi, returnService,
++                                                m_lastReturnObject, wId, appId);
++    m_passphraseRequested = reply.isValid();
++    if (!m_passphraseRequested)
++        qWarning() << "Failed to call the SolidUiServer, D-Bus said:" << reply.error();
++
++    return m_passphraseRequested;
++}
++
++void StorageAccess::passphraseReply(const QString & passphrase)
++{
++    if (m_passphraseRequested)
++    {
++        QDBusConnection::sessionBus().unregisterObject(m_lastReturnObject);
++        m_passphraseRequested = false;
++        if (!passphrase.isEmpty())
++            callCryptoSetup(passphrase);
++        else
++        {
++            m_setupInProgress = false;
++            m_device->broadcastActionDone("setup");
++        }
++    }
++}
++
++void StorageAccess::callCryptoSetup(const QString & passphrase)
++{
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_device->udi(), UD2_DBUS_INTERFACE_ENCRYPTED, "Unlock");
++
++    msg << passphrase;
++    msg << QVariantMap();   // options, unused now
++
++    c.callWithCallback(msg, this,
++                       SLOT(slotDBusReply(const QDBusMessage &)),
++                       SLOT(slotDBusError(const QDBusError &)));
++}
++
++bool StorageAccess::callCryptoTeardown(bool actOnParent)
++{
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE,
++                                                      actOnParent ? (m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path()) : m_device->udi(),
++                                                      UD2_DBUS_INTERFACE_ENCRYPTED, "Lock");
++    msg << QVariantMap();   // options, unused now
++
++    m_clearTextPath.clear();
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)));
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstorageaccess.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstorageaccess.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstorageaccess.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstorageaccess.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,104 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEACCESS_H
++#define UDISKS2STORAGEACCESS_H
++
++#include <solid/ifaces/storageaccess.h>
++#include "udisksdeviceinterface.h"
++
++#include <QtDBus/QDBusMessage>
++#include <QtDBus/QDBusError>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++class StorageAccess : public DeviceInterface, virtual public Solid::Ifaces::StorageAccess
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageAccess)
++
++public:
++    StorageAccess(Device *device);
++    virtual ~StorageAccess();
++
++    virtual bool isAccessible() const;
++    virtual QString filePath() const;
++    virtual bool isIgnored() const;
++    virtual bool setup();
++    virtual bool teardown();
++
++Q_SIGNALS:
++    void accessibilityChanged(bool accessible, const QString &udi);
++    void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void teardownDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void setupRequested(const QString &udi);
++    void teardownRequested(const QString &udi);
++
++public Q_SLOTS:
++    Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString & passphrase);
++
++private Q_SLOTS:
++    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++    void slotDBusReply(const QDBusMessage & reply);
++    void slotDBusError(const QDBusError & error);
++
++    void connectDBusSignals();
++
++    void slotSetupRequested();
++    void slotSetupDone(int error, const QString &errorString);
++    void slotTeardownRequested();
++    void slotTeardownDone(int error, const QString &errorString);
++
++private:
++    /// @return true if this device is luks and unlocked
++    bool isLuksDevice() const;
++
++    void updateCache();
++    void checkAccessibility();
++
++    bool mount();
++    bool unmount();
++
++    bool requestPassphrase();
++    void callCryptoSetup( const QString & passphrase );
++    bool callCryptoTeardown( bool actOnParent=false );
++
++    QString generateReturnObjectPath();
++
++private:
++    bool m_isAccessible;
++    bool m_setupInProgress;
++    bool m_teardownInProgress;
++    bool m_passphraseRequested;
++    QString m_lastReturnObject;
++    QString m_clearTextPath;  // path to the unlocked cleartext device
++
++    static const int s_unmountTimeout = 0x7fffffff;
++};
++}
++}
++}
++
++#endif // UDISKS2STORAGEACCESS_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragedrive.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragedrive.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragedrive.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,147 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstoragedrive.h"
++
++#include "../shared/udevqtclient.h"
++
++#include <QtCore/QDebug>
++#include <QtCore/QFile>
++
++using namespace Solid::Backends::UDisks2;
++
++StorageDrive::StorageDrive(Device *dev)
++    : Block(dev)
++{
++    UdevQt::Client client(this);
++    m_udevDevice = client.deviceByDeviceFile(device());
++    m_udevDevice.deviceProperties();
++}
++
++StorageDrive::~StorageDrive()
++{
++}
++
++qulonglong StorageDrive::size() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++bool StorageDrive::isHotpluggable() const
++{
++    const Solid::StorageDrive::Bus _bus = bus();
++    return _bus == Solid::StorageDrive::Usb || _bus == Solid::StorageDrive::Ieee1394;
++}
++
++bool StorageDrive::isRemovable() const
++{
++    return m_device->prop("MediaRemovable").toBool() || m_device->prop("Removable").toBool();
++}
++
++Solid::StorageDrive::DriveType StorageDrive::driveType() const
++{
++    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
++
++    if ( m_device->isOpticalDrive() ) // optical disks
++    {
++        return Solid::StorageDrive::CdromDrive;
++    }
++    else if ( mediaTypes.contains( "floppy" ) )
++    {
++        return Solid::StorageDrive::Floppy;
++    }
++#if 0 // TODO add to Solid
++    else if ( mediaTypes.contains( "floppy_jaz" ) )
++    {
++        return Solid::StorageDrive::Jaz;
++    }
++    else if ( mediaTypes.contains( "floppy_zip" ) )
++    {
++        return Solid::StorageDrive::Zip;
++    }
++    else if ( mediaTypes.contains( "flash" ) )
++    {
++        return Solid::StorageDrive::Flash;
++    }
++#endif
++    else if ( mediaTypes.contains( "flash_cf" ) )
++    {
++        return Solid::StorageDrive::CompactFlash;
++    }
++    else if ( mediaTypes.contains( "flash_ms" ) )
++    {
++        return Solid::StorageDrive::MemoryStick;
++    }
++    else if ( mediaTypes.contains( "flash_sm" ) )
++    {
++        return Solid::StorageDrive::SmartMedia;
++    }
++    else if ( mediaTypes.contains( "flash_sd" ) || mediaTypes.contains( "flash_sdhc" )
++              || mediaTypes.contains( "flash_mmc" ) || mediaTypes.contains("flash_sdxc") )
++    {
++        return Solid::StorageDrive::SdMmc;
++    }
++    // FIXME: udisks2 doesn't know about xD cards
++    else
++    {
++        return Solid::StorageDrive::HardDisk;
++    }
++}
++
++Solid::StorageDrive::Bus StorageDrive::bus() const
++{
++    const QString bus = m_device->prop("ConnectionBus").toString();
++    const QString udevBus = m_udevDevice.deviceProperty("ID_BUS").toString();
++
++    //qDebug() << "bus:" << bus << "udev bus:" << udevBus;
++
++    if (udevBus == "ata")
++    {
++        if (m_udevDevice.deviceProperty("ID_ATA_SATA").toInt() == 1) // serial ATA
++            return Solid::StorageDrive::Sata;
++        else  // parallel (classical) ATA
++            return Solid::StorageDrive::Ide;
++    }
++    else if (bus == "usb")
++    {
++        return Solid::StorageDrive::Usb;
++    }
++    else if (bus == "ieee1394")
++    {
++        return Solid::StorageDrive::Ieee1394;
++    }
++    else if (udevBus == "scsi")
++    {
++        return Solid::StorageDrive::Scsi;
++    }
++#if 0  // TODO add these to Solid
++    else if ( bus == "sdio" )
++    {
++        return Solid::StorageDrive::SDIO;
++    }
++    else if ( bus == "virtual" )
++    {
++        return Solid::StorageDrive::Virtual;
++    }
++#endif
++    else
++        return Solid::StorageDrive::Platform;
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragedrive.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragedrive.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragedrive.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragedrive.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,61 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEDRIVE_H
++#define UDISKS2STORAGEDRIVE_H
++
++#include <ifaces/storagedrive.h>
++
++#include "../shared/udevqtdevice.h"
++
++#include "udisksblock.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class StorageDrive: public Block, virtual public Solid::Ifaces::StorageDrive
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageDrive)
++
++public:
++    StorageDrive(Device *dev);
++    virtual ~StorageDrive();
++
++    virtual qulonglong size() const;
++    virtual bool isHotpluggable() const;
++    virtual bool isRemovable() const;
++    virtual Solid::StorageDrive::DriveType driveType() const;
++    virtual Solid::StorageDrive::Bus bus() const;
++
++private:
++    UdevQt::Device m_udevDevice;
++};
++
++}
++}
++}
++
++#endif // UDISK2SSTORAGEDRIVE_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragevolume.cpp kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragevolume.cpp
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragevolume.cpp	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragevolume.cpp	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,105 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstoragevolume.h"
++#include "udisks2.h"
++
++using namespace Solid::Backends::UDisks2;
++
++StorageVolume::StorageVolume(Device *device)
++    : Block(device)
++{
++}
++
++StorageVolume::~StorageVolume()
++{
++}
++
++QString StorageVolume::encryptedContainerUdi() const
++{
++    const QString path = m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
++    if ( path.isEmpty() || path == "/")
++        return QString();
++    else
++        return path;
++}
++
++qulonglong StorageVolume::size() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++QString StorageVolume::uuid() const
++{
++    return m_device->prop("IdUUID").toString();
++}
++
++QString StorageVolume::label() const
++{
++    QString label = m_device->prop("HintName").toString();
++    if (label.isEmpty())
++        label = m_device->prop("IdLabel").toString();
++    if (label.isEmpty())
++        label = m_device->prop("Name").toString();
++    return label;
++}
++
++QString StorageVolume::fsType() const
++{
++    return m_device->prop("IdType").toString();
++}
++
++Solid::StorageVolume::UsageType StorageVolume::usage() const
++{
++    const QString usage = m_device->prop("IdUsage").toString();
++
++    if (m_device->hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM))
++    {
++        return Solid::StorageVolume::FileSystem;
++    }
++    else if (m_device->isPartitionTable())
++    {
++        return Solid::StorageVolume::PartitionTable;
++    }
++    else if (usage == "raid")
++    {
++        return Solid::StorageVolume::Raid;
++    }
++    else if (m_device->isEncryptedContainer())
++    {
++        return Solid::StorageVolume::Encrypted;
++    }
++    else if (usage == "unused" || usage.isEmpty())
++    {
++        return Solid::StorageVolume::Unused;
++    }
++    else
++    {
++        return Solid::StorageVolume::Other;
++    }
++}
++
++bool StorageVolume::isIgnored() const
++{
++    const Solid::StorageVolume::UsageType usg = usage();
++    return m_device->prop("HintIgnore").toBool() || m_device->isSwap() ||
++            ((usg == Solid::StorageVolume::Unused || usg == Solid::StorageVolume::Other || usg == Solid::StorageVolume::PartitionTable) && !m_device->isOpticalDisc());
++}
+diff -ruN kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragevolume.h kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragevolume.h
+--- kdelibs-4.8.90.orig/solid/solid/backends/udisks2/udisksstoragevolume.h	1970-01-01 01:00:00.000000000 +0100
++++ kdelibs-4.8.90/solid/solid/backends/udisks2/udisksstoragevolume.h	2012-06-20 13:39:24.000000000 +0200
+@@ -0,0 +1,57 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEVOLUME_H
++#define UDISKS2STORAGEVOLUME_H
++
++#include <ifaces/storagevolume.h>
++#include "udisksblock.h"
++
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class StorageVolume: public Block, virtual public Solid::Ifaces::StorageVolume
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageVolume)
++
++public:
++    StorageVolume(Device *device);
++    virtual ~StorageVolume();
++
++    virtual QString encryptedContainerUdi() const;
++    virtual qulonglong size() const;
++    virtual QString uuid() const;
++    virtual QString label() const;
++    virtual QString fsType() const;
++    virtual Solid::StorageVolume::UsageType usage() const;
++    virtual bool isIgnored() const;
++};
++
++}
++}
++}
++
++#endif // UDISKS2STORAGEVOLUME_H
+diff -ruN kdelibs-4.8.90.orig/solid/solid/managerbase.cpp kdelibs-4.8.90/solid/solid/managerbase.cpp
+--- kdelibs-4.8.90.orig/solid/solid/managerbase.cpp	2012-05-23 01:45:29.000000000 +0200
++++ kdelibs-4.8.90/solid/solid/managerbase.cpp	2012-06-20 13:39:51.000000000 +0200
+@@ -21,7 +21,7 @@
+ #include "managerbase_p.h"
+ 
+ #include <stdlib.h>
+-#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
++#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
+ #include <config-solid.h>
+ #endif
+ 
+@@ -30,8 +30,7 @@
+ #if defined (Q_OS_MAC)
+ #include "backends/iokit/iokitmanager.h"
+ #elif defined (Q_OS_UNIX)
+-#include "backends/hal/halmanager.h"
+-#include "backends/udisks/udisksmanager.h"
++#include "backends/udisks2/udisksmanager.h"
+ #include "backends/upower/upowermanager.h"
+ 
+ #if defined (HUPNP_FOUND)
+@@ -44,7 +43,7 @@
+ 
+ #include "backends/fstab/fstabmanager.h"
+ 
+-#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
++#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+ #include "backends/wmi/wmimanager.h"
+ #endif
+ 
+@@ -68,25 +67,16 @@
+ #        if defined(Q_OS_MAC)
+             m_backends << new Solid::Backends::IOKit::IOKitManager(0);
+ 
+-#        elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
++#        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+             m_backends << new Solid::Backends::Wmi::WmiManager(0);
+ 
+-#        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
+-            m_backends << new Solid::Backends::Hal::HalManager(0);
+-
+ #        elif defined(Q_OS_LINUX)
+-            bool solidHalLegacyEnabled
+-                = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
+-            if (solidHalLegacyEnabled) {
+-                m_backends << new Solid::Backends::Hal::HalManager(0);
+-            } else {
+ #               if defined(UDEV_FOUND)
+                     m_backends << new Solid::Backends::UDev::UDevManager(0);
+ #               endif
+-                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
++                m_backends << new Solid::Backends::UDisks2::Manager(0)
+                            << new Solid::Backends::UPower::UPowerManager(0)
+                            << new Solid::Backends::Fstab::FstabManager(0);
+-            }
+ #        endif
+ 
+ #        if defined (HUPNP_FOUND)
+diff -ruN kdelibs-4.8.90.orig/solid/tests/CMakeLists.txt kdelibs-4.8.90/solid/tests/CMakeLists.txt
+--- kdelibs-4.8.90.orig/solid/tests/CMakeLists.txt	2012-05-23 01:45:29.000000000 +0200
++++ kdelibs-4.8.90/solid/tests/CMakeLists.txt	2012-06-20 13:39:02.000000000 +0200
+@@ -16,20 +16,6 @@
+ add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
+ 
+ 
+-########### halbasictest ###############
+-
+-if(NOT WIN32 AND NOT APPLE)
+-set(halbasictest_SRCS halbasictest.cpp )
+-
+-kde4_add_executable(halbasictest ${halbasictest_SRCS})
+-
+-if(WIN32)
+-  set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
+-endif(WIN32)
+-
+-target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
+-endif(NOT WIN32 AND NOT APPLE)
+-
+ ########### solidhwtest ###############
+ 
+ set(solidhwtest_SRCS 

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_post.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_post.patch
deleted file mode 100644
index 68ad5f4..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_post.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-diff -ruN kdelibs-4.8.90.orig/solid/solid/CMakeLists.txt kdelibs-4.8.90/solid/solid/CMakeLists.txt
---- kdelibs-4.8.90.orig/solid/solid/CMakeLists.txt	2012-06-19 22:42:38.267962759 +0200
-+++ kdelibs-4.8.90/solid/solid/CMakeLists.txt	2012-06-19 22:44:23.050968201 +0200
-@@ -40,7 +40,6 @@
- 
- file(MAKE_DIRECTORY
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
--   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
-    ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
- )
-@@ -226,33 +225,6 @@
-    endif( UDEV_FOUND )
- 
- 
--   message(STATUS "Building Solid HAL backend." )
--   set(solid_LIB_SRCS ${solid_LIB_SRCS}
--   backends/hal/halacadapter.cpp
--   backends/hal/halaudiointerface.cpp
--   backends/hal/halbattery.cpp
--   backends/hal/halblock.cpp
--   backends/hal/halbutton.cpp
--   backends/hal/halcamera.cpp
--   backends/hal/halcdrom.cpp
--   backends/hal/haldeviceinterface.cpp
--   backends/hal/haldvbinterface.cpp
--   backends/hal/halfstabhandling.cpp
--   backends/hal/halgenericinterface.cpp
--   backends/hal/haldevice.cpp
--   backends/hal/halmanager.cpp
--   backends/hal/halnetworkinterface.cpp
--   backends/hal/halserialinterface.cpp
--   backends/hal/halopticaldisc.cpp
--   backends/hal/halportablemediaplayer.cpp
--   backends/hal/halprocessor.cpp
--   backends/hal/halstorageaccess.cpp
--   backends/hal/halstorage.cpp
--   backends/hal/halvideo.cpp
--   backends/hal/halvolume.cpp
--   backends/hal/halsmartcardreader.cpp
--   )
--
-    message(STATUS "Building Solid UPower backend." )
-    set(solid_LIB_SRCS ${solid_LIB_SRCS}
-    backends/upower/upowermanager.cpp
-@@ -265,18 +237,19 @@
- 
-    # FIXME: this should work on more Unix systems
-    if (CMAKE_SYSTEM_NAME MATCHES Linux)
--      message(STATUS "Building Solid UDisks backend." )
-+      message(STATUS "Building Solid UDisks2 backend." )
-       set(solid_LIB_SRCS ${solid_LIB_SRCS}
--      backends/udisks/udisksmanager.cpp
--      backends/udisks/udisksdevice.cpp
--      backends/udisks/udisksblock.cpp
--      backends/udisks/udisksstoragevolume.cpp
--      backends/udisks/udisksdeviceinterface.cpp
--      backends/udisks/udisksopticaldisc.cpp
--      backends/udisks/udisksopticaldrive.cpp
--      backends/udisks/udisksstoragedrive.cpp
--      backends/udisks/udisksstorageaccess.cpp
--      backends/udisks/udisksgenericinterface.cpp
-+      backends/udisks2/udisksmanager.cpp
-+      backends/udisks2/udisksdevice.cpp
-+      backends/udisks2/udisksblock.cpp
-+      backends/udisks2/udisksstoragevolume.cpp
-+      backends/udisks2/udisksdeviceinterface.cpp
-+      backends/udisks2/udisksopticaldisc.cpp
-+      backends/udisks2/udisksopticaldrive.cpp
-+      backends/udisks2/udisksstoragedrive.cpp
-+      backends/udisks2/udisksstorageaccess.cpp
-+      backends/udisks2/udisksgenericinterface.cpp
-+      backends/udisks2/dbus/manager.cpp
-       )
-    endif (CMAKE_SYSTEM_NAME MATCHES Linux)
- 
-diff -ruN kdelibs-4.8.90.orig/solid/solid/managerbase.cpp kdelibs-4.8.90/solid/solid/managerbase.cpp
---- kdelibs-4.8.90.orig/solid/solid/managerbase.cpp	2012-06-19 22:42:38.267962759 +0200
-+++ kdelibs-4.8.90/solid/solid/managerbase.cpp	2012-06-19 22:44:23.050968201 +0200
-@@ -30,8 +30,7 @@
- #if defined (Q_OS_MAC)
- #include "backends/iokit/iokitmanager.h"
- #elif defined (Q_OS_UNIX)
--#include "backends/hal/halmanager.h"
--#include "backends/udisks/udisksmanager.h"
-+#include "backends/udisks2/udisksmanager.h"
- #include "backends/upower/upowermanager.h"
- 
- #if defined (HUPNP_FOUND)
-@@ -71,22 +70,13 @@
- #        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-             m_backends << new Solid::Backends::Wmi::WmiManager(0);
- 
--#        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
--            m_backends << new Solid::Backends::Hal::HalManager(0);
--
- #        elif defined(Q_OS_LINUX)
--            bool solidHalLegacyEnabled
--                = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
--            if (solidHalLegacyEnabled) {
--                m_backends << new Solid::Backends::Hal::HalManager(0);
--            } else {
- #               if defined(UDEV_FOUND)
-                     m_backends << new Solid::Backends::UDev::UDevManager(0);
- #               endif
--                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
-+                m_backends << new Solid::Backends::UDisks2::Manager(0)
-                            << new Solid::Backends::UPower::UPowerManager(0)
-                            << new Solid::Backends::Fstab::FstabManager(0);
--            }
- #        endif
- 
- #        if defined (HUPNP_FOUND)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_prep.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_prep.patch
deleted file mode 100644
index 2962837..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_prep.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-diff -up kdelibs-4.8.2/solid/solid/CMakeLists.txt.udisks2_prep kdelibs-4.8.2/solid/solid/CMakeLists.txt
---- kdelibs-4.8.2/solid/solid/CMakeLists.txt.udisks2_prep	2011-07-27 13:34:38.000000000 -0500
-+++ kdelibs-4.8.2/solid/solid/CMakeLists.txt	2012-04-17 16:02:06.153985974 -0500
-@@ -1,6 +1,7 @@
- set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
- add_subdirectory( ifaces )
- include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
-+include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
- 
- if(WIN32)
-    include_directories( ${KDEWIN_INCLUDES} )
-diff -up kdelibs-4.8.2/solid/solid/managerbase.cpp.udisks2_prep kdelibs-4.8.2/solid/solid/managerbase.cpp
---- kdelibs-4.8.2/solid/solid/managerbase.cpp.udisks2_prep	2011-07-27 13:34:39.000000000 -0500
-+++ kdelibs-4.8.2/solid/solid/managerbase.cpp	2012-04-17 16:02:06.154985961 -0500
-@@ -21,7 +21,7 @@
- #include "managerbase_p.h"
- 
- #include <stdlib.h>
--#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
-+#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
- #include <config-solid.h>
- #endif
- 
-@@ -44,7 +44,7 @@
- 
- #include "backends/fstab/fstabmanager.h"
- 
--#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-+#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
- #include "backends/wmi/wmimanager.h"
- #endif
- 
-@@ -68,7 +68,7 @@ void Solid::ManagerBasePrivate::loadBack
- #        if defined(Q_OS_MAC)
-             m_backends << new Solid::Backends::IOKit::IOKitManager(0);
- 
--#        elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-+#        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
-             m_backends << new Solid::Backends::Wmi::WmiManager(0);
- 
- #        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
-diff -up kdelibs-4.8.2/solid/tests/CMakeLists.txt.udisks2_prep kdelibs-4.8.2/solid/tests/CMakeLists.txt
---- kdelibs-4.8.2/solid/tests/CMakeLists.txt.udisks2_prep	2011-10-20 15:52:04.000000000 -0500
-+++ kdelibs-4.8.2/solid/tests/CMakeLists.txt	2012-04-17 16:02:44.584505527 -0500
-@@ -16,20 +16,6 @@ target_link_libraries(fakehardwaretest s
- add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
- 
- 
--########### halbasictest ###############
--
--if(NOT WIN32 AND NOT APPLE)
--set(halbasictest_SRCS halbasictest.cpp )
--
--kde4_add_executable(halbasictest ${halbasictest_SRCS})
--
--if(WIN32)
--  set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
--endif(WIN32)
--
--target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
--endif(NOT WIN32 AND NOT APPLE)
--
- ########### solidhwtest ###############
- 
- set(solidhwtest_SRCS 

diff --git a/kde-base/kdelibs/kdelibs-4.8.90.ebuild b/kde-base/kdelibs/kdelibs-4.8.90.ebuild
index 0a72c9e..2503764 100644
--- a/kde-base/kdelibs/kdelibs-4.8.90.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.90.ebuild
@@ -22,7 +22,6 @@ LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam +handbook jpeg2k kerberos lzma
 mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
 +upower upnp zeroconf"
-SRC_URI+=" http://dev.gentoo.org/~dilfridge/distfiles/kdelibs-4.8.90-udisks2_backend.patch.bz2"
 
 REQUIRED_USE="
 	udisks? ( udev )
@@ -130,9 +129,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2_prep.patch"
-	"${WORKDIR}/${PN}-4.8.90-udisks2_backend.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2_post.patch"
+	"${FILESDIR}/${PN}-4.8.90-udisks2.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 7e7d1d4..219ece9 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -22,7 +22,6 @@ LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam +handbook jpeg2k kerberos lzma
 mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
 +upower upnp zeroconf"
-SRC_URI+=" http://dev.gentoo.org/~dilfridge/distfiles/kdelibs-4.8.90-udisks2_backend.patch.bz2"
 
 REQUIRED_USE="
 	udisks? ( udev )
@@ -130,9 +129,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2_prep.patch"
-	"${WORKDIR}/${PN}-4.8.90-udisks2_backend.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2_post.patch"
+	"${FILESDIR}/${PN}-4.8.90-udisks2.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-06-19 21:05 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-06-19 21:05 UTC (permalink / raw
  To: gentoo-commits

commit:     f48b439bf8e265d28f97848c224b962d3e45f9a0
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Tue Jun 19 21:06:52 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue Jun 19 21:06:52 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=f48b439b

[kde-base/kdelibs] Make the huge udisks2 patch a distfile

(Portage version: 2.2.0_alpha110/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.90-udisks2_backend.patch     | 3524 --------------------
 kde-base/kdelibs/kdelibs-4.8.90.ebuild             |    5 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    5 +-
 3 files changed, 8 insertions(+), 3526 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_backend.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_backend.patch
deleted file mode 100644
index 74ec3c2..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_backend.patch
+++ /dev/null
@@ -1,3524 +0,0 @@
-diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp b/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp
-new file mode 100644
-index 0000000..7ea4aa8
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp
-@@ -0,0 +1,26 @@
-+/*
-+ * This file was generated by qdbusxml2cpp version 0.7
-+ * Command line was: qdbusxml2cpp -p manager manager.xml
-+ *
-+ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-+ *
-+ * This is an auto-generated file.
-+ * This file may have been hand-edited. Look for HAND-EDIT comments
-+ * before re-generating it.
-+ */
-+
-+#include "manager.h"
-+
-+/*
-+ * Implementation of interface class OrgFreedesktopDBusObjectManagerInterface
-+ */
-+
-+OrgFreedesktopDBusObjectManagerInterface::OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
-+    : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
-+{
-+}
-+
-+OrgFreedesktopDBusObjectManagerInterface::~OrgFreedesktopDBusObjectManagerInterface()
-+{
-+}
-+
-diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.h b/tier1/solid/src/solid/backends/udisks2/dbus/manager.h
-new file mode 100644
-index 0000000..11f0be8
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/dbus/manager.h
-@@ -0,0 +1,59 @@
-+/*
-+ * This file was generated by qdbusxml2cpp version 0.7
-+ * Command line was: qdbusxml2cpp -p manager manager.xml
-+ *
-+ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-+ *
-+ * This is an auto-generated file.
-+ * Do not edit! All changes made to it will be lost.
-+ */
-+
-+#ifndef MANAGER_H_1329493525
-+#define MANAGER_H_1329493525
-+
-+#include <QtCore/QObject>
-+#include <QtCore/QByteArray>
-+#include <QtCore/QList>
-+#include <QtCore/QMap>
-+#include <QtCore/QString>
-+#include <QtCore/QStringList>
-+#include <QtCore/QVariant>
-+#include <QtDBus/QtDBus>
-+
-+#include "../udisks2.h"
-+
-+/*
-+ * Proxy class for interface org.freedesktop.DBus.ObjectManager
-+ */
-+class OrgFreedesktopDBusObjectManagerInterface: public QDBusAbstractInterface
-+{
-+    Q_OBJECT
-+public:
-+    static inline const char *staticInterfaceName()
-+    { return "org.freedesktop.DBus.ObjectManager"; }
-+
-+public:
-+    OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
-+
-+    ~OrgFreedesktopDBusObjectManagerInterface();
-+
-+public Q_SLOTS: // METHODS
-+    inline QDBusPendingReply<DBUSManagerStruct> GetManagedObjects()
-+    {
-+        QList<QVariant> argumentList;
-+        return asyncCallWithArgumentList(QLatin1String("GetManagedObjects"), argumentList);
-+    }
-+
-+Q_SIGNALS: // SIGNALS
-+    void InterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void InterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+};
-+
-+namespace org {
-+  namespace freedesktop {
-+    namespace DBus {
-+      typedef ::OrgFreedesktopDBusObjectManagerInterface ObjectManager;
-+    }
-+  }
-+}
-+#endif
-diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.xml b/tier1/solid/src/solid/backends/udisks2/dbus/manager.xml
-new file mode 100644
-index 0000000..8f25cb6
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/dbus/manager.xml
-@@ -0,0 +1,21 @@
-+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-+                      "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-+<node>
-+  <interface name="org.freedesktop.DBus.ObjectManager">
-+    <method name="GetManagedObjects">
-+      <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out">
-+        <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBUSManagerStruct"/>
-+      </arg>
-+    </method>
-+    <signal name="InterfacesAdded">
-+      <arg type="o" name="object_path"/>
-+      <arg type="a{sa{sv}}" name="interfaces_and_properties">
-+        <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QVariantMapMap"/>
-+      </arg>
-+    </signal>
-+    <signal name="InterfacesRemoved">
-+      <arg type="o" name="object_path"/>
-+      <arg type="as" name="interfaces"/>
-+    </signal>
-+  </interface>
-+</node>
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisks2.h b/tier1/solid/src/solid/backends/udisks2/udisks2.h
-new file mode 100644
-index 0000000..25a1dc0
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisks2.h
-@@ -0,0 +1,77 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef SOLID_BACKENDS_UDISKS2_H
-+#define SOLID_BACKENDS_UDISKS2_H
-+
-+#include <QMetaType>
-+#include <QtDBus>
-+#include <QVariant>
-+#include <QMap>
-+#include <QList>
-+
-+typedef QList<QByteArray> QByteArrayList;
-+Q_DECLARE_METATYPE(QByteArrayList)
-+
-+typedef QMap<QString,QVariantMap> QVariantMapMap;
-+Q_DECLARE_METATYPE(QVariantMapMap)
-+
-+typedef QMap<QDBusObjectPath, QVariantMapMap> DBUSManagerStruct;
-+Q_DECLARE_METATYPE(DBUSManagerStruct)
-+
-+/* UDisks2 */
-+#define UD2_DBUS_SERVICE                 "org.freedesktop.UDisks2"
-+#define UD2_DBUS_PATH                    "/org/freedesktop/UDisks2"
-+#define UD2_UDI_DISKS_PREFIX             "/org/freedesktop/UDisks2"
-+#define UD2_DBUS_PATH_MANAGER            "/org/freedesktop/UDisks2/Manager"
-+#define UD2_DBUS_PATH_DRIVES             "/org/freedesktop/UDisks2/drives/"
-+#define UD2_DBUS_PATH_JOBS               "/org/freedesktop/UDisks2/jobs/"
-+#define DBUS_INTERFACE_PROPS             "org.freedesktop.DBus.Properties"
-+#define DBUS_INTERFACE_INTROSPECT        "org.freedesktop.DBus.Introspectable"
-+#define DBUS_INTERFACE_MANAGER           "org.freedesktop.DBus.ObjectManager"
-+#define UD2_DBUS_INTERFACE_BLOCK         "org.freedesktop.UDisks2.Block"
-+#define UD2_DBUS_INTERFACE_DRIVE         "org.freedesktop.UDisks2.Drive"
-+#define UD2_DBUS_INTERFACE_PARTITION     "org.freedesktop.UDisks2.Partition"
-+#define UD2_DBUS_INTERFACE_PARTITIONTABLE   "org.freedesktop.UDisks2.PartitionTable"
-+#define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
-+#define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
-+#define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
-+
-+/* errors */
-+#define UD2_ERROR_UNAUTHORIZED            "org.freedesktop.PolicyKit.Error.NotAuthorized"
-+#define UD2_ERROR_BUSY                    "org.freedesktop.UDisks2.Error.DeviceBusy"
-+#define UD2_ERROR_FAILED                  "org.freedesktop.UDisks2.Error.Failed"
-+#define UD2_ERROR_CANCELED                "org.freedesktop.UDisks2.Error.Cancelled"
-+#define UD2_ERROR_INVALID_OPTION          "org.freedesktop.UDisks2.Error.OptionNotPermitted"
-+#define UD2_ERROR_MISSING_DRIVER          "org.freedesktop.UDisks2.Error.NotSupported"
-+
-+#define UD2_ERROR_ALREADY_MOUNTED         "org.freedesktop.UDisks2.Error.AlreadyMounted"
-+#define UD2_ERROR_NOT_MOUNTED             "org.freedesktop.UDisks2.Error.NotMounted"
-+#define UD2_ERROR_MOUNTED_BY_OTHER_USER   "org.freedesktop.UDisks2.Error.MountedByOtherUser"
-+#define UD2_ERROR_ALREADY_UNMOUNTING      "org.freedesktop.UDisks2.Error.AlreadyUnmounting"
-+#define UD2_ERROR_TIMED_OUT               "org.freedesktop.UDisks2.Error.Timedout"
-+#define UD2_ERROR_WOULD_WAKEUP            "org.freedesktop.UDisks2.Error.WouldWakeup"
-+#define UD2_ERROR_ALREADY_CANCELLED       "org.freedesktop.UDisks2.Error.AlreadyCancelled"
-+
-+#define UD2_ERROR_NOT_AUTHORIZED          "org.freedesktop.UDisks2.Error.NotAuthorized"
-+#define UD2_ERROR_NOT_AUTHORIZED_CAN_OBTAIN  "org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain"
-+#define UD2_ERROR_NOT_AUTHORIZED_DISMISSED   "org.freedesktop.UDisks2.Error.NotAuthorizedDismissed"
-+
-+#endif // SOLID_BACKENDS_UDISKS2_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp b/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp
-new file mode 100644
-index 0000000..c27b1c4
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp
-@@ -0,0 +1,84 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <linux/kdev_t.h>
-+
-+#include <QFile>
-+#include <QtDBus/QDBusConnection>
-+#include <QtDBus/QDBusPendingReply>
-+
-+#include "udisksblock.h"
-+#include "dbus/manager.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+Block::Block(Device *dev)
-+    : DeviceInterface(dev)
-+{
-+    m_devNum = m_device->prop("DeviceNumber").toULongLong();
-+    m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
-+
-+    // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
-+    if (m_devNum == 0 || m_devFile.isEmpty()) {
-+        org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
-+        QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
-+        reply.waitForFinished();
-+        if (!reply.isError()) {  // enum devices
-+            Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
-+                const QString udi = path.path();
-+
-+                if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
-+                    continue;
-+
-+                Device device(udi);
-+                if (device.drivePath() == dev->udi()) {
-+                    m_devNum = device.prop("DeviceNumber").toULongLong();
-+                    m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
-+                    break;
-+                }
-+            }
-+        }
-+        else  // show error
-+        {
-+            qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
-+        }
-+    }
-+
-+    qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
-+}
-+
-+Block::~Block()
-+{
-+}
-+
-+QString Block::device() const
-+{
-+    return m_devFile;
-+}
-+
-+int Block::deviceMinor() const
-+{
-+    return MINOR(m_devNum);
-+}
-+
-+int Block::deviceMajor() const
-+{
-+    return MAJOR(m_devNum);
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksblock.h b/tier1/solid/src/solid/backends/udisks2/udisksblock.h
-new file mode 100644
-index 0000000..19cb70a
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksblock.h
-@@ -0,0 +1,56 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2BLOCK_H
-+#define UDISKS2BLOCK_H
-+
-+#include <solid/ifaces/block.h>
-+#include "udisksdeviceinterface.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class Block: public DeviceInterface, virtual public Solid::Ifaces::Block
-+{
-+
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::Block)
-+
-+public:
-+    Block(Device *dev);
-+    virtual ~Block();
-+
-+    virtual QString device() const;
-+    virtual int deviceMinor() const;
-+    virtual int deviceMajor() const;
-+private:
-+    dev_t m_devNum;
-+    QString m_devFile;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2BLOCK_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp b/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp
-new file mode 100644
-index 0000000..fb74fa2
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp
-@@ -0,0 +1,910 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksdevice.h"
-+#include "udisksblock.h"
-+#include "udisksdeviceinterface.h"
-+#include "udisksstoragevolume.h"
-+#include "udisksopticaldisc.h"
-+#include "udisksopticaldrive.h"
-+#include "udisksstorageaccess.h"
-+#include "udisksgenericinterface.h"
-+
-+#include <solid/genericinterface.h>
-+#include <solid/deviceinterface.h>
-+#include <solid/device.h>
-+
-+#include <QtCore/QDebug>
-+
-+#include <QtDBus/QDBusMessage>
-+#include <QtDBus/QDBusMetaType>
-+#include <QtDBus/QDBusPendingReply>
-+#include <QtDBus/QDBusArgument>
-+
-+#include <QtXml/QDomDocument>
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+// Adapted from KLocale as Solid needs to be Qt-only
-+static QString formatByteSize(double size)
-+{
-+    // Per IEC 60027-2
-+
-+    // Binary prefixes
-+    //Tebi-byte             TiB             2^40    1,099,511,627,776 bytes
-+    //Gibi-byte             GiB             2^30    1,073,741,824 bytes
-+    //Mebi-byte             MiB             2^20    1,048,576 bytes
-+    //Kibi-byte             KiB             2^10    1,024 bytes
-+
-+    QString s;
-+    // Gibi-byte
-+    if ( size >= 1073741824.0 )
-+    {
-+        size /= 1073741824.0;
-+        if ( size > 1024 ) // Tebi-byte
-+            s = QObject::tr("%1 TiB").arg(QLocale().toString(size / 1024.0, 'f', 1));
-+        else
-+            s = QObject::tr("%1 GiB").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Mebi-byte
-+    else if ( size >= 1048576.0 )
-+    {
-+        size /= 1048576.0;
-+        s = QObject::tr("%1 MiB").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Kibi-byte
-+    else if ( size >= 1024.0 )
-+    {
-+        size /= 1024.0;
-+        s = QObject::tr("%1 KiB").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Just byte
-+    else if ( size > 0 )
-+    {
-+        s = QObject::tr("%1 B").arg(QLocale().toString(size, 'f', 1));
-+    }
-+    // Nothing
-+    else
-+    {
-+        s = QObject::tr("0 B");
-+    }
-+    return s;
-+}
-+
-+Device::Device(const QString &udi)
-+    : Solid::Ifaces::Device()
-+    , m_udi(udi)
-+{
-+    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
-+                                  QString(), // no interface, we aggregate them
-+                                  QDBusConnection::systemBus());
-+
-+    if (m_device->isValid()) {
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                             SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
-+
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
-+                                             this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
-+        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
-+                                             this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
-+
-+        initInterfaces();
-+    }
-+}
-+
-+Device::~Device()
-+{
-+    delete m_device;
-+}
-+
-+QObject* Device::createDeviceInterface(const Solid::DeviceInterface::Type& type)
-+{
-+    if (!queryDeviceInterface(type)) {
-+        return 0;
-+    }
-+
-+    DeviceInterface *iface = 0;
-+    switch (type)
-+    {
-+    case Solid::DeviceInterface::GenericInterface:
-+        iface = new GenericInterface(this);
-+        break;
-+    case Solid::DeviceInterface::Block:
-+        iface = new Block(this);
-+        break;
-+    case Solid::DeviceInterface::StorageAccess:
-+        iface = new StorageAccess(this);
-+        break;
-+    case Solid::DeviceInterface::StorageDrive:
-+        iface = new StorageDrive(this);
-+        break;
-+    case Solid::DeviceInterface::OpticalDrive:
-+        iface = new OpticalDrive(this);
-+        break;
-+    case Solid::DeviceInterface::StorageVolume:
-+        iface = new StorageVolume(this);
-+        break;
-+    case Solid::DeviceInterface::OpticalDisc:
-+        iface = new OpticalDisc(this);
-+        break;
-+    default:
-+        break;
-+    }
-+    return iface;
-+}
-+
-+bool Device::queryDeviceInterface(const Solid::DeviceInterface::Type& type) const
-+{
-+    switch (type) {
-+    case Solid::DeviceInterface::GenericInterface:
-+        return true;
-+    case Solid::DeviceInterface::Block:
-+        return isBlock();
-+    case Solid::DeviceInterface::StorageVolume:
-+        return isStorageVolume();
-+    case Solid::DeviceInterface::StorageAccess:
-+        return isStorageAccess();
-+    case Solid::DeviceInterface::StorageDrive:
-+        return isDrive();
-+    case Solid::DeviceInterface::OpticalDrive:
-+        return isOpticalDrive();
-+    case Solid::DeviceInterface::OpticalDisc:
-+        return isOpticalDisc();
-+    default:
-+        return false;
-+    }
-+}
-+
-+QStringList Device::emblems() const
-+{
-+    QStringList res;
-+
-+    if (queryDeviceInterface(Solid::DeviceInterface::StorageAccess))
-+    {
-+        const UDisks2::StorageAccess accessIface(const_cast<Device *>(this));
-+        if (accessIface.isAccessible())
-+        {
-+            if (isEncryptedContainer())
-+                res << "emblem-encrypted-unlocked";
-+            else
-+                res << "emblem-mounted";
-+        }
-+        else
-+        {
-+            if (isEncryptedContainer())
-+                res << "emblem-encrypted-locked";
-+            else
-+                res << "emblem-unmounted";
-+        }
-+    }
-+
-+    return res;
-+}
-+
-+QString Device::description() const
-+{
-+    const QString hintName = prop("HintName").toString();
-+    if (!hintName.isEmpty())
-+        return hintName;
-+
-+    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
-+        return storageDescription();
-+    else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
-+        return volumeDescription();
-+    else
-+        return product();
-+}
-+
-+QString Device::storageDescription() const
-+{
-+    QString description;
-+    const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
-+    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
-+    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
-+
-+    if (drive_type == Solid::StorageDrive::CdromDrive)
-+    {
-+        const UDisks2::OpticalDrive opticalDrive(const_cast<Device*>(this));
-+        Solid::OpticalDrive::MediumTypes mediumTypes = opticalDrive.supportedMedia();
-+        QString first;
-+        QString second;
-+
-+        first = QObject::tr("CD-ROM", "First item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Cdr)
-+            first = QObject::tr("CD-R", "First item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Cdrw)
-+            first = QObject::tr("CD-RW", "First item of %1%2 Drive sentence");
-+
-+        if (mediumTypes & Solid::OpticalDrive::Dvd)
-+            second = QObject::tr("/DVD-ROM", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdplusr)
-+            second = QObject::tr("/DVD+R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdplusrw)
-+            second = QObject::tr("/DVD+RW", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdr)
-+            second = QObject::tr("/DVD-R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdrw)
-+            second = QObject::tr("/DVD-RW", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Dvdram)
-+            second = QObject::tr("/DVD-RAM", "Second item of %1%2 Drive sentence");
-+        if ((mediumTypes & Solid::OpticalDrive::Dvdr) && (mediumTypes & Solid::OpticalDrive::Dvdplusr))
-+        {
-+            if(mediumTypes & Solid::OpticalDrive::Dvdplusdl)
-+                second = QObject::trUtf8("/DVD±R DL", "Second item of %1%2 Drive sentence");
-+            else
-+                second = QObject::trUtf8("/DVD±R", "Second item of %1%2 Drive sentence");
-+        }
-+        if ((mediumTypes & Solid::OpticalDrive::Dvdrw) && (mediumTypes & Solid::OpticalDrive::Dvdplusrw))
-+        {
-+            if((mediumTypes & Solid::OpticalDrive::Dvdplusdl) || (mediumTypes & Solid::OpticalDrive::Dvdplusdlrw))
-+                second = QObject::trUtf8("/DVD±RW DL", "Second item of %1%2 Drive sentence");
-+            else
-+                second = QObject::trUtf8("/DVD±RW", "Second item of %1%2 Drive sentence");
-+        }
-+        if (mediumTypes & Solid::OpticalDrive::Bd)
-+            second = QObject::tr("/BD-ROM", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Bdr)
-+            second = QObject::tr("/BD-R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::Bdre)
-+            second = QObject::tr("/BD-RE", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::HdDvd)
-+            second = QObject::tr("/HD DVD-ROM", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::HdDvdr)
-+            second = QObject::tr("/HD DVD-R", "Second item of %1%2 Drive sentence");
-+        if (mediumTypes & Solid::OpticalDrive::HdDvdrw)
-+            second = QObject::tr("/HD DVD-RW", "Second item of %1%2 Drive sentence");
-+
-+        if (drive_is_hotpluggable)
-+            description = QObject::tr("External %1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
-+        else
-+            description = QObject::tr("%1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
-+
-+        return description;
-+    }
-+
-+    if (drive_type == Solid::StorageDrive::Floppy)
-+    {
-+        if (drive_is_hotpluggable)
-+            description = QObject::tr("External Floppy Drive");
-+        else
-+            description = QObject::tr("Floppy Drive");
-+
-+        return description;
-+    }
-+
-+    bool drive_is_removable = storageDrive.isRemovable();
-+
-+    if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
-+    {
-+        QString size_str = formatByteSize(storageDrive.size());
-+        if (!size_str.isEmpty())
-+        {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
-+            else
-+                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
-+        } else {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("External Hard Drive");
-+            else
-+                description = QObject::tr("Hard Drive");
-+        }
-+
-+        return description;
-+    }
-+
-+    QString vendormodel_str;
-+    QString model = product();
-+    QString vendor_str = vendor();
-+
-+    if (vendor_str.isEmpty())
-+    {
-+        if (!model.isEmpty())
-+            vendormodel_str = model;
-+    }
-+    else
-+    {
-+        if (model.isEmpty())
-+            vendormodel_str = vendor_str;
-+        else
-+        {
-+            if (model.startsWith(vendor_str))
-+            {
-+                // e.g. vendor is "Nokia" and model is "Nokia N950" we do not want "Nokia Nokia N950" as description
-+                vendormodel_str = model;
-+            }
-+            else
-+            {
-+                vendormodel_str = QObject::tr("%1 %2", "%1 is the vendor, %2 is the model of the device").arg(vendor_str).arg(model);
-+            }
-+        }
-+    }
-+
-+    if (vendormodel_str.isEmpty())
-+        description = QObject::tr("Drive");
-+    else
-+        description = vendormodel_str;
-+
-+    return description;
-+}
-+
-+QString Device::volumeDescription() const
-+{
-+    QString description;
-+    const UDisks2::StorageVolume storageVolume(const_cast<Device*>(this));
-+    QString volume_label = prop("IdLabel").toString();
-+    if (volume_label.isEmpty())
-+        volume_label = prop("Name").toString();
-+    if (!volume_label.isEmpty())
-+        return volume_label;
-+
-+    UDisks2::Device storageDevice(drivePath());
-+    const UDisks2::StorageDrive storageDrive(&storageDevice);
-+    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
-+
-+    // Handle media in optical drives
-+    if (drive_type == Solid::StorageDrive::CdromDrive)
-+    {
-+        const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
-+        switch (disc.discType())
-+        {
-+            case Solid::OpticalDisc::UnknownDiscType:
-+            case Solid::OpticalDisc::CdRom:
-+                description = QObject::tr("CD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::CdRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank CD-R");
-+                else
-+                    description = QObject::tr("CD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::CdRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank CD-RW");
-+                else
-+                    description = QObject::tr("CD-RW");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRom:
-+                description = QObject::tr("DVD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRam:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD-RAM");
-+                else
-+                    description = QObject::tr("DVD-RAM");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD-R");
-+                else
-+                    description = QObject::tr("DVD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRecordableDuallayer:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+R Dual-Layer");
-+                else
-+                    description = QObject::tr("DVD+R Dual-Layer");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD-RW");
-+                else
-+                    description = QObject::tr("DVD-RW");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+R");
-+                else
-+                    description = QObject::tr("DVD+R");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+RW");
-+                else
-+                    description = QObject::tr("DVD+RW");
-+                break;
-+
-+            case Solid::OpticalDisc::DvdPlusRewritableDuallayer:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank DVD+RW Dual-Layer");
-+                else
-+                    description = QObject::tr("DVD+RW Dual-Layer");
-+                break;
-+
-+            case Solid::OpticalDisc::BluRayRom:
-+                description = QObject::tr("BD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::BluRayRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank BD-R");
-+                else
-+                    description = QObject::tr("BD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::BluRayRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank BD-RE");
-+                else
-+                    description = QObject::tr("BD-RE");
-+                break;
-+
-+            case Solid::OpticalDisc::HdDvdRom:
-+                description = QObject::tr("HD DVD-ROM");
-+                break;
-+
-+            case Solid::OpticalDisc::HdDvdRecordable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank HD DVD-R");
-+                else
-+                    description = QObject::tr("HD DVD-R");
-+                break;
-+
-+            case Solid::OpticalDisc::HdDvdRewritable:
-+                if (disc.isBlank())
-+                    description = QObject::tr("Blank HD DVD-RW");
-+                else
-+                    description = QObject::tr("HD DVD-RW");
-+                break;
-+            }
-+
-+        // Special case for pure audio disc
-+        if (disc.availableContent() == Solid::OpticalDisc::Audio)
-+            description = QObject::tr("Audio CD");
-+
-+        return description;
-+    }
-+
-+    const bool drive_is_removable = storageDrive.isRemovable();
-+    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
-+
-+    QString size_str = formatByteSize(storageVolume.size());
-+    if (isEncryptedContainer())
-+    {
-+        if (!size_str.isEmpty())
-+            description = QObject::tr("%1 Encrypted Container", "%1 is the size").arg(size_str);
-+        else
-+            description = QObject::tr("Encrypted Container");
-+    }
-+    else if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
-+    {
-+        if (!size_str.isEmpty())
-+        {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
-+            else
-+                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
-+        }
-+        else
-+        {
-+            if (drive_is_hotpluggable)
-+                description = QObject::tr("External Hard Drive");
-+            else
-+                description = QObject::tr("Hard Drive");
-+        }
-+    }
-+    else
-+    {
-+        if (drive_is_removable)
-+            description = QObject::tr("%1 Removable Media", "%1 is the size").arg(size_str);
-+        else
-+            description = QObject::tr("%1 Media", "%1 is the size").arg(size_str);
-+    }
-+
-+    return description;
-+}
-+
-+QString Device::icon() const
-+{
-+    QString iconName = prop( "HintIconName" ).toString();
-+
-+    if ( !iconName.isEmpty() )
-+    {
-+        return iconName;
-+    }
-+    else if (isDrive()) {
-+        const bool isRemovable = prop("Removable").toBool();
-+        const QString conn = prop("ConnectionBus").toString();
-+
-+        if (isOpticalDrive())
-+            return "drive-optical";
-+        else if (isRemovable && !isOpticalDisc()) {
-+            if (conn == "usb")
-+                return "drive-removable-media-usb";
-+            else
-+                return "drive-removable-media";
-+        }
-+    }
-+    else if (isBlock()) {
-+        Device drive(drivePath());
-+
-+        // handle media
-+        const QString media = drive.prop("Media").toString();
-+
-+        if ( !media.isEmpty() )
-+        {
-+            if ( isOpticalDisc() )    // optical stuff
-+            {
-+                bool isWritable = drive.prop("OpticalBlank").toBool();
-+
-+                const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
-+                Solid::OpticalDisc::ContentTypes availContent = disc.availableContent();
-+
-+                if (availContent & Solid::OpticalDisc::VideoDvd) // Video DVD
-+                    return "media-optical-dvd-video";
-+                else if ((availContent & Solid::OpticalDisc::VideoCd) || (availContent & Solid::OpticalDisc::SuperVideoCd)) // Video CD
-+                    return "media-optical-video";
-+                else if ((availContent & Solid::OpticalDisc::Data) && (availContent & Solid::OpticalDisc::Audio)) // Mixed CD
-+                    return "media-optical-mixed-cd";
-+                else if (availContent & Solid::OpticalDisc::Audio) // Audio CD
-+                    return "media-optical-audio";
-+                else if (availContent & Solid::OpticalDisc::Data) // Data CD
-+                    return "media-optical-data";
-+                else if ( isWritable )
-+                    return "media-optical-recordable";
-+                else
-+                {
-+                    if ( media.startsWith( "optical_dvd" ) || media.startsWith( "optical_hddvd" ) ) // DVD
-+                        return "media-optical-dvd";
-+                    else if ( media.startsWith( "optical_bd" ) ) // BluRay
-+                        return "media-optical-blu-ray";
-+                }
-+
-+                // fallback for every other optical disc
-+                return "media-optical";
-+            }
-+
-+            if ( media == "flash_ms" ) // Flash & Co.
-+                return "media-flash-memory-stick";
-+            else if ( media == "flash_sd" || media == "flash_sdhc" || media == "flash_sdxc" || media == "flash_mmc" )
-+                return "media-flash-sd-mmc";
-+            else if ( media == "flash_sm" )
-+                return "media-flash-smart-media";
-+            else if ( media == "thumb" )
-+                return "drive-removable-media-usb-pendrive";
-+            else if ( media.startsWith( "flash" ) )
-+                return "media-flash";
-+            else if ( media == "floppy" ) // the good ol' floppy
-+                return "media-floppy";
-+        }
-+
-+        if (drive.prop("ConnectionBus").toString() == "sdio")  // hack for SD cards connected thru sdio bus
-+            return "media-flash-sd-mmc";
-+
-+        return drive.icon();
-+    }
-+
-+    return "drive-harddisk";    // general fallback
-+}
-+
-+QString Device::product() const
-+{
-+    QString product = prop("Model").toString();
-+
-+    if (!isDrive()) {
-+        QString label = prop("IdLabel").toString();
-+        if (!label.isEmpty()) {
-+            product = label;
-+        }
-+    }
-+
-+    return product;
-+}
-+
-+QString Device::vendor() const
-+{
-+    return prop("Vendor").toString();
-+}
-+
-+QString Device::udi() const
-+{
-+    return m_udi;
-+}
-+
-+QString Device::parentUdi() const
-+{
-+    QString parent;
-+
-+    if (isEncryptedContainer())
-+        parent = prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
-+    else if (propertyExists("Drive"))  // block
-+        parent = prop("Drive").value<QDBusObjectPath>().path();
-+    else if (propertyExists("Table"))  // partition
-+        parent = prop("Table").value<QDBusObjectPath>().path();
-+    else if (parent.isEmpty() || parent=="/") {
-+        parent = UD2_UDI_DISKS_PREFIX;
-+    }
-+    return parent;
-+}
-+
-+void Device::checkCache(const QString &key) const
-+{
-+    if (m_cache.isEmpty()) // recreate the cache
-+        allProperties();
-+
-+    if (m_cache.contains(key))
-+        return;
-+
-+    QVariant reply = m_device->property(key.toUtf8());
-+
-+    if (reply.isValid()) {
-+        m_cache.insert(key, reply);
-+    } else {
-+        //qDebug() << "got invalid reply for cache:" << key;
-+        //m_cache.insert(key, QVariant());
-+    }
-+}
-+
-+QString Device::introspect() const
-+{
-+    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
-+                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
-+    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
-+    reply.waitForFinished();
-+
-+    if (reply.isValid())
-+        return reply.value();
-+    else {
-+        return QString();
-+    }
-+}
-+
-+QVariant Device::prop(const QString &key) const
-+{
-+    checkCache(key);
-+    return m_cache.value(key);
-+}
-+
-+bool Device::propertyExists(const QString &key) const
-+{
-+    checkCache(key);
-+    return m_cache.contains(key);
-+}
-+
-+QVariantMap Device::allProperties() const
-+{
-+    Q_FOREACH (const QString & iface, m_interfaces) {
-+        if (iface.startsWith("org.freedesktop.DBus"))
-+            continue;
-+        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
-+        call << iface;
-+        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
-+        reply.waitForFinished();
-+
-+        if (reply.isValid())
-+            m_cache.unite(reply.value());
-+        else
-+            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
-+        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
-+    }
-+
-+    return m_cache;
-+}
-+
-+bool Device::hasInterface(const QString &name) const
-+{
-+    return m_interfaces.contains(name);
-+}
-+
-+QStringList Device::interfaces() const
-+{
-+    return m_interfaces;
-+}
-+
-+void Device::initInterfaces()
-+{
-+    m_interfaces.clear();
-+    const QString xmlData = introspect();
-+    QDomDocument dom;
-+    dom.setContent(xmlData);
-+    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
-+    for (int i = 0; i < ifaceNodeList.count(); i++) {
-+        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
-+        if (!ifaceElem.isNull())
-+            m_interfaces.append(ifaceElem.attribute("name"));
-+    }
-+    //qDebug() << "Device" << m_udi << "has interfaces:" << m_interfaces;
-+}
-+
-+void Device::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
-+{
-+    //Q_UNUSED(ifaceName);
-+
-+    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
-+
-+    QMap<QString, int> changeMap;
-+
-+    Q_FOREACH(const QString & key, invalidatedProps) {
-+        m_cache.remove(key);
-+        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
-+        qDebug() << "\t invalidated:" << key;
-+    }
-+
-+    QMapIterator<QString, QVariant> i(changedProps);
-+    while (i.hasNext()) {
-+        i.next();
-+        const QString key = i.key();
-+        m_cache.insert(key, i.value());  // replace the value
-+        changeMap.insert(key, Solid::GenericInterface::PropertyModified);
-+        qDebug() << "\t modified:" << key << ":" << m_cache.value(key);
-+    }
-+
-+    Q_EMIT propertyChanged(changeMap);
-+    Q_EMIT changed();
-+}
-+
-+void Device::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
-+{
-+    if (object_path.path() == m_udi) {
-+        m_interfaces.append(interfaces_and_properties.keys());
-+    }
-+}
-+
-+void Device::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
-+{
-+    if (object_path.path() == m_udi) {
-+        Q_FOREACH(const QString & iface, interfaces) {
-+            m_interfaces.removeAll(iface);
-+        }
-+    }
-+}
-+
-+
-+QString Device::errorToString(const QString & error) const
-+{
-+    if (error == UD2_ERROR_UNAUTHORIZED || error == UD2_ERROR_NOT_AUTHORIZED)
-+        return QObject::tr("You are not authorized to perform this operation");
-+    else if (error == UD2_ERROR_BUSY)
-+        return QObject::tr("The device is currently busy");
-+    else if (error == UD2_ERROR_FAILED)
-+        return QObject::tr("The requested operation has failed");
-+    else if (error == UD2_ERROR_CANCELED)
-+        return QObject::tr("The requested operation has been canceled");
-+    else if (error == UD2_ERROR_INVALID_OPTION)
-+        return QObject::tr("An invalid or malformed option has been given");
-+    else if (error == UD2_ERROR_MISSING_DRIVER)
-+        return QObject::tr("The kernel driver for this filesystem type is not available");
-+    else if (error == UD2_ERROR_ALREADY_MOUNTED)
-+        return QObject::tr("The device is already mounted");
-+    else if (error == UD2_ERROR_NOT_MOUNTED)
-+        return QObject::tr("The device is not mounted");
-+    else if (error == UD2_ERROR_MOUNTED_BY_OTHER_USER)
-+        return QObject::tr("The device is mounted by another user");
-+    else if (error == UD2_ERROR_ALREADY_UNMOUNTING)
-+        return QObject::tr("The device is already unmounting");
-+    else if (error == UD2_ERROR_TIMED_OUT)
-+        return QObject::tr("The operation timed out");
-+    else if (error == UD2_ERROR_WOULD_WAKEUP)
-+        return QObject::tr("The operation would wake up a disk that is in a deep-sleep state");
-+    else if (error == UD2_ERROR_ALREADY_CANCELLED)
-+        return QObject::tr("The operation has already been canceled");
-+    else
-+        return QObject::tr("An unspecified error has occurred");
-+}
-+
-+Solid::ErrorType Device::errorToSolidError(const QString & error) const
-+{
-+    if (error == UD2_ERROR_BUSY)
-+        return Solid::DeviceBusy;
-+    else if (error == UD2_ERROR_FAILED)
-+        return Solid::OperationFailed;
-+    else if (error == UD2_ERROR_CANCELED)
-+        return Solid::UserCanceled;
-+    else if (error == UD2_ERROR_INVALID_OPTION)
-+        return Solid::InvalidOption;
-+    else if (error == UD2_ERROR_MISSING_DRIVER)
-+        return Solid::MissingDriver;
-+    else
-+        return Solid::UnauthorizedOperation;
-+}
-+
-+bool Device::isBlock() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_BLOCK);
-+}
-+
-+bool Device::isPartition() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_PARTITION);
-+}
-+
-+bool Device::isPartitionTable() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_PARTITIONTABLE);
-+}
-+
-+bool Device::isStorageVolume() const
-+{
-+    return isPartition() || isPartitionTable() || isStorageAccess() || isOpticalDisc();
-+}
-+
-+bool Device::isStorageAccess() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM) || isEncryptedContainer();
-+}
-+
-+bool Device::isDrive() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_DRIVE);
-+}
-+
-+bool Device::isOpticalDrive() const
-+{
-+    return isDrive() && !prop("MediaCompatibility").toStringList().filter("optical_").isEmpty();
-+}
-+
-+bool Device::isOpticalDisc() const
-+{
-+    const QString drv = drivePath();
-+    if (drv.isEmpty() || drv == "/")
-+        return false;
-+
-+    Device drive(drv);
-+    return drive.prop("Optical").toBool();
-+}
-+
-+bool Device::mightBeOpticalDisc() const
-+{
-+    const QString drv = drivePath();
-+    if (drv.isEmpty() || drv == "/")
-+        return false;
-+
-+    Device drive(drv);
-+    return drive.isOpticalDrive();
-+}
-+
-+bool Device::isMounted() const
-+{
-+    return propertyExists("MountPoints") && !qdbus_cast<QByteArrayList>(prop("MountPoints")).isEmpty();
-+}
-+
-+bool Device::isEncryptedContainer() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_ENCRYPTED);
-+}
-+
-+bool Device::isEncryptedCleartext() const
-+{
-+    const QString holderDevice = prop("CryptoBackingDevice").toString();
-+    if (holderDevice.isEmpty() || holderDevice == "/")
-+        return false;
-+    else
-+        return true;
-+}
-+
-+bool Device::isSwap() const
-+{
-+    return hasInterface(UD2_DBUS_INTERFACE_SWAP);
-+}
-+
-+QString Device::drivePath() const
-+{
-+    return prop("Drive").value<QDBusObjectPath>().path();
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdevice.h b/tier1/solid/src/solid/backends/udisks2/udisksdevice.h
-new file mode 100644
-index 0000000..cf8e2f5
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksdevice.h
-@@ -0,0 +1,112 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2DEVICE_H
-+#define UDISKS2DEVICE_H
-+
-+#include "udisks2.h"
-+
-+#include <ifaces/device.h>
-+#include <solid/deviceinterface.h>
-+#include <solid/solidnamespace.h>
-+
-+#include <QtDBus/QDBusInterface>
-+#include <QtDBus/QDBusObjectPath>
-+#include <QtCore/QStringList>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class Device: public Solid::Ifaces::Device
-+{
-+    Q_OBJECT
-+public:
-+    Device(const QString &udi);
-+    virtual ~Device();
-+
-+    virtual QObject* createDeviceInterface(const Solid::DeviceInterface::Type& type);
-+    virtual bool queryDeviceInterface(const Solid::DeviceInterface::Type& type) const;
-+    virtual QString description() const;
-+    virtual QStringList emblems() const;
-+    virtual QString icon() const;
-+    virtual QString product() const;
-+    virtual QString vendor() const;
-+    virtual QString udi() const;
-+    virtual QString parentUdi() const;
-+
-+    QVariant prop(const QString &key) const;
-+    bool propertyExists(const QString &key) const;
-+    QVariantMap allProperties() const;
-+
-+    bool hasInterface(const QString & name) const;
-+    QStringList interfaces() const;
-+
-+    QString errorToString(const QString & error) const;
-+    Solid::ErrorType errorToSolidError(const QString & error) const;
-+
-+    bool isBlock() const;
-+    bool isPartition() const;
-+    bool isPartitionTable() const;
-+    bool isStorageVolume() const;
-+    bool isStorageAccess() const;
-+    bool isDrive() const;
-+    bool isOpticalDrive() const;
-+    bool isOpticalDisc() const;
-+    bool mightBeOpticalDisc() const;
-+    bool isMounted() const;
-+    bool isEncryptedContainer() const;
-+    bool isEncryptedCleartext() const;
-+    bool isSwap() const;
-+
-+    QString drivePath() const;
-+
-+Q_SIGNALS:
-+    void changed();
-+    void propertyChanged(const QMap<QString,int> &changes);
-+
-+private Q_SLOTS:
-+    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
-+    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+
-+private:
-+    QString storageDescription() const;
-+    QString volumeDescription() const;
-+    mutable QDBusInterface *m_device;
-+    QString m_udi;
-+    mutable QVariantMap m_cache;
-+
-+    void initInterfaces();
-+    QStringList m_interfaces;
-+
-+    void checkCache(const QString &key) const;
-+    QString introspect() const;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2DEVICE_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.cpp b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.cpp
-new file mode 100644
-index 0000000..9fa60e5
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.cpp
-@@ -0,0 +1,33 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksdeviceinterface.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+DeviceInterface::DeviceInterface(Device *device)
-+    : QObject(device), m_device(device)
-+{
-+
-+}
-+
-+DeviceInterface::~DeviceInterface()
-+{
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.h b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.h
-new file mode 100644
-index 0000000..43a1b6f
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.h
-@@ -0,0 +1,148 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2DEVICEINTERFACE_H
-+#define UDISKS2DEVICEINTERFACE_H
-+
-+#include <ifaces/deviceinterface.h>
-+#include "udisksdevice.h"
-+
-+#include <QtCore/QObject>
-+#include <QtCore/QStringList>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class DeviceInterface : public QObject, virtual public Solid::Ifaces::DeviceInterface
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::DeviceInterface)
-+public:
-+    DeviceInterface(Device *device);
-+    virtual ~DeviceInterface();
-+
-+protected:
-+    Device *m_device;
-+
-+public:
-+    inline static QStringList toStringList(Solid::DeviceInterface::Type type)
-+    {
-+        QStringList list;
-+
-+        switch(type)
-+        {
-+        case Solid::DeviceInterface::GenericInterface:
-+            list << "generic";
-+            break;
-+        case Solid::DeviceInterface::Processor:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Block:
-+            list << "block";
-+            break;
-+        case Solid::DeviceInterface::StorageAccess:
-+            list << "volume";
-+            break;
-+        case Solid::DeviceInterface::StorageDrive:
-+            list << "storage";
-+            break;
-+        case Solid::DeviceInterface::OpticalDrive:
-+            list << "storage.cdrom";
-+            break;
-+        case Solid::DeviceInterface::StorageVolume:
-+            list << "volume";
-+            break;
-+        case Solid::DeviceInterface::OpticalDisc:
-+            list << "volume.disc";
-+            break;
-+        case Solid::DeviceInterface::Camera:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::PortableMediaPlayer:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::NetworkInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::AcAdapter:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Battery:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Button:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::AudioInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::DvbInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Video:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::SerialInterface:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::InternetGateway:
-+            break;
-+        case Solid::DeviceInterface::SmartCardReader:
-+            // Doesn't exist with UDisks
-+        case Solid::DeviceInterface::NetworkShare:
-+            // Doesn't exist with UDisks
-+            break;
-+        case Solid::DeviceInterface::Unknown:
-+            break;
-+        case Solid::DeviceInterface::Last:
-+            break;
-+        }
-+
-+        return list;
-+    }
-+
-+    inline static Solid::DeviceInterface::Type fromString(const QString &capability)
-+    {
-+        if (capability == "generic")
-+            return Solid::DeviceInterface::GenericInterface;
-+        else if (capability == "block")
-+            return Solid::DeviceInterface::Block;
-+        else if (capability == "storage")
-+            return Solid::DeviceInterface::StorageDrive;
-+        else if (capability == "storage.cdrom")
-+            return Solid::DeviceInterface::OpticalDrive;
-+        else if (capability == "volume")
-+            return Solid::DeviceInterface::StorageVolume;
-+        else if (capability == "volume.disc")
-+            return Solid::DeviceInterface::OpticalDisc;
-+        else
-+            return Solid::DeviceInterface::Unknown;
-+    }
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2DEVICEINTERFACE_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.cpp b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.cpp
-new file mode 100644
-index 0000000..2d8cea2
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.cpp
-@@ -0,0 +1,53 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksgenericinterface.h"
-+
-+#include "udisksdevice.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+GenericInterface::GenericInterface(Device *device)
-+    : DeviceInterface(device)
-+{
-+    connect(device, SIGNAL(propertyChanged(QMap<QString,int>)),
-+            this, SIGNAL(propertyChanged(QMap<QString,int>)));
-+}
-+
-+GenericInterface::~GenericInterface()
-+{
-+}
-+
-+QVariant GenericInterface::property(const QString &key) const
-+{
-+    return m_device->prop(key);
-+}
-+
-+QVariantMap GenericInterface::allProperties() const
-+{
-+    return m_device->allProperties();
-+}
-+
-+bool GenericInterface::propertyExists(const QString &key) const
-+{
-+    return m_device->propertyExists(key);
-+}
-+
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.h b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.h
-new file mode 100644
-index 0000000..d225f32
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.h
-@@ -0,0 +1,57 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
-+#define SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
-+
-+#include <solid/ifaces/genericinterface.h>
-+#include <solid/genericinterface.h>
-+#include "udisksdeviceinterface.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+class Device;
-+
-+class GenericInterface : public DeviceInterface, virtual public Solid::Ifaces::GenericInterface
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::GenericInterface)
-+
-+public:
-+    GenericInterface(Device *device);
-+    virtual ~GenericInterface();
-+
-+    virtual QVariant property(const QString &key) const;
-+    virtual QVariantMap allProperties() const;
-+    virtual bool propertyExists(const QString &key) const;
-+
-+Q_SIGNALS:
-+    void propertyChanged(const QMap<QString, int> &changes);
-+    void conditionRaised(const QString &condition, const QString &reason);
-+};
-+}
-+}
-+}
-+
-+#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp b/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp
-new file mode 100644
-index 0000000..9af8ee2
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp
-@@ -0,0 +1,227 @@
-+/*
-+    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksmanager.h"
-+
-+#include <QtCore/QDebug>
-+#include <QtDBus>
-+
-+#include "../shared/rootdevice.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+using namespace Solid::Backends::Shared;
-+
-+Manager::Manager(QObject *parent)
-+    : Solid::Ifaces::DeviceManager(parent),
-+      m_manager(UD2_DBUS_SERVICE,
-+                UD2_DBUS_PATH,
-+                QDBusConnection::systemBus())
-+{
-+    m_supportedInterfaces
-+            << Solid::DeviceInterface::GenericInterface
-+            << Solid::DeviceInterface::Block
-+            << Solid::DeviceInterface::StorageAccess
-+            << Solid::DeviceInterface::StorageDrive
-+            << Solid::DeviceInterface::OpticalDrive
-+            << Solid::DeviceInterface::OpticalDisc
-+            << Solid::DeviceInterface::StorageVolume;
-+
-+    qDBusRegisterMetaType<QList<QDBusObjectPath> >();
-+    qDBusRegisterMetaType<QVariantMap>();
-+    qDBusRegisterMetaType<QVariantMapMap>();
-+    qDBusRegisterMetaType<QByteArrayList>();
-+    qDBusRegisterMetaType<DBUSManagerStruct>();
-+
-+    bool serviceFound = m_manager.isValid();
-+    if (!serviceFound) {
-+        // find out whether it will be activated automatically
-+        QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus",
-+                                                              "/org/freedesktop/DBus",
-+                                                              "org.freedesktop.DBus",
-+                                                              "ListActivatableNames");
-+
-+        QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
-+        if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
-+            QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
-+            serviceFound = true;
-+        }
-+    }
-+
-+    if (serviceFound) {
-+        connect(&m_manager, SIGNAL(InterfacesAdded(QDBusObjectPath, QVariantMapMap)),
-+                this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
-+        connect(&m_manager, SIGNAL(InterfacesRemoved(QDBusObjectPath,QStringList)),
-+                this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
-+    }
-+}
-+
-+Manager::~Manager()
-+{
-+}
-+
-+QObject* Manager::createDevice(const QString& udi)
-+{
-+    if (udi==udiPrefix()) {
-+        RootDevice *root = new RootDevice(udi);
-+
-+        root->setProduct(tr("Storage"));
-+        root->setDescription(tr("Storage devices"));
-+        root->setIcon("server-database"); // Obviously wasn't meant for that, but maps nicely in oxygen icon set :-p
-+
-+        return root;
-+    } else if (deviceCache().contains(udi)) {
-+        return new Device(udi);
-+    } else {
-+        return 0;
-+    }
-+}
-+
-+QStringList Manager::devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type)
-+{
-+    QStringList result;
-+
-+    if (!parentUdi.isEmpty())
-+    {
-+        Q_FOREACH (const QString &udi, deviceCache())
-+        {
-+            Device device(udi);
-+            if (device.queryDeviceInterface(type) && device.parentUdi() == parentUdi)
-+                result << udi;
-+        }
-+
-+        return result;
-+    }
-+    else if (type != Solid::DeviceInterface::Unknown)
-+    {
-+        Q_FOREACH (const QString &udi, deviceCache())
-+        {
-+            Device device(udi);
-+            if (device.queryDeviceInterface(type))
-+                result << udi;
-+        }
-+
-+        return result;
-+    }
-+
-+    return deviceCache();
-+}
-+
-+QStringList Manager::allDevices()
-+{
-+    m_deviceCache.clear();
-+
-+    QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
-+    reply.waitForFinished();
-+    if (!reply.isError()) {  // enum devices
-+        m_deviceCache << udiPrefix();
-+
-+        Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
-+            const QString udi = path.path();
-+            qDebug() << "Adding device" << udi;
-+
-+            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
-+                continue;
-+
-+            Device device(udi);
-+            if (device.mightBeOpticalDisc()) {
-+                QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                                     SLOT(slotMediaChanged(QDBusMessage)));
-+                if (!device.isOpticalDisc())  // skip empty CD disc
-+                    continue;
-+            }
-+
-+            m_deviceCache.append(udi);
-+        }
-+    }
-+    else  // show error
-+    {
-+        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
-+    }
-+
-+    return m_deviceCache;
-+}
-+
-+
-+QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
-+{
-+    return m_supportedInterfaces;
-+}
-+
-+QString Manager::udiPrefix() const
-+{
-+    return UD2_UDI_DISKS_PREFIX;
-+}
-+
-+void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
-+{
-+    const QString udi = object_path.path();
-+
-+    qDebug() << udi << "has new interfaces:" << interfaces_and_properties.keys();
-+
-+    // new device, we don't know it yet
-+    if (!m_deviceCache.contains(udi)) {
-+        m_deviceCache.append(udi);
-+        Q_EMIT deviceAdded(udi);
-+    }
-+}
-+
-+void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
-+{
-+    const QString udi = object_path.path();
-+
-+    qDebug() << udi << "lost interfaces:" << interfaces;
-+
-+    Device device(udi);
-+
-+    if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty() || device.interfaces().contains(UD2_DBUS_INTERFACE_FILESYSTEM))) {
-+        Q_EMIT deviceRemoved(udi);
-+        m_deviceCache.removeAll(udi);
-+    }
-+}
-+
-+void Manager::slotMediaChanged(const QDBusMessage & msg)
-+{
-+    const QVariantMap properties = qdbus_cast<QVariantMap>(msg.arguments().at(1));
-+
-+    if (!properties.contains("Size"))  // react only on Size changes
-+        return;
-+
-+    const QString udi = msg.path();
-+    qulonglong size = properties.value("Size").toULongLong();
-+    qDebug() << "MEDIA CHANGED in" << udi << "; size is:" << size;
-+
-+    if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the optdisc, got inserted
-+        m_deviceCache.append(udi);
-+        Q_EMIT deviceAdded(udi);
-+    }
-+
-+    if (m_deviceCache.contains(udi) && size == 0) {  // we know the optdisc, got removed
-+        Q_EMIT deviceRemoved(udi);
-+        m_deviceCache.removeAll(udi);
-+    }
-+}
-+
-+const QStringList & Manager::deviceCache()
-+{
-+    if (m_deviceCache.isEmpty())
-+        allDevices();
-+
-+    return m_deviceCache;
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksmanager.h b/tier1/solid/src/solid/backends/udisks2/udisksmanager.h
-new file mode 100644
-index 0000000..7cf0a72
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksmanager.h
-@@ -0,0 +1,69 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2MANAGER_H
-+#define UDISKS2MANAGER_H
-+
-+#include "udisks2.h"
-+#include "udisksdevice.h"
-+#include "dbus/manager.h"
-+
-+#include "solid/ifaces/devicemanager.h"
-+
-+#include <QtDBus/QDBusInterface>
-+#include <QtCore/QSet>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class Manager: public Solid::Ifaces::DeviceManager
-+{
-+    Q_OBJECT
-+
-+public:
-+    Manager(QObject *parent);
-+    virtual QObject* createDevice(const QString& udi);
-+    virtual QStringList devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type);
-+    virtual QStringList allDevices();
-+    virtual QSet< Solid::DeviceInterface::Type > supportedInterfaces() const;
-+    virtual QString udiPrefix() const;
-+    virtual ~Manager();
-+
-+private Q_SLOTS:
-+    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
-+    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
-+    void slotMediaChanged(const QDBusMessage &msg);
-+
-+private:
-+    const QStringList &deviceCache();
-+    QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
-+    org::freedesktop::DBus::ObjectManager m_manager;
-+    QStringList m_deviceCache;
-+};
-+
-+}
-+}
-+}
-+#endif // UDISKS2MANAGER_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp
-new file mode 100644
-index 0000000..478c930
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp
-@@ -0,0 +1,277 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <sys/types.h>
-+#include <unistd.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+
-+#include <QtCore/QFile>
-+#include <QtDBus/QDBusConnection>
-+
-+#include "../shared/udevqtclient.h"
-+
-+#include "udisks2.h"
-+#include "udisksopticaldisc.h"
-+
-+// inspired by http://cgit.freedesktop.org/hal/tree/hald/linux/probing/probe-volume.c
-+static Solid::OpticalDisc::ContentType advancedDiscDetect(const QByteArray & device_file)
-+{
-+    /* the discs block size */
-+    unsigned short bs;
-+    /* the path table size */
-+    unsigned short ts;
-+    /* the path table location (in blocks) */
-+    unsigned int tl;
-+    /* length of the directory name in current path table entry */
-+    unsigned char len_di = 0;
-+    /* the number of the parent directory's path table entry */
-+    unsigned int parent = 0;
-+    /* filename for the current path table entry */
-+    char dirname[256];
-+    /* our position into the path table */
-+    int pos = 0;
-+    /* the path table record we're on */
-+    int curr_record = 1;
-+
-+    Solid::OpticalDisc::ContentType result = Solid::OpticalDisc::NoContent;
-+
-+    int fd = open(device_file.constData(), O_RDONLY);
-+
-+    /* read the block size */
-+    lseek (fd, 0x8080, SEEK_CUR);
-+    if (read (fd, &bs, 2) != 2)
-+    {
-+        qDebug("Advanced probing on %s failed while reading block size", qPrintable(device_file));
-+        goto out;
-+    }
-+
-+    /* read in size of path table */
-+    lseek (fd, 2, SEEK_CUR);
-+    if (read (fd, &ts, 2) != 2)
-+    {
-+        qDebug("Advanced probing on %s failed while reading path table size", qPrintable(device_file));
-+        goto out;
-+    }
-+
-+    /* read in which block path table is in */
-+    lseek (fd, 6, SEEK_CUR);
-+    if (read (fd, &tl, 4) != 4)
-+    {
-+        qDebug("Advanced probing on %s failed while reading path table block", qPrintable(device_file));
-+        goto out;
-+    }
-+
-+    /* seek to the path table */
-+    lseek (fd, bs * tl, SEEK_SET);
-+
-+    /* loop through the path table entries */
-+    while (pos < ts)
-+    {
-+        /* get the length of the filename of the current entry */
-+        if (read (fd, &len_di, 1) != 1)
-+        {
-+            qDebug("Advanced probing on %s failed, cannot read more entries", qPrintable(device_file));
-+            break;
-+        }
-+
-+        /* get the record number of this entry's parent
-+           i'm pretty sure that the 1st entry is always the top directory */
-+        lseek (fd, 5, SEEK_CUR);
-+        if (read (fd, &parent, 2) != 2)
-+        {
-+            qDebug("Advanced probing on %s failed, couldn't read parent entry", qPrintable(device_file));
-+            break;
-+        }
-+
-+        /* read the name */
-+        if (read (fd, dirname, len_di) != len_di)
-+        {
-+            qDebug("Advanced probing on %s failed, couldn't read the entry name", qPrintable(device_file));
-+            break;
-+        }
-+        dirname[len_di] = 0;
-+
-+        /* if we found a folder that has the root as a parent, and the directory name matches
-+           one of the special directories then set the properties accordingly */
-+        if (parent == 1)
-+        {
-+            if (!strcasecmp (dirname, "VIDEO_TS"))
-+            {
-+                qDebug("Disc in %s is a Video DVD", qPrintable(device_file));
-+                result = Solid::OpticalDisc::VideoDvd;
-+                break;
-+            }
-+            else if (!strcasecmp (dirname, "BDMV"))
-+            {
-+                qDebug("Disc in %s is a Blu-ray video disc", qPrintable(device_file));
-+                result = Solid::OpticalDisc::VideoBluRay;
-+                break;
-+            }
-+            else if (!strcasecmp (dirname, "VCD"))
-+            {
-+                qDebug("Disc in %s is a Video CD", qPrintable(device_file));
-+                result = Solid::OpticalDisc::VideoCd;
-+                break;
-+            }
-+            else if (!strcasecmp (dirname, "SVCD"))
-+            {
-+                qDebug("Disc in %s is a Super Video CD", qPrintable(device_file));
-+                result = Solid::OpticalDisc::SuperVideoCd;
-+                break;
-+            }
-+        }
-+
-+        /* all path table entries are padded to be even,
-+           so if this is an odd-length table, seek a byte to fix it */
-+        if (len_di%2 == 1)
-+        {
-+            lseek (fd, 1, SEEK_CUR);
-+            pos++;
-+        }
-+
-+        /* update our position */
-+        pos += 8 + len_di;
-+        curr_record++;
-+    }
-+
-+    close(fd);
-+    return result;
-+
-+out:
-+    /* go back to the start of the file */
-+    lseek (fd, 0, SEEK_SET);
-+    close(fd);
-+    return result;
-+}
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+OpticalDisc::OpticalDisc(Device *dev)
-+    : StorageVolume(dev), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
-+{
-+    UdevQt::Client client(this);
-+    m_udevDevice = client.deviceByDeviceFile(device());
-+    //qDebug() << "udev device:" << m_udevDevice.name() << "valid:" << m_udevDevice.isValid();
-+    /*qDebug() << "\tProperties:" << */ m_udevDevice.deviceProperties(); // initialize the properties DB so that it doesn't crash further down, #298416
-+
-+    m_drive = new Device(m_device->prop("Drive").value<QDBusObjectPath>().path());
-+    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_drive->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                         SLOT(slotDrivePropertiesChanged(QString,QVariantMap,QStringList)));
-+}
-+
-+OpticalDisc::~OpticalDisc()
-+{
-+    delete m_drive;
-+}
-+
-+qulonglong OpticalDisc::capacity() const
-+{
-+    return m_device->prop("Size").toULongLong();
-+}
-+
-+bool OpticalDisc::isRewritable() const
-+{
-+    // the hard way, udisks has no notion of a disc "rewritability"
-+    const QString mediaType = media();
-+    return mediaType == "optical_cd_rw" || mediaType == "optical_dvd_rw" || mediaType == "optical_dvd_ram" ||
-+            mediaType == "optical_dvd_plus_rw" || mediaType == "optical_dvd_plus_rw_dl" ||
-+            mediaType == "optical_bd_re" || mediaType == "optical_hddvd_rw";
-+}
-+
-+bool OpticalDisc::isBlank() const
-+{
-+    return m_drive->prop("OpticalBlank").toBool();
-+}
-+
-+bool OpticalDisc::isAppendable() const
-+{
-+    //qDebug() << "appendable prop" << m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE");
-+    return m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE").toString() == QLatin1String("appendable");
-+}
-+
-+Solid::OpticalDisc::DiscType OpticalDisc::discType() const
-+{
-+    QMap<Solid::OpticalDisc::DiscType, QString> map;
-+    map[Solid::OpticalDisc::CdRom] = "optical_cd";
-+    map[Solid::OpticalDisc::CdRecordable] = "optical_cd_r";
-+    map[Solid::OpticalDisc::CdRewritable] = "optical_cd_rw";
-+    map[Solid::OpticalDisc::DvdRom] = "optical_dvd";
-+    map[Solid::OpticalDisc::DvdRecordable] = "optical_dvd_r";
-+    map[Solid::OpticalDisc::DvdRewritable] ="optical_dvd_rw";
-+    map[Solid::OpticalDisc::DvdRam] ="optical_dvd_ram";
-+    map[Solid::OpticalDisc::DvdPlusRecordable] ="optical_dvd_plus_r";
-+    map[Solid::OpticalDisc::DvdPlusRewritable] ="optical_dvd_plus_rw";
-+    map[Solid::OpticalDisc::DvdPlusRecordableDuallayer] ="optical_dvd_plus_r_dl";
-+    map[Solid::OpticalDisc::DvdPlusRewritableDuallayer] ="optical_dvd_plus_rw_dl";
-+    map[Solid::OpticalDisc::BluRayRom] ="optical_bd";
-+    map[Solid::OpticalDisc::BluRayRecordable] ="optical_bd_r";
-+    map[Solid::OpticalDisc::BluRayRewritable] ="optical_bd_re";
-+    map[Solid::OpticalDisc::HdDvdRom] ="optical_hddvd";
-+    map[Solid::OpticalDisc::HdDvdRecordable] ="optical_hddvd_r";
-+    map[Solid::OpticalDisc::HdDvdRewritable] ="optical_hddvd_rw";
-+    // TODO add these to Solid
-+    //map[Solid::OpticalDisc::MagnetoOptical] ="optical_mo";
-+    //map[Solid::OpticalDisc::MountRainer] ="optical_mrw";
-+    //map[Solid::OpticalDisc::MountRainerWritable] ="optical_mrw_w";
-+
-+    return map.key(media(), Solid::OpticalDisc::UnknownDiscType);  // FIXME optimize, lookup by value, not key
-+}
-+
-+Solid::OpticalDisc::ContentTypes OpticalDisc::availableContent() const
-+{
-+    if (isBlank()) {
-+        m_needsReprobe = false;
-+        return Solid::OpticalDisc::NoContent;
-+    }
-+
-+    if (m_needsReprobe) {
-+        m_cachedContent = Solid::OpticalDisc::NoContent;
-+        const bool hasData = m_drive->prop("OpticalNumDataTracks").toUInt() > 0;
-+        const bool hasAudio = m_drive->prop("OpticalNumAudioTracks").toUInt() > 0;
-+
-+        if ( hasData ) {
-+            m_cachedContent |= Solid::OpticalDisc::Data;
-+            m_cachedContent |= advancedDiscDetect(m_device->prop("Device").toByteArray());
-+        }
-+        if ( hasAudio )
-+            m_cachedContent |= Solid::OpticalDisc::Audio;
-+
-+        m_needsReprobe = false;
-+    }
-+
-+    return m_cachedContent;
-+}
-+
-+void OpticalDisc::slotDrivePropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
-+{
-+    Q_UNUSED(ifaceName);
-+
-+    if (changedProps.keys().contains("Media") || invalidatedProps.contains("Media")) {
-+        m_needsReprobe = true;
-+        m_cachedContent = Solid::OpticalDisc::NoContent;
-+    }
-+}
-+
-+QString OpticalDisc::media() const
-+{
-+    return m_drive->prop("Media").toString();
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h
-new file mode 100644
-index 0000000..5b80995
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h
-@@ -0,0 +1,69 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2OPTICALDISC_H
-+#define UDISKS2OPTICALDISC_H
-+
-+#include <solid/ifaces/opticaldisc.h>
-+
-+#include "../shared/udevqtdevice.h"
-+
-+#include "udisksstoragevolume.h"
-+#include "udisksdevice.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class OpticalDisc: public StorageVolume, virtual public Solid::Ifaces::OpticalDisc
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::OpticalDisc)
-+
-+public:
-+    OpticalDisc(Device *dev);
-+    virtual ~OpticalDisc();
-+
-+    virtual qulonglong capacity() const;
-+    virtual bool isRewritable() const;
-+    virtual bool isBlank() const;
-+    virtual bool isAppendable() const;
-+    virtual Solid::OpticalDisc::DiscType discType() const;
-+    virtual Solid::OpticalDisc::ContentTypes availableContent() const;
-+
-+private Q_SLOTS:
-+    void slotDrivePropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
-+
-+private:
-+    QString media() const;
-+    mutable bool m_needsReprobe;
-+    mutable Solid::OpticalDisc::ContentTypes m_cachedContent;
-+    Device * m_drive;
-+    UdevQt::Device m_udevDevice;
-+};
-+
-+}
-+}
-+}
-+#endif // UDISKS2OPTICALDISC_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.cpp b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.cpp
-new file mode 100644
-index 0000000..0eb4685
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.cpp
-@@ -0,0 +1,188 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <stdlib.h>
-+
-+#include <QtCore/QFile>
-+#include <QtCore/QDebug>
-+
-+#include "udisksopticaldrive.h"
-+#include "udisks2.h"
-+#include "udisksdevice.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+OpticalDrive::OpticalDrive(Device *device)
-+    : StorageDrive(device), m_ejectInProgress(false), m_readSpeed(0), m_writeSpeed(0), m_speedsInit(false)
-+{
-+    m_device->registerAction("eject", this,
-+                             SLOT(slotEjectRequested()),
-+                             SLOT(slotEjectDone(int, const QString&)));
-+
-+    connect(m_device, SIGNAL(changed()), this, SLOT(slotChanged()));
-+}
-+
-+OpticalDrive::~OpticalDrive()
-+{
-+}
-+
-+bool OpticalDrive::eject()
-+{
-+    if (m_ejectInProgress)
-+        return false;
-+    m_ejectInProgress = true;
-+    m_device->broadcastActionRequested("eject");
-+
-+    QDBusConnection c = QDBusConnection::systemBus();
-+
-+    QString path = m_device->udi();
-+
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_DRIVE, "Eject");
-+    msg << QVariantMap();
-+    return c.callWithCallback(msg, this, SLOT(slotDBusReply(const QDBusMessage &)), SLOT(slotDBusError(const QDBusError &)));
-+}
-+
-+void OpticalDrive::slotDBusReply(const QDBusMessage &/*reply*/)
-+{
-+    m_ejectInProgress = false;
-+    m_device->broadcastActionDone("eject");
-+}
-+
-+void OpticalDrive::slotDBusError(const QDBusError &error)
-+{
-+    m_ejectInProgress = false;
-+    m_device->broadcastActionDone("eject", m_device->errorToSolidError(error.name()),
-+                                  m_device->errorToString(error.name()) + ": " +error.message());
-+}
-+
-+void OpticalDrive::slotEjectRequested()
-+{
-+    m_ejectInProgress = true;
-+    Q_EMIT ejectRequested(m_device->udi());
-+}
-+
-+void OpticalDrive::slotEjectDone(int error, const QString &errorString)
-+{
-+    m_ejectInProgress = false;
-+    Q_EMIT ejectDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
-+}
-+
-+void OpticalDrive::initReadWriteSpeeds() const
-+{
-+#if 0
-+    int read_speed, write_speed;
-+    char *write_speeds = 0;
-+    QByteArray device_file = QFile::encodeName(m_device->property("Device").toString());
-+
-+    //qDebug("Doing open (\"%s\", O_RDONLY | O_NONBLOCK)", device_file.constData());
-+    int fd = open(device_file, O_RDONLY | O_NONBLOCK);
-+    if (fd < 0) {
-+        qWarning("Cannot open %s: %s", device_file.constData(), strerror (errno));
-+        return;
-+    }
-+
-+    if (get_read_write_speed(fd, &read_speed, &write_speed, &write_speeds) >= 0) {
-+        m_readSpeed = read_speed;
-+        m_writeSpeed = write_speed;
-+
-+        QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts);
-+        Q_FOREACH (const QString & speed, list)
-+            m_writeSpeeds.append(speed.toInt());
-+
-+        free(write_speeds);
-+
-+        m_speedsInit = true;
-+    }
-+
-+    close(fd);
-+#endif
-+}
-+
-+QList<int> OpticalDrive::writeSpeeds() const
-+{
-+    if (!m_speedsInit)
-+        initReadWriteSpeeds();
-+    //qDebug() << "solid write speeds:" << m_writeSpeeds;
-+    return m_writeSpeeds;
-+}
-+
-+int OpticalDrive::writeSpeed() const
-+{
-+    if (!m_speedsInit)
-+        initReadWriteSpeeds();
-+    return m_writeSpeed;
-+}
-+
-+int OpticalDrive::readSpeed() const
-+{
-+    if (!m_speedsInit)
-+        initReadWriteSpeeds();
-+    return m_readSpeed;
-+}
-+
-+Solid::OpticalDrive::MediumTypes OpticalDrive::supportedMedia() const
-+{
-+    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
-+    Solid::OpticalDrive::MediumTypes supported;
-+
-+    QMap<Solid::OpticalDrive::MediumType, QString> map;
-+    map[Solid::OpticalDrive::Cdr] = "optical_cd_r";
-+    map[Solid::OpticalDrive::Cdrw] = "optical_cd_rw";
-+    map[Solid::OpticalDrive::Dvd] = "optical_dvd";
-+    map[Solid::OpticalDrive::Dvdr] = "optical_dvd_r";
-+    map[Solid::OpticalDrive::Dvdrw] ="optical_dvd_rw";
-+    map[Solid::OpticalDrive::Dvdram] ="optical_dvd_ram";
-+    map[Solid::OpticalDrive::Dvdplusr] ="optical_dvd_plus_r";
-+    map[Solid::OpticalDrive::Dvdplusrw] ="optical_dvd_plus_rw";
-+    map[Solid::OpticalDrive::Dvdplusdl] ="optical_dvd_plus_r_dl";
-+    map[Solid::OpticalDrive::Dvdplusdlrw] ="optical_dvd_plus_rw_dl";
-+    map[Solid::OpticalDrive::Bd] ="optical_bd";
-+    map[Solid::OpticalDrive::Bdr] ="optical_bd_r";
-+    map[Solid::OpticalDrive::Bdre] ="optical_bd_re";
-+    map[Solid::OpticalDrive::HdDvd] ="optical_hddvd";
-+    map[Solid::OpticalDrive::HdDvdr] ="optical_hddvd_r";
-+    map[Solid::OpticalDrive::HdDvdrw] ="optical_hddvd_rw";
-+    // TODO add these to Solid
-+    //map[Solid::OpticalDrive::Mo] ="optical_mo";
-+    //map[Solid::OpticalDrive::Mr] ="optical_mrw";
-+    //map[Solid::OpticalDrive::Mrw] ="optical_mrw_w";
-+
-+    Q_FOREACH ( const Solid::OpticalDrive::MediumType & type, map.keys() )
-+    {
-+        if ( mediaTypes.contains( map[type] ) )
-+        {
-+            supported |= type;
-+        }
-+    }
-+
-+    return supported;
-+}
-+
-+void OpticalDrive::slotChanged()
-+{
-+    m_speedsInit = false; // reset the read/write speeds, changes eg. with an inserted media
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.h b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.h
-new file mode 100644
-index 0000000..4c98ef5
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.h
-@@ -0,0 +1,81 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2OPTICALDRIVE_H
-+#define UDISKS2OPTICALDRIVE_H
-+
-+#include <solid/ifaces/opticaldrive.h>
-+#include "udisksstoragedrive.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class OpticalDrive: public StorageDrive, virtual public Solid::Ifaces::OpticalDrive
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::OpticalDrive)
-+
-+public:
-+    OpticalDrive(Device *device);
-+    virtual ~OpticalDrive();
-+
-+Q_SIGNALS:
-+    void ejectPressed(const QString &udi);
-+    void ejectDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
-+    void ejectRequested(const QString &udi);
-+
-+public:
-+    virtual bool eject();
-+    virtual QList<int> writeSpeeds() const;
-+    virtual int writeSpeed() const;
-+    virtual int readSpeed() const;
-+    virtual Solid::OpticalDrive::MediumTypes supportedMedia() const;
-+
-+private Q_SLOTS:
-+    void slotDBusReply(const QDBusMessage &reply);
-+    void slotDBusError(const QDBusError &error);
-+
-+    void slotEjectRequested();
-+    void slotEjectDone(int error, const QString &errorString);
-+
-+    void slotChanged();
-+
-+private:
-+    void initReadWriteSpeeds() const;
-+
-+    bool m_ejectInProgress;
-+
-+    // read/write speeds
-+    mutable int m_readSpeed;
-+    mutable int m_writeSpeed;
-+    mutable QList<int> m_writeSpeeds;
-+    mutable bool m_speedsInit;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2OPTICALDRIVE_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp
-new file mode 100644
-index 0000000..146c227
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp
-@@ -0,0 +1,359 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksstorageaccess.h"
-+#include "udisks2.h"
-+
-+#include <QtCore/QProcess>
-+#include <QtDBus/QtDBus>
-+#include <QtGui/QApplication>
-+#include <QtGui/QWidget>
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+StorageAccess::StorageAccess(Device *device)
-+    : DeviceInterface(device), m_setupInProgress(false), m_teardownInProgress(false), m_passphraseRequested(false)
-+{
-+    updateCache();
-+    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_device->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
-+                                         SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
-+
-+    // Delay connecting to DBus signals to avoid the related time penalty
-+    // in hot paths such as predicate matching
-+    QTimer::singleShot(0, this, SLOT(connectDBusSignals()));
-+}
-+
-+StorageAccess::~StorageAccess()
-+{
-+}
-+
-+void StorageAccess::connectDBusSignals()
-+{
-+    m_device->registerAction("setup", this,
-+                             SLOT(slotSetupRequested()),
-+                             SLOT(slotSetupDone(int, const QString&)));
-+
-+    m_device->registerAction("teardown", this,
-+                             SLOT(slotTeardownRequested()),
-+                             SLOT(slotTeardownDone(int, const QString&)));
-+}
-+
-+bool StorageAccess::isLuksDevice() const
-+{
-+    return m_device->isEncryptedContainer(); // encrypted device
-+}
-+
-+bool StorageAccess::isAccessible() const
-+{
-+    if (isLuksDevice()) { // check if the cleartext slave is mounted
-+        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
-+            return false;
-+        Device holderDevice(m_clearTextPath);
-+        return holderDevice.isMounted();
-+    }
-+
-+    return m_device->isMounted();
-+}
-+
-+QString StorageAccess::filePath() const
-+{
-+    if (!isAccessible())
-+        return QString();
-+
-+    QByteArrayList mntPoints;
-+
-+    if (isLuksDevice()) {  // encrypted (and unlocked) device
-+        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
-+            return QString();
-+        Device holderDevice(m_clearTextPath);
-+        mntPoints = qdbus_cast<QByteArrayList>(holderDevice.prop("MountPoints"));
-+        if (!mntPoints.isEmpty())
-+            return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
-+        else
-+            return QString();
-+    }
-+
-+    mntPoints = qdbus_cast<QByteArrayList>(m_device->prop("MountPoints"));
-+
-+    if (!mntPoints.isEmpty())
-+        return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
-+    else
-+        return QString();
-+}
-+
-+bool StorageAccess::isIgnored() const
-+{
-+    return m_device->prop("HintIgnore").toBool(); // FIXME tune
-+}
-+
-+bool StorageAccess::setup()
-+{
-+    if ( m_teardownInProgress || m_setupInProgress )
-+        return false;
-+    m_setupInProgress = true;
-+    m_device->broadcastActionRequested("setup");
-+
-+    if (m_device->isEncryptedContainer())
-+        return requestPassphrase();
-+    else
-+        return mount();
-+}
-+
-+bool StorageAccess::teardown()
-+{
-+    if ( m_teardownInProgress || m_setupInProgress )
-+        return false;
-+    m_teardownInProgress = true;
-+    m_device->broadcastActionRequested("teardown");
-+
-+    return unmount();
-+}
-+
-+void StorageAccess::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
-+{
-+    Q_UNUSED(ifaceName);
-+
-+    if (changedProps.keys().contains("MountPoints") || invalidatedProps.contains("MountPoints")) {
-+        Q_EMIT accessibilityChanged(isAccessible(), isLuksDevice() ? m_clearTextPath : m_device->udi());
-+    }
-+}
-+
-+void StorageAccess::updateCache()
-+{
-+    m_isAccessible = isAccessible();
-+}
-+
-+void StorageAccess::checkAccessibility()
-+{
-+    const bool old_isAccessible = m_isAccessible;
-+    updateCache();
-+
-+    if (old_isAccessible != m_isAccessible) {
-+        Q_EMIT accessibilityChanged(m_isAccessible, isLuksDevice() ? m_clearTextPath : m_device->udi());
-+    }
-+}
-+
-+void StorageAccess::slotDBusReply( const QDBusMessage & reply )
-+{
-+    if (m_setupInProgress)
-+    {
-+        if (isLuksDevice() && !isAccessible()) { // unlocked device, now mount it
-+            if (reply.type() == QDBusMessage::ReplyMessage)  // we've got a response from Unlock
-+                m_clearTextPath = reply.arguments().value(0).value<QDBusObjectPath>().path();
-+            mount();
-+        }
-+        else // Don't broadcast setupDone unless the setup is really done. (Fix kde#271156)
-+        {
-+            m_setupInProgress = false;
-+            m_device->broadcastActionDone("setup");
-+
-+            checkAccessibility();
-+        }
-+    }
-+    else if (m_teardownInProgress)  // FIXME
-+    {
-+        if (isLuksDevice() && !m_clearTextPath.isEmpty() && m_clearTextPath != "/") // unlocked device, lock it
-+        {
-+            callCryptoTeardown();
-+        }
-+        else if (!m_clearTextPath.isEmpty() && m_clearTextPath != "/") {
-+            callCryptoTeardown(true); // Lock crypted parent
-+        }
-+        else
-+        {
-+            if (m_device->prop("Ejectable").toBool() && !m_device->isOpticalDisc()) // optical drives have their Eject method
-+            {
-+                // try to "eject" (aka safely remove) from the (parent) drive, e.g. SD card from a reader
-+                QString drivePath = m_device->prop("Drive").value<QDBusObjectPath>().path();
-+                if (!drivePath.isEmpty() || drivePath != "/")
-+                {
-+                    QDBusConnection c = QDBusConnection::systemBus();
-+                    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, drivePath, UD2_DBUS_INTERFACE_DRIVE, "Eject");
-+                    msg << QVariantMap();   // options, unused now
-+                    c.call(msg, QDBus::NoBlock);
-+                }
-+            }
-+
-+            m_teardownInProgress = false;
-+            m_device->broadcastActionDone("teardown");
-+
-+            checkAccessibility();
-+        }
-+    }
-+}
-+
-+void StorageAccess::slotDBusError( const QDBusError & error )
-+{
-+    if (m_setupInProgress)
-+    {
-+        m_setupInProgress = false;
-+        m_device->broadcastActionDone("setup", m_device->errorToSolidError(error.name()),
-+                                      m_device->errorToString(error.name()) + ": " +error.message());
-+
-+        checkAccessibility();
-+    }
-+    else if (m_teardownInProgress)
-+    {
-+        m_teardownInProgress = false;
-+        m_clearTextPath.clear();
-+        m_device->broadcastActionDone("teardown", m_device->errorToSolidError(error.name()),
-+                                      m_device->errorToString(error.name()) + ": " + error.message());
-+        checkAccessibility();
-+    }
-+}
-+
-+void StorageAccess::slotSetupRequested()
-+{
-+    m_setupInProgress = true;
-+    Q_EMIT setupRequested(m_device->udi());
-+}
-+
-+void StorageAccess::slotSetupDone(int error, const QString &errorString)
-+{
-+    m_setupInProgress = false;
-+    Q_EMIT setupDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
-+}
-+
-+void StorageAccess::slotTeardownRequested()
-+{
-+    m_teardownInProgress = true;
-+    Q_EMIT teardownRequested(m_device->udi());
-+}
-+
-+void StorageAccess::slotTeardownDone(int error, const QString &errorString)
-+{
-+    m_teardownInProgress = false;
-+    m_clearTextPath.clear();
-+    Q_EMIT teardownDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
-+}
-+
-+bool StorageAccess::mount()
-+{
-+    QString path = m_device->udi();
-+
-+    if (isLuksDevice()) { // mount options for the cleartext volume
-+        path = m_clearTextPath;
-+    }
-+
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Mount");
-+
-+    msg << QVariantMap();   // options, unused now
-+
-+    return c.callWithCallback(msg, this,
-+                              SLOT(slotDBusReply(const QDBusMessage &)),
-+                              SLOT(slotDBusError(const QDBusError &)));
-+}
-+
-+bool StorageAccess::unmount()
-+{
-+    QString path = m_device->udi();
-+
-+    if (isLuksDevice()) { // unmount options for the cleartext volume
-+        path = m_clearTextPath;
-+    }
-+
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
-+
-+    msg << QVariantMap();   // options, unused now
-+
-+    return c.callWithCallback(msg, this,
-+                              SLOT(slotDBusReply(const QDBusMessage &)),
-+                              SLOT(slotDBusError(const QDBusError &)),
-+                              s_unmountTimeout);
-+}
-+
-+QString StorageAccess::generateReturnObjectPath()
-+{
-+    static int number = 1;
-+
-+    return "/org/kde/solid/UDisks2StorageAccess_"+QString::number(number++);
-+}
-+
-+bool StorageAccess::requestPassphrase()
-+{
-+    QString udi = m_device->udi();
-+    QString returnService = QDBusConnection::sessionBus().baseService();
-+    m_lastReturnObject = generateReturnObjectPath();
-+
-+    QDBusConnection::sessionBus().registerObject(m_lastReturnObject, this, QDBusConnection::ExportScriptableSlots);
-+
-+    QWidget *activeWindow = QApplication::activeWindow();
-+    uint wId = 0;
-+    if (activeWindow!=0)
-+        wId = (uint)activeWindow->winId();
-+
-+    QString appId = QCoreApplication::applicationName();
-+
-+    QDBusInterface soliduiserver("org.kde.kded5", "/modules/soliduiserver", "org.kde.SolidUiServer");
-+    QDBusReply<void> reply = soliduiserver.call("showPassphraseDialog", udi, returnService,
-+                                                m_lastReturnObject, wId, appId);
-+    m_passphraseRequested = reply.isValid();
-+    if (!m_passphraseRequested)
-+        qWarning() << "Failed to call the SolidUiServer, D-Bus said:" << reply.error();
-+
-+    return m_passphraseRequested;
-+}
-+
-+void StorageAccess::passphraseReply(const QString & passphrase)
-+{
-+    if (m_passphraseRequested)
-+    {
-+        QDBusConnection::sessionBus().unregisterObject(m_lastReturnObject);
-+        m_passphraseRequested = false;
-+        if (!passphrase.isEmpty())
-+            callCryptoSetup(passphrase);
-+        else
-+        {
-+            m_setupInProgress = false;
-+            m_device->broadcastActionDone("setup");
-+        }
-+    }
-+}
-+
-+void StorageAccess::callCryptoSetup(const QString & passphrase)
-+{
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_device->udi(), UD2_DBUS_INTERFACE_ENCRYPTED, "Unlock");
-+
-+    msg << passphrase;
-+    msg << QVariantMap();   // options, unused now
-+
-+    c.callWithCallback(msg, this,
-+                       SLOT(slotDBusReply(const QDBusMessage &)),
-+                       SLOT(slotDBusError(const QDBusError &)));
-+}
-+
-+bool StorageAccess::callCryptoTeardown(bool actOnParent)
-+{
-+    QDBusConnection c = QDBusConnection::systemBus();
-+    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE,
-+                                                      actOnParent ? (m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path()) : m_device->udi(),
-+                                                      UD2_DBUS_INTERFACE_ENCRYPTED, "Lock");
-+    msg << QVariantMap();   // options, unused now
-+
-+    m_clearTextPath.clear();
-+
-+    return c.callWithCallback(msg, this,
-+                              SLOT(slotDBusReply(const QDBusMessage &)),
-+                              SLOT(slotDBusError(const QDBusError &)));
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.h b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.h
-new file mode 100644
-index 0000000..36f2102
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.h
-@@ -0,0 +1,104 @@
-+/*
-+    Copyright 2009 Pino Toscano <pino@kde.org>
-+    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2STORAGEACCESS_H
-+#define UDISKS2STORAGEACCESS_H
-+
-+#include <solid/ifaces/storageaccess.h>
-+#include "udisksdeviceinterface.h"
-+
-+#include <QtDBus/QDBusMessage>
-+#include <QtDBus/QDBusError>
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+class StorageAccess : public DeviceInterface, virtual public Solid::Ifaces::StorageAccess
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::StorageAccess)
-+
-+public:
-+    StorageAccess(Device *device);
-+    virtual ~StorageAccess();
-+
-+    virtual bool isAccessible() const;
-+    virtual QString filePath() const;
-+    virtual bool isIgnored() const;
-+    virtual bool setup();
-+    virtual bool teardown();
-+
-+Q_SIGNALS:
-+    void accessibilityChanged(bool accessible, const QString &udi);
-+    void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
-+    void teardownDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
-+    void setupRequested(const QString &udi);
-+    void teardownRequested(const QString &udi);
-+
-+public Q_SLOTS:
-+    Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString & passphrase);
-+
-+private Q_SLOTS:
-+    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
-+    void slotDBusReply(const QDBusMessage & reply);
-+    void slotDBusError(const QDBusError & error);
-+
-+    void connectDBusSignals();
-+
-+    void slotSetupRequested();
-+    void slotSetupDone(int error, const QString &errorString);
-+    void slotTeardownRequested();
-+    void slotTeardownDone(int error, const QString &errorString);
-+
-+private:
-+    /// @return true if this device is luks and unlocked
-+    bool isLuksDevice() const;
-+
-+    void updateCache();
-+    void checkAccessibility();
-+
-+    bool mount();
-+    bool unmount();
-+
-+    bool requestPassphrase();
-+    void callCryptoSetup( const QString & passphrase );
-+    bool callCryptoTeardown( bool actOnParent=false );
-+
-+    QString generateReturnObjectPath();
-+
-+private:
-+    bool m_isAccessible;
-+    bool m_setupInProgress;
-+    bool m_teardownInProgress;
-+    bool m_passphraseRequested;
-+    QString m_lastReturnObject;
-+    QString m_clearTextPath;  // path to the unlocked cleartext device
-+
-+    static const int s_unmountTimeout = 0x7fffffff;
-+};
-+}
-+}
-+}
-+
-+#endif // UDISKS2STORAGEACCESS_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp
-new file mode 100644
-index 0000000..c79ac20
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp
-@@ -0,0 +1,147 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksstoragedrive.h"
-+
-+#include "../shared/udevqtclient.h"
-+
-+#include <QtCore/QDebug>
-+#include <QtCore/QFile>
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+StorageDrive::StorageDrive(Device *dev)
-+    : Block(dev)
-+{
-+    UdevQt::Client client(this);
-+    m_udevDevice = client.deviceByDeviceFile(device());
-+    m_udevDevice.deviceProperties();
-+}
-+
-+StorageDrive::~StorageDrive()
-+{
-+}
-+
-+qulonglong StorageDrive::size() const
-+{
-+    return m_device->prop("Size").toULongLong();
-+}
-+
-+bool StorageDrive::isHotpluggable() const
-+{
-+    const Solid::StorageDrive::Bus _bus = bus();
-+    return _bus == Solid::StorageDrive::Usb || _bus == Solid::StorageDrive::Ieee1394;
-+}
-+
-+bool StorageDrive::isRemovable() const
-+{
-+    return m_device->prop("MediaRemovable").toBool() || m_device->prop("Removable").toBool();
-+}
-+
-+Solid::StorageDrive::DriveType StorageDrive::driveType() const
-+{
-+    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
-+
-+    if ( m_device->isOpticalDrive() ) // optical disks
-+    {
-+        return Solid::StorageDrive::CdromDrive;
-+    }
-+    else if ( mediaTypes.contains( "floppy" ) )
-+    {
-+        return Solid::StorageDrive::Floppy;
-+    }
-+#if 0 // TODO add to Solid
-+    else if ( mediaTypes.contains( "floppy_jaz" ) )
-+    {
-+        return Solid::StorageDrive::Jaz;
-+    }
-+    else if ( mediaTypes.contains( "floppy_zip" ) )
-+    {
-+        return Solid::StorageDrive::Zip;
-+    }
-+    else if ( mediaTypes.contains( "flash" ) )
-+    {
-+        return Solid::StorageDrive::Flash;
-+    }
-+#endif
-+    else if ( mediaTypes.contains( "flash_cf" ) )
-+    {
-+        return Solid::StorageDrive::CompactFlash;
-+    }
-+    else if ( mediaTypes.contains( "flash_ms" ) )
-+    {
-+        return Solid::StorageDrive::MemoryStick;
-+    }
-+    else if ( mediaTypes.contains( "flash_sm" ) )
-+    {
-+        return Solid::StorageDrive::SmartMedia;
-+    }
-+    else if ( mediaTypes.contains( "flash_sd" ) || mediaTypes.contains( "flash_sdhc" )
-+              || mediaTypes.contains( "flash_mmc" ) || mediaTypes.contains("flash_sdxc") )
-+    {
-+        return Solid::StorageDrive::SdMmc;
-+    }
-+    // FIXME: udisks2 doesn't know about xD cards
-+    else
-+    {
-+        return Solid::StorageDrive::HardDisk;
-+    }
-+}
-+
-+Solid::StorageDrive::Bus StorageDrive::bus() const
-+{
-+    const QString bus = m_device->prop("ConnectionBus").toString();
-+    const QString udevBus = m_udevDevice.deviceProperty("ID_BUS").toString();
-+
-+    //qDebug() << "bus:" << bus << "udev bus:" << udevBus;
-+
-+    if (udevBus == "ata")
-+    {
-+        if (m_udevDevice.deviceProperty("ID_ATA_SATA").toInt() == 1) // serial ATA
-+            return Solid::StorageDrive::Sata;
-+        else  // parallel (classical) ATA
-+            return Solid::StorageDrive::Ide;
-+    }
-+    else if (bus == "usb")
-+    {
-+        return Solid::StorageDrive::Usb;
-+    }
-+    else if (bus == "ieee1394")
-+    {
-+        return Solid::StorageDrive::Ieee1394;
-+    }
-+    else if (udevBus == "scsi")
-+    {
-+        return Solid::StorageDrive::Scsi;
-+    }
-+#if 0  // TODO add these to Solid
-+    else if ( bus == "sdio" )
-+    {
-+        return Solid::StorageDrive::SDIO;
-+    }
-+    else if ( bus == "virtual" )
-+    {
-+        return Solid::StorageDrive::Virtual;
-+    }
-+#endif
-+    else
-+        return Solid::StorageDrive::Platform;
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h
-new file mode 100644
-index 0000000..9c87a23
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h
-@@ -0,0 +1,61 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2STORAGEDRIVE_H
-+#define UDISKS2STORAGEDRIVE_H
-+
-+#include <ifaces/storagedrive.h>
-+
-+#include "../shared/udevqtdevice.h"
-+
-+#include "udisksblock.h"
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class StorageDrive: public Block, virtual public Solid::Ifaces::StorageDrive
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::StorageDrive)
-+
-+public:
-+    StorageDrive(Device *dev);
-+    virtual ~StorageDrive();
-+
-+    virtual qulonglong size() const;
-+    virtual bool isHotpluggable() const;
-+    virtual bool isRemovable() const;
-+    virtual Solid::StorageDrive::DriveType driveType() const;
-+    virtual Solid::StorageDrive::Bus bus() const;
-+
-+private:
-+    UdevQt::Device m_udevDevice;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISK2SSTORAGEDRIVE_H
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.cpp
-new file mode 100644
-index 0000000..a7d8fad
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.cpp
-@@ -0,0 +1,105 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include "udisksstoragevolume.h"
-+#include "udisks2.h"
-+
-+using namespace Solid::Backends::UDisks2;
-+
-+StorageVolume::StorageVolume(Device *device)
-+    : Block(device)
-+{
-+}
-+
-+StorageVolume::~StorageVolume()
-+{
-+}
-+
-+QString StorageVolume::encryptedContainerUdi() const
-+{
-+    const QString path = m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
-+    if ( path.isEmpty() || path == "/")
-+        return QString();
-+    else
-+        return path;
-+}
-+
-+qulonglong StorageVolume::size() const
-+{
-+    return m_device->prop("Size").toULongLong();
-+}
-+
-+QString StorageVolume::uuid() const
-+{
-+    return m_device->prop("IdUUID").toString();
-+}
-+
-+QString StorageVolume::label() const
-+{
-+    QString label = m_device->prop("HintName").toString();
-+    if (label.isEmpty())
-+        label = m_device->prop("IdLabel").toString();
-+    if (label.isEmpty())
-+        label = m_device->prop("Name").toString();
-+    return label;
-+}
-+
-+QString StorageVolume::fsType() const
-+{
-+    return m_device->prop("IdType").toString();
-+}
-+
-+Solid::StorageVolume::UsageType StorageVolume::usage() const
-+{
-+    const QString usage = m_device->prop("IdUsage").toString();
-+
-+    if (m_device->hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM))
-+    {
-+        return Solid::StorageVolume::FileSystem;
-+    }
-+    else if (m_device->isPartitionTable())
-+    {
-+        return Solid::StorageVolume::PartitionTable;
-+    }
-+    else if (usage == "raid")
-+    {
-+        return Solid::StorageVolume::Raid;
-+    }
-+    else if (m_device->isEncryptedContainer())
-+    {
-+        return Solid::StorageVolume::Encrypted;
-+    }
-+    else if (usage == "unused" || usage.isEmpty())
-+    {
-+        return Solid::StorageVolume::Unused;
-+    }
-+    else
-+    {
-+        return Solid::StorageVolume::Other;
-+    }
-+}
-+
-+bool StorageVolume::isIgnored() const
-+{
-+    const Solid::StorageVolume::UsageType usg = usage();
-+    return m_device->prop("HintIgnore").toBool() || m_device->isSwap() ||
-+            ((usg == Solid::StorageVolume::Unused || usg == Solid::StorageVolume::Other || usg == Solid::StorageVolume::PartitionTable) && !m_device->isOpticalDisc());
-+}
-diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.h b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.h
-new file mode 100644
-index 0000000..2ca04d2
---- /dev/null
-+++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.h
-@@ -0,0 +1,57 @@
-+/*
-+    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) version 3, or any
-+    later version accepted by the membership of KDE e.V. (or its
-+    successor approved by the membership of KDE e.V.), which shall
-+    act as a proxy defined in Section 6 of version 3 of the license.
-+
-+    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
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library. If not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#ifndef UDISKS2STORAGEVOLUME_H
-+#define UDISKS2STORAGEVOLUME_H
-+
-+#include <ifaces/storagevolume.h>
-+#include "udisksblock.h"
-+
-+
-+namespace Solid
-+{
-+namespace Backends
-+{
-+namespace UDisks2
-+{
-+
-+class StorageVolume: public Block, virtual public Solid::Ifaces::StorageVolume
-+{
-+    Q_OBJECT
-+    Q_INTERFACES(Solid::Ifaces::StorageVolume)
-+
-+public:
-+    StorageVolume(Device *device);
-+    virtual ~StorageVolume();
-+
-+    virtual QString encryptedContainerUdi() const;
-+    virtual qulonglong size() const;
-+    virtual QString uuid() const;
-+    virtual QString label() const;
-+    virtual QString fsType() const;
-+    virtual Solid::StorageVolume::UsageType usage() const;
-+    virtual bool isIgnored() const;
-+};
-+
-+}
-+}
-+}
-+
-+#endif // UDISKS2STORAGEVOLUME_H

diff --git a/kde-base/kdelibs/kdelibs-4.8.90.ebuild b/kde-base/kdelibs/kdelibs-4.8.90.ebuild
index bad7083..0a72c9e 100644
--- a/kde-base/kdelibs/kdelibs-4.8.90.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.90.ebuild
@@ -22,6 +22,7 @@ LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam +handbook jpeg2k kerberos lzma
 mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
 +upower upnp zeroconf"
+SRC_URI+=" http://dev.gentoo.org/~dilfridge/distfiles/kdelibs-4.8.90-udisks2_backend.patch.bz2"
 
 REQUIRED_USE="
 	udisks? ( udev )
@@ -129,7 +130,9 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2"_{prep,backend,post}.patch
+	"${FILESDIR}/${PN}-4.8.90-udisks2_prep.patch"
+	"${WORKDIR}/${PN}-4.8.90-udisks2_backend.patch"
+	"${FILESDIR}/${PN}-4.8.90-udisks2_post.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 7b1a1b1..7e7d1d4 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -22,6 +22,7 @@ LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam +handbook jpeg2k kerberos lzma
 mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
 +upower upnp zeroconf"
+SRC_URI+=" http://dev.gentoo.org/~dilfridge/distfiles/kdelibs-4.8.90-udisks2_backend.patch.bz2"
 
 REQUIRED_USE="
 	udisks? ( udev )
@@ -129,7 +130,9 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
-	"${FILESDIR}/${PN}-4.8.90-udisks2"_{prep,backend,post}.patch
+	"${FILESDIR}/${PN}-4.8.90-udisks2_prep.patch"
+	"${WORKDIR}/${PN}-4.8.90-udisks2_backend.patch"
+	"${FILESDIR}/${PN}-4.8.90-udisks2_post.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-06-19 20:48 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-06-19 20:48 UTC (permalink / raw
  To: gentoo-commits

commit:     f9355df5a827292d8176e4c95aa33233248f2762
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Tue Jun 19 20:48:58 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue Jun 19 20:48:58 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=f9355df5

[kde-base/kdelibs] Migrate kde-4.9 to udisks:2; patches from Fedora

http://pkgs.fedoraproject.org/gitweb/?p=kdelibs.git;a=tree;h=5d79b99d8d2bb73a25bfe43de023fb58df755335;hb=5d79b99d8d2bb73a25bfe43de023fb58df755335

(Portage version: 2.2.0_alpha110/git/Linux x86_64, RepoMan options: --force, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.90-udisks2_backend.patch     | 3524 ++++++++++++++++++++
 .../files/kdelibs-4.8.90-udisks2_post.patch        |  113 +
 .../files/kdelibs-4.8.90-udisks2_prep.patch        |   65 +
 kde-base/kdelibs/kdelibs-4.8.90.ebuild             |    3 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    3 +-
 5 files changed, 3706 insertions(+), 2 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_backend.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_backend.patch
new file mode 100644
index 0000000..74ec3c2
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_backend.patch
@@ -0,0 +1,3524 @@
+diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp b/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp
+new file mode 100644
+index 0000000..7ea4aa8
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/dbus/manager.cpp
+@@ -0,0 +1,26 @@
++/*
++ * This file was generated by qdbusxml2cpp version 0.7
++ * Command line was: qdbusxml2cpp -p manager manager.xml
++ *
++ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
++ *
++ * This is an auto-generated file.
++ * This file may have been hand-edited. Look for HAND-EDIT comments
++ * before re-generating it.
++ */
++
++#include "manager.h"
++
++/*
++ * Implementation of interface class OrgFreedesktopDBusObjectManagerInterface
++ */
++
++OrgFreedesktopDBusObjectManagerInterface::OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
++    : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
++{
++}
++
++OrgFreedesktopDBusObjectManagerInterface::~OrgFreedesktopDBusObjectManagerInterface()
++{
++}
++
+diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.h b/tier1/solid/src/solid/backends/udisks2/dbus/manager.h
+new file mode 100644
+index 0000000..11f0be8
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/dbus/manager.h
+@@ -0,0 +1,59 @@
++/*
++ * This file was generated by qdbusxml2cpp version 0.7
++ * Command line was: qdbusxml2cpp -p manager manager.xml
++ *
++ * qdbusxml2cpp is Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
++ *
++ * This is an auto-generated file.
++ * Do not edit! All changes made to it will be lost.
++ */
++
++#ifndef MANAGER_H_1329493525
++#define MANAGER_H_1329493525
++
++#include <QtCore/QObject>
++#include <QtCore/QByteArray>
++#include <QtCore/QList>
++#include <QtCore/QMap>
++#include <QtCore/QString>
++#include <QtCore/QStringList>
++#include <QtCore/QVariant>
++#include <QtDBus/QtDBus>
++
++#include "../udisks2.h"
++
++/*
++ * Proxy class for interface org.freedesktop.DBus.ObjectManager
++ */
++class OrgFreedesktopDBusObjectManagerInterface: public QDBusAbstractInterface
++{
++    Q_OBJECT
++public:
++    static inline const char *staticInterfaceName()
++    { return "org.freedesktop.DBus.ObjectManager"; }
++
++public:
++    OrgFreedesktopDBusObjectManagerInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
++
++    ~OrgFreedesktopDBusObjectManagerInterface();
++
++public Q_SLOTS: // METHODS
++    inline QDBusPendingReply<DBUSManagerStruct> GetManagedObjects()
++    {
++        QList<QVariant> argumentList;
++        return asyncCallWithArgumentList(QLatin1String("GetManagedObjects"), argumentList);
++    }
++
++Q_SIGNALS: // SIGNALS
++    void InterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void InterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++};
++
++namespace org {
++  namespace freedesktop {
++    namespace DBus {
++      typedef ::OrgFreedesktopDBusObjectManagerInterface ObjectManager;
++    }
++  }
++}
++#endif
+diff --git a/tier1/solid/src/solid/backends/udisks2/dbus/manager.xml b/tier1/solid/src/solid/backends/udisks2/dbus/manager.xml
+new file mode 100644
+index 0000000..8f25cb6
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/dbus/manager.xml
+@@ -0,0 +1,21 @@
++<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
++                      "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
++<node>
++  <interface name="org.freedesktop.DBus.ObjectManager">
++    <method name="GetManagedObjects">
++      <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out">
++        <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="DBUSManagerStruct"/>
++      </arg>
++    </method>
++    <signal name="InterfacesAdded">
++      <arg type="o" name="object_path"/>
++      <arg type="a{sa{sv}}" name="interfaces_and_properties">
++        <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QVariantMapMap"/>
++      </arg>
++    </signal>
++    <signal name="InterfacesRemoved">
++      <arg type="o" name="object_path"/>
++      <arg type="as" name="interfaces"/>
++    </signal>
++  </interface>
++</node>
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisks2.h b/tier1/solid/src/solid/backends/udisks2/udisks2.h
+new file mode 100644
+index 0000000..25a1dc0
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisks2.h
+@@ -0,0 +1,77 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef SOLID_BACKENDS_UDISKS2_H
++#define SOLID_BACKENDS_UDISKS2_H
++
++#include <QMetaType>
++#include <QtDBus>
++#include <QVariant>
++#include <QMap>
++#include <QList>
++
++typedef QList<QByteArray> QByteArrayList;
++Q_DECLARE_METATYPE(QByteArrayList)
++
++typedef QMap<QString,QVariantMap> QVariantMapMap;
++Q_DECLARE_METATYPE(QVariantMapMap)
++
++typedef QMap<QDBusObjectPath, QVariantMapMap> DBUSManagerStruct;
++Q_DECLARE_METATYPE(DBUSManagerStruct)
++
++/* UDisks2 */
++#define UD2_DBUS_SERVICE                 "org.freedesktop.UDisks2"
++#define UD2_DBUS_PATH                    "/org/freedesktop/UDisks2"
++#define UD2_UDI_DISKS_PREFIX             "/org/freedesktop/UDisks2"
++#define UD2_DBUS_PATH_MANAGER            "/org/freedesktop/UDisks2/Manager"
++#define UD2_DBUS_PATH_DRIVES             "/org/freedesktop/UDisks2/drives/"
++#define UD2_DBUS_PATH_JOBS               "/org/freedesktop/UDisks2/jobs/"
++#define DBUS_INTERFACE_PROPS             "org.freedesktop.DBus.Properties"
++#define DBUS_INTERFACE_INTROSPECT        "org.freedesktop.DBus.Introspectable"
++#define DBUS_INTERFACE_MANAGER           "org.freedesktop.DBus.ObjectManager"
++#define UD2_DBUS_INTERFACE_BLOCK         "org.freedesktop.UDisks2.Block"
++#define UD2_DBUS_INTERFACE_DRIVE         "org.freedesktop.UDisks2.Drive"
++#define UD2_DBUS_INTERFACE_PARTITION     "org.freedesktop.UDisks2.Partition"
++#define UD2_DBUS_INTERFACE_PARTITIONTABLE   "org.freedesktop.UDisks2.PartitionTable"
++#define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
++#define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
++#define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
++
++/* errors */
++#define UD2_ERROR_UNAUTHORIZED            "org.freedesktop.PolicyKit.Error.NotAuthorized"
++#define UD2_ERROR_BUSY                    "org.freedesktop.UDisks2.Error.DeviceBusy"
++#define UD2_ERROR_FAILED                  "org.freedesktop.UDisks2.Error.Failed"
++#define UD2_ERROR_CANCELED                "org.freedesktop.UDisks2.Error.Cancelled"
++#define UD2_ERROR_INVALID_OPTION          "org.freedesktop.UDisks2.Error.OptionNotPermitted"
++#define UD2_ERROR_MISSING_DRIVER          "org.freedesktop.UDisks2.Error.NotSupported"
++
++#define UD2_ERROR_ALREADY_MOUNTED         "org.freedesktop.UDisks2.Error.AlreadyMounted"
++#define UD2_ERROR_NOT_MOUNTED             "org.freedesktop.UDisks2.Error.NotMounted"
++#define UD2_ERROR_MOUNTED_BY_OTHER_USER   "org.freedesktop.UDisks2.Error.MountedByOtherUser"
++#define UD2_ERROR_ALREADY_UNMOUNTING      "org.freedesktop.UDisks2.Error.AlreadyUnmounting"
++#define UD2_ERROR_TIMED_OUT               "org.freedesktop.UDisks2.Error.Timedout"
++#define UD2_ERROR_WOULD_WAKEUP            "org.freedesktop.UDisks2.Error.WouldWakeup"
++#define UD2_ERROR_ALREADY_CANCELLED       "org.freedesktop.UDisks2.Error.AlreadyCancelled"
++
++#define UD2_ERROR_NOT_AUTHORIZED          "org.freedesktop.UDisks2.Error.NotAuthorized"
++#define UD2_ERROR_NOT_AUTHORIZED_CAN_OBTAIN  "org.freedesktop.UDisks2.Error.NotAuthorizedCanObtain"
++#define UD2_ERROR_NOT_AUTHORIZED_DISMISSED   "org.freedesktop.UDisks2.Error.NotAuthorizedDismissed"
++
++#endif // SOLID_BACKENDS_UDISKS2_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp b/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp
+new file mode 100644
+index 0000000..c27b1c4
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksblock.cpp
+@@ -0,0 +1,84 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <linux/kdev_t.h>
++
++#include <QFile>
++#include <QtDBus/QDBusConnection>
++#include <QtDBus/QDBusPendingReply>
++
++#include "udisksblock.h"
++#include "dbus/manager.h"
++
++using namespace Solid::Backends::UDisks2;
++
++Block::Block(Device *dev)
++    : DeviceInterface(dev)
++{
++    m_devNum = m_device->prop("DeviceNumber").toULongLong();
++    m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
++
++    // we have a drive (non-block device for udisks), so let's find the corresponding (real) block device
++    if (m_devNum == 0 || m_devFile.isEmpty()) {
++        org::freedesktop::DBus::ObjectManager manager(UD2_DBUS_SERVICE, UD2_DBUS_PATH, QDBusConnection::systemBus());
++        QDBusPendingReply<DBUSManagerStruct> reply = manager.GetManagedObjects();
++        reply.waitForFinished();
++        if (!reply.isError()) {  // enum devices
++            Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
++                const QString udi = path.path();
++
++                if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                    continue;
++
++                Device device(udi);
++                if (device.drivePath() == dev->udi()) {
++                    m_devNum = device.prop("DeviceNumber").toULongLong();
++                    m_devFile = QFile::decodeName(device.prop("Device").toByteArray());
++                    break;
++                }
++            }
++        }
++        else  // show error
++        {
++            qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++        }
++    }
++
++    qDebug() << "devnum:" << m_devNum << "dev file:" << m_devFile;
++}
++
++Block::~Block()
++{
++}
++
++QString Block::device() const
++{
++    return m_devFile;
++}
++
++int Block::deviceMinor() const
++{
++    return MINOR(m_devNum);
++}
++
++int Block::deviceMajor() const
++{
++    return MAJOR(m_devNum);
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksblock.h b/tier1/solid/src/solid/backends/udisks2/udisksblock.h
+new file mode 100644
+index 0000000..19cb70a
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksblock.h
+@@ -0,0 +1,56 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2BLOCK_H
++#define UDISKS2BLOCK_H
++
++#include <solid/ifaces/block.h>
++#include "udisksdeviceinterface.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Block: public DeviceInterface, virtual public Solid::Ifaces::Block
++{
++
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::Block)
++
++public:
++    Block(Device *dev);
++    virtual ~Block();
++
++    virtual QString device() const;
++    virtual int deviceMinor() const;
++    virtual int deviceMajor() const;
++private:
++    dev_t m_devNum;
++    QString m_devFile;
++};
++
++}
++}
++}
++
++#endif // UDISKS2BLOCK_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp b/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp
+new file mode 100644
+index 0000000..fb74fa2
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksdevice.cpp
+@@ -0,0 +1,910 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksdevice.h"
++#include "udisksblock.h"
++#include "udisksdeviceinterface.h"
++#include "udisksstoragevolume.h"
++#include "udisksopticaldisc.h"
++#include "udisksopticaldrive.h"
++#include "udisksstorageaccess.h"
++#include "udisksgenericinterface.h"
++
++#include <solid/genericinterface.h>
++#include <solid/deviceinterface.h>
++#include <solid/device.h>
++
++#include <QtCore/QDebug>
++
++#include <QtDBus/QDBusMessage>
++#include <QtDBus/QDBusMetaType>
++#include <QtDBus/QDBusPendingReply>
++#include <QtDBus/QDBusArgument>
++
++#include <QtXml/QDomDocument>
++
++using namespace Solid::Backends::UDisks2;
++
++// Adapted from KLocale as Solid needs to be Qt-only
++static QString formatByteSize(double size)
++{
++    // Per IEC 60027-2
++
++    // Binary prefixes
++    //Tebi-byte             TiB             2^40    1,099,511,627,776 bytes
++    //Gibi-byte             GiB             2^30    1,073,741,824 bytes
++    //Mebi-byte             MiB             2^20    1,048,576 bytes
++    //Kibi-byte             KiB             2^10    1,024 bytes
++
++    QString s;
++    // Gibi-byte
++    if ( size >= 1073741824.0 )
++    {
++        size /= 1073741824.0;
++        if ( size > 1024 ) // Tebi-byte
++            s = QObject::tr("%1 TiB").arg(QLocale().toString(size / 1024.0, 'f', 1));
++        else
++            s = QObject::tr("%1 GiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Mebi-byte
++    else if ( size >= 1048576.0 )
++    {
++        size /= 1048576.0;
++        s = QObject::tr("%1 MiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Kibi-byte
++    else if ( size >= 1024.0 )
++    {
++        size /= 1024.0;
++        s = QObject::tr("%1 KiB").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Just byte
++    else if ( size > 0 )
++    {
++        s = QObject::tr("%1 B").arg(QLocale().toString(size, 'f', 1));
++    }
++    // Nothing
++    else
++    {
++        s = QObject::tr("0 B");
++    }
++    return s;
++}
++
++Device::Device(const QString &udi)
++    : Solid::Ifaces::Device()
++    , m_udi(udi)
++{
++    m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
++                                  QString(), // no interface, we aggregate them
++                                  QDBusConnection::systemBus());
++
++    if (m_device->isValid()) {
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                             SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
++
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesAdded",
++                                             this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
++        QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, "InterfacesRemoved",
++                                             this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
++
++        initInterfaces();
++    }
++}
++
++Device::~Device()
++{
++    delete m_device;
++}
++
++QObject* Device::createDeviceInterface(const Solid::DeviceInterface::Type& type)
++{
++    if (!queryDeviceInterface(type)) {
++        return 0;
++    }
++
++    DeviceInterface *iface = 0;
++    switch (type)
++    {
++    case Solid::DeviceInterface::GenericInterface:
++        iface = new GenericInterface(this);
++        break;
++    case Solid::DeviceInterface::Block:
++        iface = new Block(this);
++        break;
++    case Solid::DeviceInterface::StorageAccess:
++        iface = new StorageAccess(this);
++        break;
++    case Solid::DeviceInterface::StorageDrive:
++        iface = new StorageDrive(this);
++        break;
++    case Solid::DeviceInterface::OpticalDrive:
++        iface = new OpticalDrive(this);
++        break;
++    case Solid::DeviceInterface::StorageVolume:
++        iface = new StorageVolume(this);
++        break;
++    case Solid::DeviceInterface::OpticalDisc:
++        iface = new OpticalDisc(this);
++        break;
++    default:
++        break;
++    }
++    return iface;
++}
++
++bool Device::queryDeviceInterface(const Solid::DeviceInterface::Type& type) const
++{
++    switch (type) {
++    case Solid::DeviceInterface::GenericInterface:
++        return true;
++    case Solid::DeviceInterface::Block:
++        return isBlock();
++    case Solid::DeviceInterface::StorageVolume:
++        return isStorageVolume();
++    case Solid::DeviceInterface::StorageAccess:
++        return isStorageAccess();
++    case Solid::DeviceInterface::StorageDrive:
++        return isDrive();
++    case Solid::DeviceInterface::OpticalDrive:
++        return isOpticalDrive();
++    case Solid::DeviceInterface::OpticalDisc:
++        return isOpticalDisc();
++    default:
++        return false;
++    }
++}
++
++QStringList Device::emblems() const
++{
++    QStringList res;
++
++    if (queryDeviceInterface(Solid::DeviceInterface::StorageAccess))
++    {
++        const UDisks2::StorageAccess accessIface(const_cast<Device *>(this));
++        if (accessIface.isAccessible())
++        {
++            if (isEncryptedContainer())
++                res << "emblem-encrypted-unlocked";
++            else
++                res << "emblem-mounted";
++        }
++        else
++        {
++            if (isEncryptedContainer())
++                res << "emblem-encrypted-locked";
++            else
++                res << "emblem-unmounted";
++        }
++    }
++
++    return res;
++}
++
++QString Device::description() const
++{
++    const QString hintName = prop("HintName").toString();
++    if (!hintName.isEmpty())
++        return hintName;
++
++    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
++        return storageDescription();
++    else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
++        return volumeDescription();
++    else
++        return product();
++}
++
++QString Device::storageDescription() const
++{
++    QString description;
++    const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
++    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
++    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++
++    if (drive_type == Solid::StorageDrive::CdromDrive)
++    {
++        const UDisks2::OpticalDrive opticalDrive(const_cast<Device*>(this));
++        Solid::OpticalDrive::MediumTypes mediumTypes = opticalDrive.supportedMedia();
++        QString first;
++        QString second;
++
++        first = QObject::tr("CD-ROM", "First item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Cdr)
++            first = QObject::tr("CD-R", "First item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Cdrw)
++            first = QObject::tr("CD-RW", "First item of %1%2 Drive sentence");
++
++        if (mediumTypes & Solid::OpticalDrive::Dvd)
++            second = QObject::tr("/DVD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdplusr)
++            second = QObject::tr("/DVD+R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdplusrw)
++            second = QObject::tr("/DVD+RW", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdr)
++            second = QObject::tr("/DVD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdrw)
++            second = QObject::tr("/DVD-RW", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Dvdram)
++            second = QObject::tr("/DVD-RAM", "Second item of %1%2 Drive sentence");
++        if ((mediumTypes & Solid::OpticalDrive::Dvdr) && (mediumTypes & Solid::OpticalDrive::Dvdplusr))
++        {
++            if(mediumTypes & Solid::OpticalDrive::Dvdplusdl)
++                second = QObject::trUtf8("/DVD±R DL", "Second item of %1%2 Drive sentence");
++            else
++                second = QObject::trUtf8("/DVD±R", "Second item of %1%2 Drive sentence");
++        }
++        if ((mediumTypes & Solid::OpticalDrive::Dvdrw) && (mediumTypes & Solid::OpticalDrive::Dvdplusrw))
++        {
++            if((mediumTypes & Solid::OpticalDrive::Dvdplusdl) || (mediumTypes & Solid::OpticalDrive::Dvdplusdlrw))
++                second = QObject::trUtf8("/DVD±RW DL", "Second item of %1%2 Drive sentence");
++            else
++                second = QObject::trUtf8("/DVD±RW", "Second item of %1%2 Drive sentence");
++        }
++        if (mediumTypes & Solid::OpticalDrive::Bd)
++            second = QObject::tr("/BD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Bdr)
++            second = QObject::tr("/BD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::Bdre)
++            second = QObject::tr("/BD-RE", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvd)
++            second = QObject::tr("/HD DVD-ROM", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvdr)
++            second = QObject::tr("/HD DVD-R", "Second item of %1%2 Drive sentence");
++        if (mediumTypes & Solid::OpticalDrive::HdDvdrw)
++            second = QObject::tr("/HD DVD-RW", "Second item of %1%2 Drive sentence");
++
++        if (drive_is_hotpluggable)
++            description = QObject::tr("External %1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
++        else
++            description = QObject::tr("%1%2 Drive", "%1 is CD-ROM/CD-R/etc; %2 is '/DVD-ROM'/'/DVD-R'/etc (with leading slash)").arg(first).arg(second);
++
++        return description;
++    }
++
++    if (drive_type == Solid::StorageDrive::Floppy)
++    {
++        if (drive_is_hotpluggable)
++            description = QObject::tr("External Floppy Drive");
++        else
++            description = QObject::tr("Floppy Drive");
++
++        return description;
++    }
++
++    bool drive_is_removable = storageDrive.isRemovable();
++
++    if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
++    {
++        QString size_str = formatByteSize(storageDrive.size());
++        if (!size_str.isEmpty())
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
++            else
++                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
++        } else {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("External Hard Drive");
++            else
++                description = QObject::tr("Hard Drive");
++        }
++
++        return description;
++    }
++
++    QString vendormodel_str;
++    QString model = product();
++    QString vendor_str = vendor();
++
++    if (vendor_str.isEmpty())
++    {
++        if (!model.isEmpty())
++            vendormodel_str = model;
++    }
++    else
++    {
++        if (model.isEmpty())
++            vendormodel_str = vendor_str;
++        else
++        {
++            if (model.startsWith(vendor_str))
++            {
++                // e.g. vendor is "Nokia" and model is "Nokia N950" we do not want "Nokia Nokia N950" as description
++                vendormodel_str = model;
++            }
++            else
++            {
++                vendormodel_str = QObject::tr("%1 %2", "%1 is the vendor, %2 is the model of the device").arg(vendor_str).arg(model);
++            }
++        }
++    }
++
++    if (vendormodel_str.isEmpty())
++        description = QObject::tr("Drive");
++    else
++        description = vendormodel_str;
++
++    return description;
++}
++
++QString Device::volumeDescription() const
++{
++    QString description;
++    const UDisks2::StorageVolume storageVolume(const_cast<Device*>(this));
++    QString volume_label = prop("IdLabel").toString();
++    if (volume_label.isEmpty())
++        volume_label = prop("Name").toString();
++    if (!volume_label.isEmpty())
++        return volume_label;
++
++    UDisks2::Device storageDevice(drivePath());
++    const UDisks2::StorageDrive storageDrive(&storageDevice);
++    Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
++
++    // Handle media in optical drives
++    if (drive_type == Solid::StorageDrive::CdromDrive)
++    {
++        const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
++        switch (disc.discType())
++        {
++            case Solid::OpticalDisc::UnknownDiscType:
++            case Solid::OpticalDisc::CdRom:
++                description = QObject::tr("CD-ROM");
++                break;
++
++            case Solid::OpticalDisc::CdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank CD-R");
++                else
++                    description = QObject::tr("CD-R");
++                break;
++
++            case Solid::OpticalDisc::CdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank CD-RW");
++                else
++                    description = QObject::tr("CD-RW");
++                break;
++
++            case Solid::OpticalDisc::DvdRom:
++                description = QObject::tr("DVD-ROM");
++                break;
++
++            case Solid::OpticalDisc::DvdRam:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-RAM");
++                else
++                    description = QObject::tr("DVD-RAM");
++                break;
++
++            case Solid::OpticalDisc::DvdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-R");
++                else
++                    description = QObject::tr("DVD-R");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRecordableDuallayer:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+R Dual-Layer");
++                else
++                    description = QObject::tr("DVD+R Dual-Layer");
++                break;
++
++            case Solid::OpticalDisc::DvdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD-RW");
++                else
++                    description = QObject::tr("DVD-RW");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+R");
++                else
++                    description = QObject::tr("DVD+R");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+RW");
++                else
++                    description = QObject::tr("DVD+RW");
++                break;
++
++            case Solid::OpticalDisc::DvdPlusRewritableDuallayer:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank DVD+RW Dual-Layer");
++                else
++                    description = QObject::tr("DVD+RW Dual-Layer");
++                break;
++
++            case Solid::OpticalDisc::BluRayRom:
++                description = QObject::tr("BD-ROM");
++                break;
++
++            case Solid::OpticalDisc::BluRayRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank BD-R");
++                else
++                    description = QObject::tr("BD-R");
++                break;
++
++            case Solid::OpticalDisc::BluRayRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank BD-RE");
++                else
++                    description = QObject::tr("BD-RE");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRom:
++                description = QObject::tr("HD DVD-ROM");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRecordable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank HD DVD-R");
++                else
++                    description = QObject::tr("HD DVD-R");
++                break;
++
++            case Solid::OpticalDisc::HdDvdRewritable:
++                if (disc.isBlank())
++                    description = QObject::tr("Blank HD DVD-RW");
++                else
++                    description = QObject::tr("HD DVD-RW");
++                break;
++            }
++
++        // Special case for pure audio disc
++        if (disc.availableContent() == Solid::OpticalDisc::Audio)
++            description = QObject::tr("Audio CD");
++
++        return description;
++    }
++
++    const bool drive_is_removable = storageDrive.isRemovable();
++    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
++
++    QString size_str = formatByteSize(storageVolume.size());
++    if (isEncryptedContainer())
++    {
++        if (!size_str.isEmpty())
++            description = QObject::tr("%1 Encrypted Container", "%1 is the size").arg(size_str);
++        else
++            description = QObject::tr("Encrypted Container");
++    }
++    else if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
++    {
++        if (!size_str.isEmpty())
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("%1 External Hard Drive", "%1 is the size").arg(size_str);
++            else
++                description = QObject::tr("%1 Hard Drive", "%1 is the size").arg(size_str);
++        }
++        else
++        {
++            if (drive_is_hotpluggable)
++                description = QObject::tr("External Hard Drive");
++            else
++                description = QObject::tr("Hard Drive");
++        }
++    }
++    else
++    {
++        if (drive_is_removable)
++            description = QObject::tr("%1 Removable Media", "%1 is the size").arg(size_str);
++        else
++            description = QObject::tr("%1 Media", "%1 is the size").arg(size_str);
++    }
++
++    return description;
++}
++
++QString Device::icon() const
++{
++    QString iconName = prop( "HintIconName" ).toString();
++
++    if ( !iconName.isEmpty() )
++    {
++        return iconName;
++    }
++    else if (isDrive()) {
++        const bool isRemovable = prop("Removable").toBool();
++        const QString conn = prop("ConnectionBus").toString();
++
++        if (isOpticalDrive())
++            return "drive-optical";
++        else if (isRemovable && !isOpticalDisc()) {
++            if (conn == "usb")
++                return "drive-removable-media-usb";
++            else
++                return "drive-removable-media";
++        }
++    }
++    else if (isBlock()) {
++        Device drive(drivePath());
++
++        // handle media
++        const QString media = drive.prop("Media").toString();
++
++        if ( !media.isEmpty() )
++        {
++            if ( isOpticalDisc() )    // optical stuff
++            {
++                bool isWritable = drive.prop("OpticalBlank").toBool();
++
++                const UDisks2::OpticalDisc disc(const_cast<Device*>(this));
++                Solid::OpticalDisc::ContentTypes availContent = disc.availableContent();
++
++                if (availContent & Solid::OpticalDisc::VideoDvd) // Video DVD
++                    return "media-optical-dvd-video";
++                else if ((availContent & Solid::OpticalDisc::VideoCd) || (availContent & Solid::OpticalDisc::SuperVideoCd)) // Video CD
++                    return "media-optical-video";
++                else if ((availContent & Solid::OpticalDisc::Data) && (availContent & Solid::OpticalDisc::Audio)) // Mixed CD
++                    return "media-optical-mixed-cd";
++                else if (availContent & Solid::OpticalDisc::Audio) // Audio CD
++                    return "media-optical-audio";
++                else if (availContent & Solid::OpticalDisc::Data) // Data CD
++                    return "media-optical-data";
++                else if ( isWritable )
++                    return "media-optical-recordable";
++                else
++                {
++                    if ( media.startsWith( "optical_dvd" ) || media.startsWith( "optical_hddvd" ) ) // DVD
++                        return "media-optical-dvd";
++                    else if ( media.startsWith( "optical_bd" ) ) // BluRay
++                        return "media-optical-blu-ray";
++                }
++
++                // fallback for every other optical disc
++                return "media-optical";
++            }
++
++            if ( media == "flash_ms" ) // Flash & Co.
++                return "media-flash-memory-stick";
++            else if ( media == "flash_sd" || media == "flash_sdhc" || media == "flash_sdxc" || media == "flash_mmc" )
++                return "media-flash-sd-mmc";
++            else if ( media == "flash_sm" )
++                return "media-flash-smart-media";
++            else if ( media == "thumb" )
++                return "drive-removable-media-usb-pendrive";
++            else if ( media.startsWith( "flash" ) )
++                return "media-flash";
++            else if ( media == "floppy" ) // the good ol' floppy
++                return "media-floppy";
++        }
++
++        if (drive.prop("ConnectionBus").toString() == "sdio")  // hack for SD cards connected thru sdio bus
++            return "media-flash-sd-mmc";
++
++        return drive.icon();
++    }
++
++    return "drive-harddisk";    // general fallback
++}
++
++QString Device::product() const
++{
++    QString product = prop("Model").toString();
++
++    if (!isDrive()) {
++        QString label = prop("IdLabel").toString();
++        if (!label.isEmpty()) {
++            product = label;
++        }
++    }
++
++    return product;
++}
++
++QString Device::vendor() const
++{
++    return prop("Vendor").toString();
++}
++
++QString Device::udi() const
++{
++    return m_udi;
++}
++
++QString Device::parentUdi() const
++{
++    QString parent;
++
++    if (isEncryptedContainer())
++        parent = prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
++    else if (propertyExists("Drive"))  // block
++        parent = prop("Drive").value<QDBusObjectPath>().path();
++    else if (propertyExists("Table"))  // partition
++        parent = prop("Table").value<QDBusObjectPath>().path();
++    else if (parent.isEmpty() || parent=="/") {
++        parent = UD2_UDI_DISKS_PREFIX;
++    }
++    return parent;
++}
++
++void Device::checkCache(const QString &key) const
++{
++    if (m_cache.isEmpty()) // recreate the cache
++        allProperties();
++
++    if (m_cache.contains(key))
++        return;
++
++    QVariant reply = m_device->property(key.toUtf8());
++
++    if (reply.isValid()) {
++        m_cache.insert(key, reply);
++    } else {
++        //qDebug() << "got invalid reply for cache:" << key;
++        //m_cache.insert(key, QVariant());
++    }
++}
++
++QString Device::introspect() const
++{
++    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
++                                                       DBUS_INTERFACE_INTROSPECT, "Introspect");
++    QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
++    reply.waitForFinished();
++
++    if (reply.isValid())
++        return reply.value();
++    else {
++        return QString();
++    }
++}
++
++QVariant Device::prop(const QString &key) const
++{
++    checkCache(key);
++    return m_cache.value(key);
++}
++
++bool Device::propertyExists(const QString &key) const
++{
++    checkCache(key);
++    return m_cache.contains(key);
++}
++
++QVariantMap Device::allProperties() const
++{
++    Q_FOREACH (const QString & iface, m_interfaces) {
++        if (iface.startsWith("org.freedesktop.DBus"))
++            continue;
++        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, "GetAll");
++        call << iface;
++        QDBusPendingReply<QVariantMap> reply = QDBusConnection::systemBus().asyncCall(call);
++        reply.waitForFinished();
++
++        if (reply.isValid())
++            m_cache.unite(reply.value());
++        else
++            qWarning() << "Error getting props:" << reply.error().name() << reply.error().message();
++        //qDebug() << "After iface" << iface << ", cache now contains" << m_cache.size() << "items";
++    }
++
++    return m_cache;
++}
++
++bool Device::hasInterface(const QString &name) const
++{
++    return m_interfaces.contains(name);
++}
++
++QStringList Device::interfaces() const
++{
++    return m_interfaces;
++}
++
++void Device::initInterfaces()
++{
++    m_interfaces.clear();
++    const QString xmlData = introspect();
++    QDomDocument dom;
++    dom.setContent(xmlData);
++    QDomNodeList ifaceNodeList = dom.elementsByTagName("interface");
++    for (int i = 0; i < ifaceNodeList.count(); i++) {
++        QDomElement ifaceElem = ifaceNodeList.item(i).toElement();
++        if (!ifaceElem.isNull())
++            m_interfaces.append(ifaceElem.attribute("name"));
++    }
++    //qDebug() << "Device" << m_udi << "has interfaces:" << m_interfaces;
++}
++
++void Device::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    //Q_UNUSED(ifaceName);
++
++    qDebug() << m_udi << "'s interface" << ifaceName << "changed props:";
++
++    QMap<QString, int> changeMap;
++
++    Q_FOREACH(const QString & key, invalidatedProps) {
++        m_cache.remove(key);
++        changeMap.insert(key, Solid::GenericInterface::PropertyRemoved);
++        qDebug() << "\t invalidated:" << key;
++    }
++
++    QMapIterator<QString, QVariant> i(changedProps);
++    while (i.hasNext()) {
++        i.next();
++        const QString key = i.key();
++        m_cache.insert(key, i.value());  // replace the value
++        changeMap.insert(key, Solid::GenericInterface::PropertyModified);
++        qDebug() << "\t modified:" << key << ":" << m_cache.value(key);
++    }
++
++    Q_EMIT propertyChanged(changeMap);
++    Q_EMIT changed();
++}
++
++void Device::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
++{
++    if (object_path.path() == m_udi) {
++        m_interfaces.append(interfaces_and_properties.keys());
++    }
++}
++
++void Device::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
++{
++    if (object_path.path() == m_udi) {
++        Q_FOREACH(const QString & iface, interfaces) {
++            m_interfaces.removeAll(iface);
++        }
++    }
++}
++
++
++QString Device::errorToString(const QString & error) const
++{
++    if (error == UD2_ERROR_UNAUTHORIZED || error == UD2_ERROR_NOT_AUTHORIZED)
++        return QObject::tr("You are not authorized to perform this operation");
++    else if (error == UD2_ERROR_BUSY)
++        return QObject::tr("The device is currently busy");
++    else if (error == UD2_ERROR_FAILED)
++        return QObject::tr("The requested operation has failed");
++    else if (error == UD2_ERROR_CANCELED)
++        return QObject::tr("The requested operation has been canceled");
++    else if (error == UD2_ERROR_INVALID_OPTION)
++        return QObject::tr("An invalid or malformed option has been given");
++    else if (error == UD2_ERROR_MISSING_DRIVER)
++        return QObject::tr("The kernel driver for this filesystem type is not available");
++    else if (error == UD2_ERROR_ALREADY_MOUNTED)
++        return QObject::tr("The device is already mounted");
++    else if (error == UD2_ERROR_NOT_MOUNTED)
++        return QObject::tr("The device is not mounted");
++    else if (error == UD2_ERROR_MOUNTED_BY_OTHER_USER)
++        return QObject::tr("The device is mounted by another user");
++    else if (error == UD2_ERROR_ALREADY_UNMOUNTING)
++        return QObject::tr("The device is already unmounting");
++    else if (error == UD2_ERROR_TIMED_OUT)
++        return QObject::tr("The operation timed out");
++    else if (error == UD2_ERROR_WOULD_WAKEUP)
++        return QObject::tr("The operation would wake up a disk that is in a deep-sleep state");
++    else if (error == UD2_ERROR_ALREADY_CANCELLED)
++        return QObject::tr("The operation has already been canceled");
++    else
++        return QObject::tr("An unspecified error has occurred");
++}
++
++Solid::ErrorType Device::errorToSolidError(const QString & error) const
++{
++    if (error == UD2_ERROR_BUSY)
++        return Solid::DeviceBusy;
++    else if (error == UD2_ERROR_FAILED)
++        return Solid::OperationFailed;
++    else if (error == UD2_ERROR_CANCELED)
++        return Solid::UserCanceled;
++    else if (error == UD2_ERROR_INVALID_OPTION)
++        return Solid::InvalidOption;
++    else if (error == UD2_ERROR_MISSING_DRIVER)
++        return Solid::MissingDriver;
++    else
++        return Solid::UnauthorizedOperation;
++}
++
++bool Device::isBlock() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_BLOCK);
++}
++
++bool Device::isPartition() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_PARTITION);
++}
++
++bool Device::isPartitionTable() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_PARTITIONTABLE);
++}
++
++bool Device::isStorageVolume() const
++{
++    return isPartition() || isPartitionTable() || isStorageAccess() || isOpticalDisc();
++}
++
++bool Device::isStorageAccess() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM) || isEncryptedContainer();
++}
++
++bool Device::isDrive() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_DRIVE);
++}
++
++bool Device::isOpticalDrive() const
++{
++    return isDrive() && !prop("MediaCompatibility").toStringList().filter("optical_").isEmpty();
++}
++
++bool Device::isOpticalDisc() const
++{
++    const QString drv = drivePath();
++    if (drv.isEmpty() || drv == "/")
++        return false;
++
++    Device drive(drv);
++    return drive.prop("Optical").toBool();
++}
++
++bool Device::mightBeOpticalDisc() const
++{
++    const QString drv = drivePath();
++    if (drv.isEmpty() || drv == "/")
++        return false;
++
++    Device drive(drv);
++    return drive.isOpticalDrive();
++}
++
++bool Device::isMounted() const
++{
++    return propertyExists("MountPoints") && !qdbus_cast<QByteArrayList>(prop("MountPoints")).isEmpty();
++}
++
++bool Device::isEncryptedContainer() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_ENCRYPTED);
++}
++
++bool Device::isEncryptedCleartext() const
++{
++    const QString holderDevice = prop("CryptoBackingDevice").toString();
++    if (holderDevice.isEmpty() || holderDevice == "/")
++        return false;
++    else
++        return true;
++}
++
++bool Device::isSwap() const
++{
++    return hasInterface(UD2_DBUS_INTERFACE_SWAP);
++}
++
++QString Device::drivePath() const
++{
++    return prop("Drive").value<QDBusObjectPath>().path();
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdevice.h b/tier1/solid/src/solid/backends/udisks2/udisksdevice.h
+new file mode 100644
+index 0000000..cf8e2f5
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksdevice.h
+@@ -0,0 +1,112 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2DEVICE_H
++#define UDISKS2DEVICE_H
++
++#include "udisks2.h"
++
++#include <ifaces/device.h>
++#include <solid/deviceinterface.h>
++#include <solid/solidnamespace.h>
++
++#include <QtDBus/QDBusInterface>
++#include <QtDBus/QDBusObjectPath>
++#include <QtCore/QStringList>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Device: public Solid::Ifaces::Device
++{
++    Q_OBJECT
++public:
++    Device(const QString &udi);
++    virtual ~Device();
++
++    virtual QObject* createDeviceInterface(const Solid::DeviceInterface::Type& type);
++    virtual bool queryDeviceInterface(const Solid::DeviceInterface::Type& type) const;
++    virtual QString description() const;
++    virtual QStringList emblems() const;
++    virtual QString icon() const;
++    virtual QString product() const;
++    virtual QString vendor() const;
++    virtual QString udi() const;
++    virtual QString parentUdi() const;
++
++    QVariant prop(const QString &key) const;
++    bool propertyExists(const QString &key) const;
++    QVariantMap allProperties() const;
++
++    bool hasInterface(const QString & name) const;
++    QStringList interfaces() const;
++
++    QString errorToString(const QString & error) const;
++    Solid::ErrorType errorToSolidError(const QString & error) const;
++
++    bool isBlock() const;
++    bool isPartition() const;
++    bool isPartitionTable() const;
++    bool isStorageVolume() const;
++    bool isStorageAccess() const;
++    bool isDrive() const;
++    bool isOpticalDrive() const;
++    bool isOpticalDisc() const;
++    bool mightBeOpticalDisc() const;
++    bool isMounted() const;
++    bool isEncryptedContainer() const;
++    bool isEncryptedCleartext() const;
++    bool isSwap() const;
++
++    QString drivePath() const;
++
++Q_SIGNALS:
++    void changed();
++    void propertyChanged(const QMap<QString,int> &changes);
++
++private Q_SLOTS:
++    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++
++private:
++    QString storageDescription() const;
++    QString volumeDescription() const;
++    mutable QDBusInterface *m_device;
++    QString m_udi;
++    mutable QVariantMap m_cache;
++
++    void initInterfaces();
++    QStringList m_interfaces;
++
++    void checkCache(const QString &key) const;
++    QString introspect() const;
++};
++
++}
++}
++}
++
++#endif // UDISKS2DEVICE_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.cpp b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.cpp
+new file mode 100644
+index 0000000..9fa60e5
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.cpp
+@@ -0,0 +1,33 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksdeviceinterface.h"
++
++using namespace Solid::Backends::UDisks2;
++
++DeviceInterface::DeviceInterface(Device *device)
++    : QObject(device), m_device(device)
++{
++
++}
++
++DeviceInterface::~DeviceInterface()
++{
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.h b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.h
+new file mode 100644
+index 0000000..43a1b6f
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksdeviceinterface.h
+@@ -0,0 +1,148 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2DEVICEINTERFACE_H
++#define UDISKS2DEVICEINTERFACE_H
++
++#include <ifaces/deviceinterface.h>
++#include "udisksdevice.h"
++
++#include <QtCore/QObject>
++#include <QtCore/QStringList>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class DeviceInterface : public QObject, virtual public Solid::Ifaces::DeviceInterface
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::DeviceInterface)
++public:
++    DeviceInterface(Device *device);
++    virtual ~DeviceInterface();
++
++protected:
++    Device *m_device;
++
++public:
++    inline static QStringList toStringList(Solid::DeviceInterface::Type type)
++    {
++        QStringList list;
++
++        switch(type)
++        {
++        case Solid::DeviceInterface::GenericInterface:
++            list << "generic";
++            break;
++        case Solid::DeviceInterface::Processor:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Block:
++            list << "block";
++            break;
++        case Solid::DeviceInterface::StorageAccess:
++            list << "volume";
++            break;
++        case Solid::DeviceInterface::StorageDrive:
++            list << "storage";
++            break;
++        case Solid::DeviceInterface::OpticalDrive:
++            list << "storage.cdrom";
++            break;
++        case Solid::DeviceInterface::StorageVolume:
++            list << "volume";
++            break;
++        case Solid::DeviceInterface::OpticalDisc:
++            list << "volume.disc";
++            break;
++        case Solid::DeviceInterface::Camera:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::PortableMediaPlayer:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::NetworkInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::AcAdapter:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Battery:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Button:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::AudioInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::DvbInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Video:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::SerialInterface:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::InternetGateway:
++            break;
++        case Solid::DeviceInterface::SmartCardReader:
++            // Doesn't exist with UDisks
++        case Solid::DeviceInterface::NetworkShare:
++            // Doesn't exist with UDisks
++            break;
++        case Solid::DeviceInterface::Unknown:
++            break;
++        case Solid::DeviceInterface::Last:
++            break;
++        }
++
++        return list;
++    }
++
++    inline static Solid::DeviceInterface::Type fromString(const QString &capability)
++    {
++        if (capability == "generic")
++            return Solid::DeviceInterface::GenericInterface;
++        else if (capability == "block")
++            return Solid::DeviceInterface::Block;
++        else if (capability == "storage")
++            return Solid::DeviceInterface::StorageDrive;
++        else if (capability == "storage.cdrom")
++            return Solid::DeviceInterface::OpticalDrive;
++        else if (capability == "volume")
++            return Solid::DeviceInterface::StorageVolume;
++        else if (capability == "volume.disc")
++            return Solid::DeviceInterface::OpticalDisc;
++        else
++            return Solid::DeviceInterface::Unknown;
++    }
++};
++
++}
++}
++}
++
++#endif // UDISKS2DEVICEINTERFACE_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.cpp b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.cpp
+new file mode 100644
+index 0000000..2d8cea2
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.cpp
+@@ -0,0 +1,53 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksgenericinterface.h"
++
++#include "udisksdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++
++GenericInterface::GenericInterface(Device *device)
++    : DeviceInterface(device)
++{
++    connect(device, SIGNAL(propertyChanged(QMap<QString,int>)),
++            this, SIGNAL(propertyChanged(QMap<QString,int>)));
++}
++
++GenericInterface::~GenericInterface()
++{
++}
++
++QVariant GenericInterface::property(const QString &key) const
++{
++    return m_device->prop(key);
++}
++
++QVariantMap GenericInterface::allProperties() const
++{
++    return m_device->allProperties();
++}
++
++bool GenericInterface::propertyExists(const QString &key) const
++{
++    return m_device->propertyExists(key);
++}
++
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.h b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.h
+new file mode 100644
+index 0000000..d225f32
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksgenericinterface.h
+@@ -0,0 +1,57 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
++#define SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
++
++#include <solid/ifaces/genericinterface.h>
++#include <solid/genericinterface.h>
++#include "udisksdeviceinterface.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++class Device;
++
++class GenericInterface : public DeviceInterface, virtual public Solid::Ifaces::GenericInterface
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::GenericInterface)
++
++public:
++    GenericInterface(Device *device);
++    virtual ~GenericInterface();
++
++    virtual QVariant property(const QString &key) const;
++    virtual QVariantMap allProperties() const;
++    virtual bool propertyExists(const QString &key) const;
++
++Q_SIGNALS:
++    void propertyChanged(const QMap<QString, int> &changes);
++    void conditionRaised(const QString &condition, const QString &reason);
++};
++}
++}
++}
++
++#endif // SOLID_BACKENDS_UDISKS2_GENERICINTERFACE_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp b/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp
+new file mode 100644
+index 0000000..9af8ee2
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksmanager.cpp
+@@ -0,0 +1,227 @@
++/*
++    Copyright 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksmanager.h"
++
++#include <QtCore/QDebug>
++#include <QtDBus>
++
++#include "../shared/rootdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++using namespace Solid::Backends::Shared;
++
++Manager::Manager(QObject *parent)
++    : Solid::Ifaces::DeviceManager(parent),
++      m_manager(UD2_DBUS_SERVICE,
++                UD2_DBUS_PATH,
++                QDBusConnection::systemBus())
++{
++    m_supportedInterfaces
++            << Solid::DeviceInterface::GenericInterface
++            << Solid::DeviceInterface::Block
++            << Solid::DeviceInterface::StorageAccess
++            << Solid::DeviceInterface::StorageDrive
++            << Solid::DeviceInterface::OpticalDrive
++            << Solid::DeviceInterface::OpticalDisc
++            << Solid::DeviceInterface::StorageVolume;
++
++    qDBusRegisterMetaType<QList<QDBusObjectPath> >();
++    qDBusRegisterMetaType<QVariantMap>();
++    qDBusRegisterMetaType<QVariantMapMap>();
++    qDBusRegisterMetaType<QByteArrayList>();
++    qDBusRegisterMetaType<DBUSManagerStruct>();
++
++    bool serviceFound = m_manager.isValid();
++    if (!serviceFound) {
++        // find out whether it will be activated automatically
++        QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus",
++                                                              "/org/freedesktop/DBus",
++                                                              "org.freedesktop.DBus",
++                                                              "ListActivatableNames");
++
++        QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
++        if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
++            QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
++            serviceFound = true;
++        }
++    }
++
++    if (serviceFound) {
++        connect(&m_manager, SIGNAL(InterfacesAdded(QDBusObjectPath, QVariantMapMap)),
++                this, SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
++        connect(&m_manager, SIGNAL(InterfacesRemoved(QDBusObjectPath,QStringList)),
++                this, SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
++    }
++}
++
++Manager::~Manager()
++{
++}
++
++QObject* Manager::createDevice(const QString& udi)
++{
++    if (udi==udiPrefix()) {
++        RootDevice *root = new RootDevice(udi);
++
++        root->setProduct(tr("Storage"));
++        root->setDescription(tr("Storage devices"));
++        root->setIcon("server-database"); // Obviously wasn't meant for that, but maps nicely in oxygen icon set :-p
++
++        return root;
++    } else if (deviceCache().contains(udi)) {
++        return new Device(udi);
++    } else {
++        return 0;
++    }
++}
++
++QStringList Manager::devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type)
++{
++    QStringList result;
++
++    if (!parentUdi.isEmpty())
++    {
++        Q_FOREACH (const QString &udi, deviceCache())
++        {
++            Device device(udi);
++            if (device.queryDeviceInterface(type) && device.parentUdi() == parentUdi)
++                result << udi;
++        }
++
++        return result;
++    }
++    else if (type != Solid::DeviceInterface::Unknown)
++    {
++        Q_FOREACH (const QString &udi, deviceCache())
++        {
++            Device device(udi);
++            if (device.queryDeviceInterface(type))
++                result << udi;
++        }
++
++        return result;
++    }
++
++    return deviceCache();
++}
++
++QStringList Manager::allDevices()
++{
++    m_deviceCache.clear();
++
++    QDBusPendingReply<DBUSManagerStruct> reply = m_manager.GetManagedObjects();
++    reply.waitForFinished();
++    if (!reply.isError()) {  // enum devices
++        m_deviceCache << udiPrefix();
++
++        Q_FOREACH(const QDBusObjectPath &path, reply.value().keys()) {
++            const QString udi = path.path();
++            qDebug() << "Adding device" << udi;
++
++            if (udi == UD2_DBUS_PATH_MANAGER || udi == UD2_UDI_DISKS_PREFIX || udi.startsWith(UD2_DBUS_PATH_JOBS))
++                continue;
++
++            Device device(udi);
++            if (device.mightBeOpticalDisc()) {
++                QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                                     SLOT(slotMediaChanged(QDBusMessage)));
++                if (!device.isOpticalDisc())  // skip empty CD disc
++                    continue;
++            }
++
++            m_deviceCache.append(udi);
++        }
++    }
++    else  // show error
++    {
++        qWarning() << "Failed enumerating UDisks2 objects:" << reply.error().name() << "\n" << reply.error().message();
++    }
++
++    return m_deviceCache;
++}
++
++
++QSet< Solid::DeviceInterface::Type > Manager::supportedInterfaces() const
++{
++    return m_supportedInterfaces;
++}
++
++QString Manager::udiPrefix() const
++{
++    return UD2_UDI_DISKS_PREFIX;
++}
++
++void Manager::slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties)
++{
++    const QString udi = object_path.path();
++
++    qDebug() << udi << "has new interfaces:" << interfaces_and_properties.keys();
++
++    // new device, we don't know it yet
++    if (!m_deviceCache.contains(udi)) {
++        m_deviceCache.append(udi);
++        Q_EMIT deviceAdded(udi);
++    }
++}
++
++void Manager::slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces)
++{
++    const QString udi = object_path.path();
++
++    qDebug() << udi << "lost interfaces:" << interfaces;
++
++    Device device(udi);
++
++    if (!udi.isEmpty() && (interfaces.isEmpty() || device.interfaces().isEmpty() || device.interfaces().contains(UD2_DBUS_INTERFACE_FILESYSTEM))) {
++        Q_EMIT deviceRemoved(udi);
++        m_deviceCache.removeAll(udi);
++    }
++}
++
++void Manager::slotMediaChanged(const QDBusMessage & msg)
++{
++    const QVariantMap properties = qdbus_cast<QVariantMap>(msg.arguments().at(1));
++
++    if (!properties.contains("Size"))  // react only on Size changes
++        return;
++
++    const QString udi = msg.path();
++    qulonglong size = properties.value("Size").toULongLong();
++    qDebug() << "MEDIA CHANGED in" << udi << "; size is:" << size;
++
++    if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the optdisc, got inserted
++        m_deviceCache.append(udi);
++        Q_EMIT deviceAdded(udi);
++    }
++
++    if (m_deviceCache.contains(udi) && size == 0) {  // we know the optdisc, got removed
++        Q_EMIT deviceRemoved(udi);
++        m_deviceCache.removeAll(udi);
++    }
++}
++
++const QStringList & Manager::deviceCache()
++{
++    if (m_deviceCache.isEmpty())
++        allDevices();
++
++    return m_deviceCache;
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksmanager.h b/tier1/solid/src/solid/backends/udisks2/udisksmanager.h
+new file mode 100644
+index 0000000..7cf0a72
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksmanager.h
+@@ -0,0 +1,69 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2MANAGER_H
++#define UDISKS2MANAGER_H
++
++#include "udisks2.h"
++#include "udisksdevice.h"
++#include "dbus/manager.h"
++
++#include "solid/ifaces/devicemanager.h"
++
++#include <QtDBus/QDBusInterface>
++#include <QtCore/QSet>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class Manager: public Solid::Ifaces::DeviceManager
++{
++    Q_OBJECT
++
++public:
++    Manager(QObject *parent);
++    virtual QObject* createDevice(const QString& udi);
++    virtual QStringList devicesFromQuery(const QString& parentUdi, Solid::DeviceInterface::Type type);
++    virtual QStringList allDevices();
++    virtual QSet< Solid::DeviceInterface::Type > supportedInterfaces() const;
++    virtual QString udiPrefix() const;
++    virtual ~Manager();
++
++private Q_SLOTS:
++    void slotInterfacesAdded(const QDBusObjectPath &object_path, const QVariantMapMap &interfaces_and_properties);
++    void slotInterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces);
++    void slotMediaChanged(const QDBusMessage &msg);
++
++private:
++    const QStringList &deviceCache();
++    QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
++    org::freedesktop::DBus::ObjectManager m_manager;
++    QStringList m_deviceCache;
++};
++
++}
++}
++}
++#endif // UDISKS2MANAGER_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp
+new file mode 100644
+index 0000000..478c930
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.cpp
+@@ -0,0 +1,277 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <sys/types.h>
++#include <unistd.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++
++#include <QtCore/QFile>
++#include <QtDBus/QDBusConnection>
++
++#include "../shared/udevqtclient.h"
++
++#include "udisks2.h"
++#include "udisksopticaldisc.h"
++
++// inspired by http://cgit.freedesktop.org/hal/tree/hald/linux/probing/probe-volume.c
++static Solid::OpticalDisc::ContentType advancedDiscDetect(const QByteArray & device_file)
++{
++    /* the discs block size */
++    unsigned short bs;
++    /* the path table size */
++    unsigned short ts;
++    /* the path table location (in blocks) */
++    unsigned int tl;
++    /* length of the directory name in current path table entry */
++    unsigned char len_di = 0;
++    /* the number of the parent directory's path table entry */
++    unsigned int parent = 0;
++    /* filename for the current path table entry */
++    char dirname[256];
++    /* our position into the path table */
++    int pos = 0;
++    /* the path table record we're on */
++    int curr_record = 1;
++
++    Solid::OpticalDisc::ContentType result = Solid::OpticalDisc::NoContent;
++
++    int fd = open(device_file.constData(), O_RDONLY);
++
++    /* read the block size */
++    lseek (fd, 0x8080, SEEK_CUR);
++    if (read (fd, &bs, 2) != 2)
++    {
++        qDebug("Advanced probing on %s failed while reading block size", qPrintable(device_file));
++        goto out;
++    }
++
++    /* read in size of path table */
++    lseek (fd, 2, SEEK_CUR);
++    if (read (fd, &ts, 2) != 2)
++    {
++        qDebug("Advanced probing on %s failed while reading path table size", qPrintable(device_file));
++        goto out;
++    }
++
++    /* read in which block path table is in */
++    lseek (fd, 6, SEEK_CUR);
++    if (read (fd, &tl, 4) != 4)
++    {
++        qDebug("Advanced probing on %s failed while reading path table block", qPrintable(device_file));
++        goto out;
++    }
++
++    /* seek to the path table */
++    lseek (fd, bs * tl, SEEK_SET);
++
++    /* loop through the path table entries */
++    while (pos < ts)
++    {
++        /* get the length of the filename of the current entry */
++        if (read (fd, &len_di, 1) != 1)
++        {
++            qDebug("Advanced probing on %s failed, cannot read more entries", qPrintable(device_file));
++            break;
++        }
++
++        /* get the record number of this entry's parent
++           i'm pretty sure that the 1st entry is always the top directory */
++        lseek (fd, 5, SEEK_CUR);
++        if (read (fd, &parent, 2) != 2)
++        {
++            qDebug("Advanced probing on %s failed, couldn't read parent entry", qPrintable(device_file));
++            break;
++        }
++
++        /* read the name */
++        if (read (fd, dirname, len_di) != len_di)
++        {
++            qDebug("Advanced probing on %s failed, couldn't read the entry name", qPrintable(device_file));
++            break;
++        }
++        dirname[len_di] = 0;
++
++        /* if we found a folder that has the root as a parent, and the directory name matches
++           one of the special directories then set the properties accordingly */
++        if (parent == 1)
++        {
++            if (!strcasecmp (dirname, "VIDEO_TS"))
++            {
++                qDebug("Disc in %s is a Video DVD", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoDvd;
++                break;
++            }
++            else if (!strcasecmp (dirname, "BDMV"))
++            {
++                qDebug("Disc in %s is a Blu-ray video disc", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoBluRay;
++                break;
++            }
++            else if (!strcasecmp (dirname, "VCD"))
++            {
++                qDebug("Disc in %s is a Video CD", qPrintable(device_file));
++                result = Solid::OpticalDisc::VideoCd;
++                break;
++            }
++            else if (!strcasecmp (dirname, "SVCD"))
++            {
++                qDebug("Disc in %s is a Super Video CD", qPrintable(device_file));
++                result = Solid::OpticalDisc::SuperVideoCd;
++                break;
++            }
++        }
++
++        /* all path table entries are padded to be even,
++           so if this is an odd-length table, seek a byte to fix it */
++        if (len_di%2 == 1)
++        {
++            lseek (fd, 1, SEEK_CUR);
++            pos++;
++        }
++
++        /* update our position */
++        pos += 8 + len_di;
++        curr_record++;
++    }
++
++    close(fd);
++    return result;
++
++out:
++    /* go back to the start of the file */
++    lseek (fd, 0, SEEK_SET);
++    close(fd);
++    return result;
++}
++
++using namespace Solid::Backends::UDisks2;
++
++OpticalDisc::OpticalDisc(Device *dev)
++    : StorageVolume(dev), m_needsReprobe(true), m_cachedContent(Solid::OpticalDisc::NoContent)
++{
++    UdevQt::Client client(this);
++    m_udevDevice = client.deviceByDeviceFile(device());
++    //qDebug() << "udev device:" << m_udevDevice.name() << "valid:" << m_udevDevice.isValid();
++    /*qDebug() << "\tProperties:" << */ m_udevDevice.deviceProperties(); // initialize the properties DB so that it doesn't crash further down, #298416
++
++    m_drive = new Device(m_device->prop("Drive").value<QDBusObjectPath>().path());
++    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_drive->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                         SLOT(slotDrivePropertiesChanged(QString,QVariantMap,QStringList)));
++}
++
++OpticalDisc::~OpticalDisc()
++{
++    delete m_drive;
++}
++
++qulonglong OpticalDisc::capacity() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++bool OpticalDisc::isRewritable() const
++{
++    // the hard way, udisks has no notion of a disc "rewritability"
++    const QString mediaType = media();
++    return mediaType == "optical_cd_rw" || mediaType == "optical_dvd_rw" || mediaType == "optical_dvd_ram" ||
++            mediaType == "optical_dvd_plus_rw" || mediaType == "optical_dvd_plus_rw_dl" ||
++            mediaType == "optical_bd_re" || mediaType == "optical_hddvd_rw";
++}
++
++bool OpticalDisc::isBlank() const
++{
++    return m_drive->prop("OpticalBlank").toBool();
++}
++
++bool OpticalDisc::isAppendable() const
++{
++    //qDebug() << "appendable prop" << m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE");
++    return m_udevDevice.deviceProperty("ID_CDROM_MEDIA_STATE").toString() == QLatin1String("appendable");
++}
++
++Solid::OpticalDisc::DiscType OpticalDisc::discType() const
++{
++    QMap<Solid::OpticalDisc::DiscType, QString> map;
++    map[Solid::OpticalDisc::CdRom] = "optical_cd";
++    map[Solid::OpticalDisc::CdRecordable] = "optical_cd_r";
++    map[Solid::OpticalDisc::CdRewritable] = "optical_cd_rw";
++    map[Solid::OpticalDisc::DvdRom] = "optical_dvd";
++    map[Solid::OpticalDisc::DvdRecordable] = "optical_dvd_r";
++    map[Solid::OpticalDisc::DvdRewritable] ="optical_dvd_rw";
++    map[Solid::OpticalDisc::DvdRam] ="optical_dvd_ram";
++    map[Solid::OpticalDisc::DvdPlusRecordable] ="optical_dvd_plus_r";
++    map[Solid::OpticalDisc::DvdPlusRewritable] ="optical_dvd_plus_rw";
++    map[Solid::OpticalDisc::DvdPlusRecordableDuallayer] ="optical_dvd_plus_r_dl";
++    map[Solid::OpticalDisc::DvdPlusRewritableDuallayer] ="optical_dvd_plus_rw_dl";
++    map[Solid::OpticalDisc::BluRayRom] ="optical_bd";
++    map[Solid::OpticalDisc::BluRayRecordable] ="optical_bd_r";
++    map[Solid::OpticalDisc::BluRayRewritable] ="optical_bd_re";
++    map[Solid::OpticalDisc::HdDvdRom] ="optical_hddvd";
++    map[Solid::OpticalDisc::HdDvdRecordable] ="optical_hddvd_r";
++    map[Solid::OpticalDisc::HdDvdRewritable] ="optical_hddvd_rw";
++    // TODO add these to Solid
++    //map[Solid::OpticalDisc::MagnetoOptical] ="optical_mo";
++    //map[Solid::OpticalDisc::MountRainer] ="optical_mrw";
++    //map[Solid::OpticalDisc::MountRainerWritable] ="optical_mrw_w";
++
++    return map.key(media(), Solid::OpticalDisc::UnknownDiscType);  // FIXME optimize, lookup by value, not key
++}
++
++Solid::OpticalDisc::ContentTypes OpticalDisc::availableContent() const
++{
++    if (isBlank()) {
++        m_needsReprobe = false;
++        return Solid::OpticalDisc::NoContent;
++    }
++
++    if (m_needsReprobe) {
++        m_cachedContent = Solid::OpticalDisc::NoContent;
++        const bool hasData = m_drive->prop("OpticalNumDataTracks").toUInt() > 0;
++        const bool hasAudio = m_drive->prop("OpticalNumAudioTracks").toUInt() > 0;
++
++        if ( hasData ) {
++            m_cachedContent |= Solid::OpticalDisc::Data;
++            m_cachedContent |= advancedDiscDetect(m_device->prop("Device").toByteArray());
++        }
++        if ( hasAudio )
++            m_cachedContent |= Solid::OpticalDisc::Audio;
++
++        m_needsReprobe = false;
++    }
++
++    return m_cachedContent;
++}
++
++void OpticalDisc::slotDrivePropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    Q_UNUSED(ifaceName);
++
++    if (changedProps.keys().contains("Media") || invalidatedProps.contains("Media")) {
++        m_needsReprobe = true;
++        m_cachedContent = Solid::OpticalDisc::NoContent;
++    }
++}
++
++QString OpticalDisc::media() const
++{
++    return m_drive->prop("Media").toString();
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h
+new file mode 100644
+index 0000000..5b80995
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldisc.h
+@@ -0,0 +1,69 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010 - 2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2OPTICALDISC_H
++#define UDISKS2OPTICALDISC_H
++
++#include <solid/ifaces/opticaldisc.h>
++
++#include "../shared/udevqtdevice.h"
++
++#include "udisksstoragevolume.h"
++#include "udisksdevice.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class OpticalDisc: public StorageVolume, virtual public Solid::Ifaces::OpticalDisc
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::OpticalDisc)
++
++public:
++    OpticalDisc(Device *dev);
++    virtual ~OpticalDisc();
++
++    virtual qulonglong capacity() const;
++    virtual bool isRewritable() const;
++    virtual bool isBlank() const;
++    virtual bool isAppendable() const;
++    virtual Solid::OpticalDisc::DiscType discType() const;
++    virtual Solid::OpticalDisc::ContentTypes availableContent() const;
++
++private Q_SLOTS:
++    void slotDrivePropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++
++private:
++    QString media() const;
++    mutable bool m_needsReprobe;
++    mutable Solid::OpticalDisc::ContentTypes m_cachedContent;
++    Device * m_drive;
++    UdevQt::Device m_udevDevice;
++};
++
++}
++}
++}
++#endif // UDISKS2OPTICALDISC_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.cpp b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.cpp
+new file mode 100644
+index 0000000..0eb4685
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.cpp
+@@ -0,0 +1,188 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <string.h>
++#include <errno.h>
++#include <unistd.h>
++#include <stdlib.h>
++
++#include <QtCore/QFile>
++#include <QtCore/QDebug>
++
++#include "udisksopticaldrive.h"
++#include "udisks2.h"
++#include "udisksdevice.h"
++
++using namespace Solid::Backends::UDisks2;
++
++OpticalDrive::OpticalDrive(Device *device)
++    : StorageDrive(device), m_ejectInProgress(false), m_readSpeed(0), m_writeSpeed(0), m_speedsInit(false)
++{
++    m_device->registerAction("eject", this,
++                             SLOT(slotEjectRequested()),
++                             SLOT(slotEjectDone(int, const QString&)));
++
++    connect(m_device, SIGNAL(changed()), this, SLOT(slotChanged()));
++}
++
++OpticalDrive::~OpticalDrive()
++{
++}
++
++bool OpticalDrive::eject()
++{
++    if (m_ejectInProgress)
++        return false;
++    m_ejectInProgress = true;
++    m_device->broadcastActionRequested("eject");
++
++    QDBusConnection c = QDBusConnection::systemBus();
++
++    QString path = m_device->udi();
++
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_DRIVE, "Eject");
++    msg << QVariantMap();
++    return c.callWithCallback(msg, this, SLOT(slotDBusReply(const QDBusMessage &)), SLOT(slotDBusError(const QDBusError &)));
++}
++
++void OpticalDrive::slotDBusReply(const QDBusMessage &/*reply*/)
++{
++    m_ejectInProgress = false;
++    m_device->broadcastActionDone("eject");
++}
++
++void OpticalDrive::slotDBusError(const QDBusError &error)
++{
++    m_ejectInProgress = false;
++    m_device->broadcastActionDone("eject", m_device->errorToSolidError(error.name()),
++                                  m_device->errorToString(error.name()) + ": " +error.message());
++}
++
++void OpticalDrive::slotEjectRequested()
++{
++    m_ejectInProgress = true;
++    Q_EMIT ejectRequested(m_device->udi());
++}
++
++void OpticalDrive::slotEjectDone(int error, const QString &errorString)
++{
++    m_ejectInProgress = false;
++    Q_EMIT ejectDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++void OpticalDrive::initReadWriteSpeeds() const
++{
++#if 0
++    int read_speed, write_speed;
++    char *write_speeds = 0;
++    QByteArray device_file = QFile::encodeName(m_device->property("Device").toString());
++
++    //qDebug("Doing open (\"%s\", O_RDONLY | O_NONBLOCK)", device_file.constData());
++    int fd = open(device_file, O_RDONLY | O_NONBLOCK);
++    if (fd < 0) {
++        qWarning("Cannot open %s: %s", device_file.constData(), strerror (errno));
++        return;
++    }
++
++    if (get_read_write_speed(fd, &read_speed, &write_speed, &write_speeds) >= 0) {
++        m_readSpeed = read_speed;
++        m_writeSpeed = write_speed;
++
++        QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts);
++        Q_FOREACH (const QString & speed, list)
++            m_writeSpeeds.append(speed.toInt());
++
++        free(write_speeds);
++
++        m_speedsInit = true;
++    }
++
++    close(fd);
++#endif
++}
++
++QList<int> OpticalDrive::writeSpeeds() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    //qDebug() << "solid write speeds:" << m_writeSpeeds;
++    return m_writeSpeeds;
++}
++
++int OpticalDrive::writeSpeed() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    return m_writeSpeed;
++}
++
++int OpticalDrive::readSpeed() const
++{
++    if (!m_speedsInit)
++        initReadWriteSpeeds();
++    return m_readSpeed;
++}
++
++Solid::OpticalDrive::MediumTypes OpticalDrive::supportedMedia() const
++{
++    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
++    Solid::OpticalDrive::MediumTypes supported;
++
++    QMap<Solid::OpticalDrive::MediumType, QString> map;
++    map[Solid::OpticalDrive::Cdr] = "optical_cd_r";
++    map[Solid::OpticalDrive::Cdrw] = "optical_cd_rw";
++    map[Solid::OpticalDrive::Dvd] = "optical_dvd";
++    map[Solid::OpticalDrive::Dvdr] = "optical_dvd_r";
++    map[Solid::OpticalDrive::Dvdrw] ="optical_dvd_rw";
++    map[Solid::OpticalDrive::Dvdram] ="optical_dvd_ram";
++    map[Solid::OpticalDrive::Dvdplusr] ="optical_dvd_plus_r";
++    map[Solid::OpticalDrive::Dvdplusrw] ="optical_dvd_plus_rw";
++    map[Solid::OpticalDrive::Dvdplusdl] ="optical_dvd_plus_r_dl";
++    map[Solid::OpticalDrive::Dvdplusdlrw] ="optical_dvd_plus_rw_dl";
++    map[Solid::OpticalDrive::Bd] ="optical_bd";
++    map[Solid::OpticalDrive::Bdr] ="optical_bd_r";
++    map[Solid::OpticalDrive::Bdre] ="optical_bd_re";
++    map[Solid::OpticalDrive::HdDvd] ="optical_hddvd";
++    map[Solid::OpticalDrive::HdDvdr] ="optical_hddvd_r";
++    map[Solid::OpticalDrive::HdDvdrw] ="optical_hddvd_rw";
++    // TODO add these to Solid
++    //map[Solid::OpticalDrive::Mo] ="optical_mo";
++    //map[Solid::OpticalDrive::Mr] ="optical_mrw";
++    //map[Solid::OpticalDrive::Mrw] ="optical_mrw_w";
++
++    Q_FOREACH ( const Solid::OpticalDrive::MediumType & type, map.keys() )
++    {
++        if ( mediaTypes.contains( map[type] ) )
++        {
++            supported |= type;
++        }
++    }
++
++    return supported;
++}
++
++void OpticalDrive::slotChanged()
++{
++    m_speedsInit = false; // reset the read/write speeds, changes eg. with an inserted media
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.h b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.h
+new file mode 100644
+index 0000000..4c98ef5
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksopticaldrive.h
+@@ -0,0 +1,81 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2OPTICALDRIVE_H
++#define UDISKS2OPTICALDRIVE_H
++
++#include <solid/ifaces/opticaldrive.h>
++#include "udisksstoragedrive.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class OpticalDrive: public StorageDrive, virtual public Solid::Ifaces::OpticalDrive
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::OpticalDrive)
++
++public:
++    OpticalDrive(Device *device);
++    virtual ~OpticalDrive();
++
++Q_SIGNALS:
++    void ejectPressed(const QString &udi);
++    void ejectDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void ejectRequested(const QString &udi);
++
++public:
++    virtual bool eject();
++    virtual QList<int> writeSpeeds() const;
++    virtual int writeSpeed() const;
++    virtual int readSpeed() const;
++    virtual Solid::OpticalDrive::MediumTypes supportedMedia() const;
++
++private Q_SLOTS:
++    void slotDBusReply(const QDBusMessage &reply);
++    void slotDBusError(const QDBusError &error);
++
++    void slotEjectRequested();
++    void slotEjectDone(int error, const QString &errorString);
++
++    void slotChanged();
++
++private:
++    void initReadWriteSpeeds() const;
++
++    bool m_ejectInProgress;
++
++    // read/write speeds
++    mutable int m_readSpeed;
++    mutable int m_writeSpeed;
++    mutable QList<int> m_writeSpeeds;
++    mutable bool m_speedsInit;
++};
++
++}
++}
++}
++
++#endif // UDISKS2OPTICALDRIVE_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp
+new file mode 100644
+index 0000000..146c227
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.cpp
+@@ -0,0 +1,359 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstorageaccess.h"
++#include "udisks2.h"
++
++#include <QtCore/QProcess>
++#include <QtDBus/QtDBus>
++#include <QtGui/QApplication>
++#include <QtGui/QWidget>
++
++using namespace Solid::Backends::UDisks2;
++
++StorageAccess::StorageAccess(Device *device)
++    : DeviceInterface(device), m_setupInProgress(false), m_teardownInProgress(false), m_passphraseRequested(false)
++{
++    updateCache();
++    QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_device->udi(), DBUS_INTERFACE_PROPS, "PropertiesChanged", this,
++                                         SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
++
++    // Delay connecting to DBus signals to avoid the related time penalty
++    // in hot paths such as predicate matching
++    QTimer::singleShot(0, this, SLOT(connectDBusSignals()));
++}
++
++StorageAccess::~StorageAccess()
++{
++}
++
++void StorageAccess::connectDBusSignals()
++{
++    m_device->registerAction("setup", this,
++                             SLOT(slotSetupRequested()),
++                             SLOT(slotSetupDone(int, const QString&)));
++
++    m_device->registerAction("teardown", this,
++                             SLOT(slotTeardownRequested()),
++                             SLOT(slotTeardownDone(int, const QString&)));
++}
++
++bool StorageAccess::isLuksDevice() const
++{
++    return m_device->isEncryptedContainer(); // encrypted device
++}
++
++bool StorageAccess::isAccessible() const
++{
++    if (isLuksDevice()) { // check if the cleartext slave is mounted
++        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
++            return false;
++        Device holderDevice(m_clearTextPath);
++        return holderDevice.isMounted();
++    }
++
++    return m_device->isMounted();
++}
++
++QString StorageAccess::filePath() const
++{
++    if (!isAccessible())
++        return QString();
++
++    QByteArrayList mntPoints;
++
++    if (isLuksDevice()) {  // encrypted (and unlocked) device
++        if (m_clearTextPath.isEmpty() || m_clearTextPath == "/")
++            return QString();
++        Device holderDevice(m_clearTextPath);
++        mntPoints = qdbus_cast<QByteArrayList>(holderDevice.prop("MountPoints"));
++        if (!mntPoints.isEmpty())
++            return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
++        else
++            return QString();
++    }
++
++    mntPoints = qdbus_cast<QByteArrayList>(m_device->prop("MountPoints"));
++
++    if (!mntPoints.isEmpty())
++        return QFile::decodeName(mntPoints.first()); // FIXME Solid doesn't support multiple mount points
++    else
++        return QString();
++}
++
++bool StorageAccess::isIgnored() const
++{
++    return m_device->prop("HintIgnore").toBool(); // FIXME tune
++}
++
++bool StorageAccess::setup()
++{
++    if ( m_teardownInProgress || m_setupInProgress )
++        return false;
++    m_setupInProgress = true;
++    m_device->broadcastActionRequested("setup");
++
++    if (m_device->isEncryptedContainer())
++        return requestPassphrase();
++    else
++        return mount();
++}
++
++bool StorageAccess::teardown()
++{
++    if ( m_teardownInProgress || m_setupInProgress )
++        return false;
++    m_teardownInProgress = true;
++    m_device->broadcastActionRequested("teardown");
++
++    return unmount();
++}
++
++void StorageAccess::slotPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
++{
++    Q_UNUSED(ifaceName);
++
++    if (changedProps.keys().contains("MountPoints") || invalidatedProps.contains("MountPoints")) {
++        Q_EMIT accessibilityChanged(isAccessible(), isLuksDevice() ? m_clearTextPath : m_device->udi());
++    }
++}
++
++void StorageAccess::updateCache()
++{
++    m_isAccessible = isAccessible();
++}
++
++void StorageAccess::checkAccessibility()
++{
++    const bool old_isAccessible = m_isAccessible;
++    updateCache();
++
++    if (old_isAccessible != m_isAccessible) {
++        Q_EMIT accessibilityChanged(m_isAccessible, isLuksDevice() ? m_clearTextPath : m_device->udi());
++    }
++}
++
++void StorageAccess::slotDBusReply( const QDBusMessage & reply )
++{
++    if (m_setupInProgress)
++    {
++        if (isLuksDevice() && !isAccessible()) { // unlocked device, now mount it
++            if (reply.type() == QDBusMessage::ReplyMessage)  // we've got a response from Unlock
++                m_clearTextPath = reply.arguments().value(0).value<QDBusObjectPath>().path();
++            mount();
++        }
++        else // Don't broadcast setupDone unless the setup is really done. (Fix kde#271156)
++        {
++            m_setupInProgress = false;
++            m_device->broadcastActionDone("setup");
++
++            checkAccessibility();
++        }
++    }
++    else if (m_teardownInProgress)  // FIXME
++    {
++        if (isLuksDevice() && !m_clearTextPath.isEmpty() && m_clearTextPath != "/") // unlocked device, lock it
++        {
++            callCryptoTeardown();
++        }
++        else if (!m_clearTextPath.isEmpty() && m_clearTextPath != "/") {
++            callCryptoTeardown(true); // Lock crypted parent
++        }
++        else
++        {
++            if (m_device->prop("Ejectable").toBool() && !m_device->isOpticalDisc()) // optical drives have their Eject method
++            {
++                // try to "eject" (aka safely remove) from the (parent) drive, e.g. SD card from a reader
++                QString drivePath = m_device->prop("Drive").value<QDBusObjectPath>().path();
++                if (!drivePath.isEmpty() || drivePath != "/")
++                {
++                    QDBusConnection c = QDBusConnection::systemBus();
++                    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, drivePath, UD2_DBUS_INTERFACE_DRIVE, "Eject");
++                    msg << QVariantMap();   // options, unused now
++                    c.call(msg, QDBus::NoBlock);
++                }
++            }
++
++            m_teardownInProgress = false;
++            m_device->broadcastActionDone("teardown");
++
++            checkAccessibility();
++        }
++    }
++}
++
++void StorageAccess::slotDBusError( const QDBusError & error )
++{
++    if (m_setupInProgress)
++    {
++        m_setupInProgress = false;
++        m_device->broadcastActionDone("setup", m_device->errorToSolidError(error.name()),
++                                      m_device->errorToString(error.name()) + ": " +error.message());
++
++        checkAccessibility();
++    }
++    else if (m_teardownInProgress)
++    {
++        m_teardownInProgress = false;
++        m_clearTextPath.clear();
++        m_device->broadcastActionDone("teardown", m_device->errorToSolidError(error.name()),
++                                      m_device->errorToString(error.name()) + ": " + error.message());
++        checkAccessibility();
++    }
++}
++
++void StorageAccess::slotSetupRequested()
++{
++    m_setupInProgress = true;
++    Q_EMIT setupRequested(m_device->udi());
++}
++
++void StorageAccess::slotSetupDone(int error, const QString &errorString)
++{
++    m_setupInProgress = false;
++    Q_EMIT setupDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++void StorageAccess::slotTeardownRequested()
++{
++    m_teardownInProgress = true;
++    Q_EMIT teardownRequested(m_device->udi());
++}
++
++void StorageAccess::slotTeardownDone(int error, const QString &errorString)
++{
++    m_teardownInProgress = false;
++    m_clearTextPath.clear();
++    Q_EMIT teardownDone(static_cast<Solid::ErrorType>(error), errorString, m_device->udi());
++}
++
++bool StorageAccess::mount()
++{
++    QString path = m_device->udi();
++
++    if (isLuksDevice()) { // mount options for the cleartext volume
++        path = m_clearTextPath;
++    }
++
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Mount");
++
++    msg << QVariantMap();   // options, unused now
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)));
++}
++
++bool StorageAccess::unmount()
++{
++    QString path = m_device->udi();
++
++    if (isLuksDevice()) { // unmount options for the cleartext volume
++        path = m_clearTextPath;
++    }
++
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path, UD2_DBUS_INTERFACE_FILESYSTEM, "Unmount");
++
++    msg << QVariantMap();   // options, unused now
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)),
++                              s_unmountTimeout);
++}
++
++QString StorageAccess::generateReturnObjectPath()
++{
++    static int number = 1;
++
++    return "/org/kde/solid/UDisks2StorageAccess_"+QString::number(number++);
++}
++
++bool StorageAccess::requestPassphrase()
++{
++    QString udi = m_device->udi();
++    QString returnService = QDBusConnection::sessionBus().baseService();
++    m_lastReturnObject = generateReturnObjectPath();
++
++    QDBusConnection::sessionBus().registerObject(m_lastReturnObject, this, QDBusConnection::ExportScriptableSlots);
++
++    QWidget *activeWindow = QApplication::activeWindow();
++    uint wId = 0;
++    if (activeWindow!=0)
++        wId = (uint)activeWindow->winId();
++
++    QString appId = QCoreApplication::applicationName();
++
++    QDBusInterface soliduiserver("org.kde.kded5", "/modules/soliduiserver", "org.kde.SolidUiServer");
++    QDBusReply<void> reply = soliduiserver.call("showPassphraseDialog", udi, returnService,
++                                                m_lastReturnObject, wId, appId);
++    m_passphraseRequested = reply.isValid();
++    if (!m_passphraseRequested)
++        qWarning() << "Failed to call the SolidUiServer, D-Bus said:" << reply.error();
++
++    return m_passphraseRequested;
++}
++
++void StorageAccess::passphraseReply(const QString & passphrase)
++{
++    if (m_passphraseRequested)
++    {
++        QDBusConnection::sessionBus().unregisterObject(m_lastReturnObject);
++        m_passphraseRequested = false;
++        if (!passphrase.isEmpty())
++            callCryptoSetup(passphrase);
++        else
++        {
++            m_setupInProgress = false;
++            m_device->broadcastActionDone("setup");
++        }
++    }
++}
++
++void StorageAccess::callCryptoSetup(const QString & passphrase)
++{
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_device->udi(), UD2_DBUS_INTERFACE_ENCRYPTED, "Unlock");
++
++    msg << passphrase;
++    msg << QVariantMap();   // options, unused now
++
++    c.callWithCallback(msg, this,
++                       SLOT(slotDBusReply(const QDBusMessage &)),
++                       SLOT(slotDBusError(const QDBusError &)));
++}
++
++bool StorageAccess::callCryptoTeardown(bool actOnParent)
++{
++    QDBusConnection c = QDBusConnection::systemBus();
++    QDBusMessage msg = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE,
++                                                      actOnParent ? (m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path()) : m_device->udi(),
++                                                      UD2_DBUS_INTERFACE_ENCRYPTED, "Lock");
++    msg << QVariantMap();   // options, unused now
++
++    m_clearTextPath.clear();
++
++    return c.callWithCallback(msg, this,
++                              SLOT(slotDBusReply(const QDBusMessage &)),
++                              SLOT(slotDBusError(const QDBusError &)));
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.h b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.h
+new file mode 100644
+index 0000000..36f2102
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksstorageaccess.h
+@@ -0,0 +1,104 @@
++/*
++    Copyright 2009 Pino Toscano <pino@kde.org>
++    Copyright 2009-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEACCESS_H
++#define UDISKS2STORAGEACCESS_H
++
++#include <solid/ifaces/storageaccess.h>
++#include "udisksdeviceinterface.h"
++
++#include <QtDBus/QDBusMessage>
++#include <QtDBus/QDBusError>
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++class StorageAccess : public DeviceInterface, virtual public Solid::Ifaces::StorageAccess
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageAccess)
++
++public:
++    StorageAccess(Device *device);
++    virtual ~StorageAccess();
++
++    virtual bool isAccessible() const;
++    virtual QString filePath() const;
++    virtual bool isIgnored() const;
++    virtual bool setup();
++    virtual bool teardown();
++
++Q_SIGNALS:
++    void accessibilityChanged(bool accessible, const QString &udi);
++    void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void teardownDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
++    void setupRequested(const QString &udi);
++    void teardownRequested(const QString &udi);
++
++public Q_SLOTS:
++    Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString & passphrase);
++
++private Q_SLOTS:
++    void slotPropertiesChanged(const QString & ifaceName, const QVariantMap & changedProps, const QStringList & invalidatedProps);
++    void slotDBusReply(const QDBusMessage & reply);
++    void slotDBusError(const QDBusError & error);
++
++    void connectDBusSignals();
++
++    void slotSetupRequested();
++    void slotSetupDone(int error, const QString &errorString);
++    void slotTeardownRequested();
++    void slotTeardownDone(int error, const QString &errorString);
++
++private:
++    /// @return true if this device is luks and unlocked
++    bool isLuksDevice() const;
++
++    void updateCache();
++    void checkAccessibility();
++
++    bool mount();
++    bool unmount();
++
++    bool requestPassphrase();
++    void callCryptoSetup( const QString & passphrase );
++    bool callCryptoTeardown( bool actOnParent=false );
++
++    QString generateReturnObjectPath();
++
++private:
++    bool m_isAccessible;
++    bool m_setupInProgress;
++    bool m_teardownInProgress;
++    bool m_passphraseRequested;
++    QString m_lastReturnObject;
++    QString m_clearTextPath;  // path to the unlocked cleartext device
++
++    static const int s_unmountTimeout = 0x7fffffff;
++};
++}
++}
++}
++
++#endif // UDISKS2STORAGEACCESS_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp
+new file mode 100644
+index 0000000..c79ac20
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.cpp
+@@ -0,0 +1,147 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstoragedrive.h"
++
++#include "../shared/udevqtclient.h"
++
++#include <QtCore/QDebug>
++#include <QtCore/QFile>
++
++using namespace Solid::Backends::UDisks2;
++
++StorageDrive::StorageDrive(Device *dev)
++    : Block(dev)
++{
++    UdevQt::Client client(this);
++    m_udevDevice = client.deviceByDeviceFile(device());
++    m_udevDevice.deviceProperties();
++}
++
++StorageDrive::~StorageDrive()
++{
++}
++
++qulonglong StorageDrive::size() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++bool StorageDrive::isHotpluggable() const
++{
++    const Solid::StorageDrive::Bus _bus = bus();
++    return _bus == Solid::StorageDrive::Usb || _bus == Solid::StorageDrive::Ieee1394;
++}
++
++bool StorageDrive::isRemovable() const
++{
++    return m_device->prop("MediaRemovable").toBool() || m_device->prop("Removable").toBool();
++}
++
++Solid::StorageDrive::DriveType StorageDrive::driveType() const
++{
++    const QStringList mediaTypes = m_device->prop("MediaCompatibility").toStringList();
++
++    if ( m_device->isOpticalDrive() ) // optical disks
++    {
++        return Solid::StorageDrive::CdromDrive;
++    }
++    else if ( mediaTypes.contains( "floppy" ) )
++    {
++        return Solid::StorageDrive::Floppy;
++    }
++#if 0 // TODO add to Solid
++    else if ( mediaTypes.contains( "floppy_jaz" ) )
++    {
++        return Solid::StorageDrive::Jaz;
++    }
++    else if ( mediaTypes.contains( "floppy_zip" ) )
++    {
++        return Solid::StorageDrive::Zip;
++    }
++    else if ( mediaTypes.contains( "flash" ) )
++    {
++        return Solid::StorageDrive::Flash;
++    }
++#endif
++    else if ( mediaTypes.contains( "flash_cf" ) )
++    {
++        return Solid::StorageDrive::CompactFlash;
++    }
++    else if ( mediaTypes.contains( "flash_ms" ) )
++    {
++        return Solid::StorageDrive::MemoryStick;
++    }
++    else if ( mediaTypes.contains( "flash_sm" ) )
++    {
++        return Solid::StorageDrive::SmartMedia;
++    }
++    else if ( mediaTypes.contains( "flash_sd" ) || mediaTypes.contains( "flash_sdhc" )
++              || mediaTypes.contains( "flash_mmc" ) || mediaTypes.contains("flash_sdxc") )
++    {
++        return Solid::StorageDrive::SdMmc;
++    }
++    // FIXME: udisks2 doesn't know about xD cards
++    else
++    {
++        return Solid::StorageDrive::HardDisk;
++    }
++}
++
++Solid::StorageDrive::Bus StorageDrive::bus() const
++{
++    const QString bus = m_device->prop("ConnectionBus").toString();
++    const QString udevBus = m_udevDevice.deviceProperty("ID_BUS").toString();
++
++    //qDebug() << "bus:" << bus << "udev bus:" << udevBus;
++
++    if (udevBus == "ata")
++    {
++        if (m_udevDevice.deviceProperty("ID_ATA_SATA").toInt() == 1) // serial ATA
++            return Solid::StorageDrive::Sata;
++        else  // parallel (classical) ATA
++            return Solid::StorageDrive::Ide;
++    }
++    else if (bus == "usb")
++    {
++        return Solid::StorageDrive::Usb;
++    }
++    else if (bus == "ieee1394")
++    {
++        return Solid::StorageDrive::Ieee1394;
++    }
++    else if (udevBus == "scsi")
++    {
++        return Solid::StorageDrive::Scsi;
++    }
++#if 0  // TODO add these to Solid
++    else if ( bus == "sdio" )
++    {
++        return Solid::StorageDrive::SDIO;
++    }
++    else if ( bus == "virtual" )
++    {
++        return Solid::StorageDrive::Virtual;
++    }
++#endif
++    else
++        return Solid::StorageDrive::Platform;
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h
+new file mode 100644
+index 0000000..9c87a23
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragedrive.h
+@@ -0,0 +1,61 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEDRIVE_H
++#define UDISKS2STORAGEDRIVE_H
++
++#include <ifaces/storagedrive.h>
++
++#include "../shared/udevqtdevice.h"
++
++#include "udisksblock.h"
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class StorageDrive: public Block, virtual public Solid::Ifaces::StorageDrive
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageDrive)
++
++public:
++    StorageDrive(Device *dev);
++    virtual ~StorageDrive();
++
++    virtual qulonglong size() const;
++    virtual bool isHotpluggable() const;
++    virtual bool isRemovable() const;
++    virtual Solid::StorageDrive::DriveType driveType() const;
++    virtual Solid::StorageDrive::Bus bus() const;
++
++private:
++    UdevQt::Device m_udevDevice;
++};
++
++}
++}
++}
++
++#endif // UDISK2SSTORAGEDRIVE_H
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.cpp b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.cpp
+new file mode 100644
+index 0000000..a7d8fad
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.cpp
+@@ -0,0 +1,105 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++    Copyright 2010-2012 Lukáš Tinkl <ltinkl@redhat.com>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "udisksstoragevolume.h"
++#include "udisks2.h"
++
++using namespace Solid::Backends::UDisks2;
++
++StorageVolume::StorageVolume(Device *device)
++    : Block(device)
++{
++}
++
++StorageVolume::~StorageVolume()
++{
++}
++
++QString StorageVolume::encryptedContainerUdi() const
++{
++    const QString path = m_device->prop("CryptoBackingDevice").value<QDBusObjectPath>().path();
++    if ( path.isEmpty() || path == "/")
++        return QString();
++    else
++        return path;
++}
++
++qulonglong StorageVolume::size() const
++{
++    return m_device->prop("Size").toULongLong();
++}
++
++QString StorageVolume::uuid() const
++{
++    return m_device->prop("IdUUID").toString();
++}
++
++QString StorageVolume::label() const
++{
++    QString label = m_device->prop("HintName").toString();
++    if (label.isEmpty())
++        label = m_device->prop("IdLabel").toString();
++    if (label.isEmpty())
++        label = m_device->prop("Name").toString();
++    return label;
++}
++
++QString StorageVolume::fsType() const
++{
++    return m_device->prop("IdType").toString();
++}
++
++Solid::StorageVolume::UsageType StorageVolume::usage() const
++{
++    const QString usage = m_device->prop("IdUsage").toString();
++
++    if (m_device->hasInterface(UD2_DBUS_INTERFACE_FILESYSTEM))
++    {
++        return Solid::StorageVolume::FileSystem;
++    }
++    else if (m_device->isPartitionTable())
++    {
++        return Solid::StorageVolume::PartitionTable;
++    }
++    else if (usage == "raid")
++    {
++        return Solid::StorageVolume::Raid;
++    }
++    else if (m_device->isEncryptedContainer())
++    {
++        return Solid::StorageVolume::Encrypted;
++    }
++    else if (usage == "unused" || usage.isEmpty())
++    {
++        return Solid::StorageVolume::Unused;
++    }
++    else
++    {
++        return Solid::StorageVolume::Other;
++    }
++}
++
++bool StorageVolume::isIgnored() const
++{
++    const Solid::StorageVolume::UsageType usg = usage();
++    return m_device->prop("HintIgnore").toBool() || m_device->isSwap() ||
++            ((usg == Solid::StorageVolume::Unused || usg == Solid::StorageVolume::Other || usg == Solid::StorageVolume::PartitionTable) && !m_device->isOpticalDisc());
++}
+diff --git a/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.h b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.h
+new file mode 100644
+index 0000000..2ca04d2
+--- /dev/null
++++ b/tier1/solid/src/solid/backends/udisks2/udisksstoragevolume.h
+@@ -0,0 +1,57 @@
++/*
++    Copyright 2010 Michael Zanetti <mzanetti@kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU Lesser General Public
++    License as published by the Free Software Foundation; either
++    version 2.1 of the License, or (at your option) version 3, or any
++    later version accepted by the membership of KDE e.V. (or its
++    successor approved by the membership of KDE e.V.), which shall
++    act as a proxy defined in Section 6 of version 3 of the license.
++
++    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
++    Lesser General Public License for more details.
++
++    You should have received a copy of the GNU Lesser General Public
++    License along with this library. If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#ifndef UDISKS2STORAGEVOLUME_H
++#define UDISKS2STORAGEVOLUME_H
++
++#include <ifaces/storagevolume.h>
++#include "udisksblock.h"
++
++
++namespace Solid
++{
++namespace Backends
++{
++namespace UDisks2
++{
++
++class StorageVolume: public Block, virtual public Solid::Ifaces::StorageVolume
++{
++    Q_OBJECT
++    Q_INTERFACES(Solid::Ifaces::StorageVolume)
++
++public:
++    StorageVolume(Device *device);
++    virtual ~StorageVolume();
++
++    virtual QString encryptedContainerUdi() const;
++    virtual qulonglong size() const;
++    virtual QString uuid() const;
++    virtual QString label() const;
++    virtual QString fsType() const;
++    virtual Solid::StorageVolume::UsageType usage() const;
++    virtual bool isIgnored() const;
++};
++
++}
++}
++}
++
++#endif // UDISKS2STORAGEVOLUME_H

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_post.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_post.patch
new file mode 100644
index 0000000..68ad5f4
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_post.patch
@@ -0,0 +1,113 @@
+diff -ruN kdelibs-4.8.90.orig/solid/solid/CMakeLists.txt kdelibs-4.8.90/solid/solid/CMakeLists.txt
+--- kdelibs-4.8.90.orig/solid/solid/CMakeLists.txt	2012-06-19 22:42:38.267962759 +0200
++++ kdelibs-4.8.90/solid/solid/CMakeLists.txt	2012-06-19 22:44:23.050968201 +0200
+@@ -40,7 +40,6 @@
+ 
+ file(MAKE_DIRECTORY
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
+-   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
+    ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
+ )
+@@ -226,33 +225,6 @@
+    endif( UDEV_FOUND )
+ 
+ 
+-   message(STATUS "Building Solid HAL backend." )
+-   set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-   backends/hal/halacadapter.cpp
+-   backends/hal/halaudiointerface.cpp
+-   backends/hal/halbattery.cpp
+-   backends/hal/halblock.cpp
+-   backends/hal/halbutton.cpp
+-   backends/hal/halcamera.cpp
+-   backends/hal/halcdrom.cpp
+-   backends/hal/haldeviceinterface.cpp
+-   backends/hal/haldvbinterface.cpp
+-   backends/hal/halfstabhandling.cpp
+-   backends/hal/halgenericinterface.cpp
+-   backends/hal/haldevice.cpp
+-   backends/hal/halmanager.cpp
+-   backends/hal/halnetworkinterface.cpp
+-   backends/hal/halserialinterface.cpp
+-   backends/hal/halopticaldisc.cpp
+-   backends/hal/halportablemediaplayer.cpp
+-   backends/hal/halprocessor.cpp
+-   backends/hal/halstorageaccess.cpp
+-   backends/hal/halstorage.cpp
+-   backends/hal/halvideo.cpp
+-   backends/hal/halvolume.cpp
+-   backends/hal/halsmartcardreader.cpp
+-   )
+-
+    message(STATUS "Building Solid UPower backend." )
+    set(solid_LIB_SRCS ${solid_LIB_SRCS}
+    backends/upower/upowermanager.cpp
+@@ -265,18 +237,19 @@
+ 
+    # FIXME: this should work on more Unix systems
+    if (CMAKE_SYSTEM_NAME MATCHES Linux)
+-      message(STATUS "Building Solid UDisks backend." )
++      message(STATUS "Building Solid UDisks2 backend." )
+       set(solid_LIB_SRCS ${solid_LIB_SRCS}
+-      backends/udisks/udisksmanager.cpp
+-      backends/udisks/udisksdevice.cpp
+-      backends/udisks/udisksblock.cpp
+-      backends/udisks/udisksstoragevolume.cpp
+-      backends/udisks/udisksdeviceinterface.cpp
+-      backends/udisks/udisksopticaldisc.cpp
+-      backends/udisks/udisksopticaldrive.cpp
+-      backends/udisks/udisksstoragedrive.cpp
+-      backends/udisks/udisksstorageaccess.cpp
+-      backends/udisks/udisksgenericinterface.cpp
++      backends/udisks2/udisksmanager.cpp
++      backends/udisks2/udisksdevice.cpp
++      backends/udisks2/udisksblock.cpp
++      backends/udisks2/udisksstoragevolume.cpp
++      backends/udisks2/udisksdeviceinterface.cpp
++      backends/udisks2/udisksopticaldisc.cpp
++      backends/udisks2/udisksopticaldrive.cpp
++      backends/udisks2/udisksstoragedrive.cpp
++      backends/udisks2/udisksstorageaccess.cpp
++      backends/udisks2/udisksgenericinterface.cpp
++      backends/udisks2/dbus/manager.cpp
+       )
+    endif (CMAKE_SYSTEM_NAME MATCHES Linux)
+ 
+diff -ruN kdelibs-4.8.90.orig/solid/solid/managerbase.cpp kdelibs-4.8.90/solid/solid/managerbase.cpp
+--- kdelibs-4.8.90.orig/solid/solid/managerbase.cpp	2012-06-19 22:42:38.267962759 +0200
++++ kdelibs-4.8.90/solid/solid/managerbase.cpp	2012-06-19 22:44:23.050968201 +0200
+@@ -30,8 +30,7 @@
+ #if defined (Q_OS_MAC)
+ #include "backends/iokit/iokitmanager.h"
+ #elif defined (Q_OS_UNIX)
+-#include "backends/hal/halmanager.h"
+-#include "backends/udisks/udisksmanager.h"
++#include "backends/udisks2/udisksmanager.h"
+ #include "backends/upower/upowermanager.h"
+ 
+ #if defined (HUPNP_FOUND)
+@@ -71,22 +70,13 @@
+ #        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+             m_backends << new Solid::Backends::Wmi::WmiManager(0);
+ 
+-#        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
+-            m_backends << new Solid::Backends::Hal::HalManager(0);
+-
+ #        elif defined(Q_OS_LINUX)
+-            bool solidHalLegacyEnabled
+-                = QString::fromLocal8Bit(qgetenv("SOLID_HAL_LEGACY")).toInt()==1;
+-            if (solidHalLegacyEnabled) {
+-                m_backends << new Solid::Backends::Hal::HalManager(0);
+-            } else {
+ #               if defined(UDEV_FOUND)
+                     m_backends << new Solid::Backends::UDev::UDevManager(0);
+ #               endif
+-                m_backends << new Solid::Backends::UDisks::UDisksManager(0)
++                m_backends << new Solid::Backends::UDisks2::Manager(0)
+                            << new Solid::Backends::UPower::UPowerManager(0)
+                            << new Solid::Backends::Fstab::FstabManager(0);
+-            }
+ #        endif
+ 
+ #        if defined (HUPNP_FOUND)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_prep.patch b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_prep.patch
new file mode 100644
index 0000000..2962837
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.90-udisks2_prep.patch
@@ -0,0 +1,65 @@
+diff -up kdelibs-4.8.2/solid/solid/CMakeLists.txt.udisks2_prep kdelibs-4.8.2/solid/solid/CMakeLists.txt
+--- kdelibs-4.8.2/solid/solid/CMakeLists.txt.udisks2_prep	2011-07-27 13:34:38.000000000 -0500
++++ kdelibs-4.8.2/solid/solid/CMakeLists.txt	2012-04-17 16:02:06.153985974 -0500
+@@ -1,6 +1,7 @@
+ set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
+ add_subdirectory( ifaces )
+ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
++include_directories( ${QT_QTDBUS_INCLUDE_DIR} )
+ 
+ if(WIN32)
+    include_directories( ${KDEWIN_INCLUDES} )
+diff -up kdelibs-4.8.2/solid/solid/managerbase.cpp.udisks2_prep kdelibs-4.8.2/solid/solid/managerbase.cpp
+--- kdelibs-4.8.2/solid/solid/managerbase.cpp.udisks2_prep	2011-07-27 13:34:39.000000000 -0500
++++ kdelibs-4.8.2/solid/solid/managerbase.cpp	2012-04-17 16:02:06.154985961 -0500
+@@ -21,7 +21,7 @@
+ #include "managerbase_p.h"
+ 
+ #include <stdlib.h>
+-#if !defined (Q_WS_WIN) && !defined (Q_OS_MAC)
++#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC)
+ #include <config-solid.h>
+ #endif
+ 
+@@ -44,7 +44,7 @@
+ 
+ #include "backends/fstab/fstabmanager.h"
+ 
+-#elif defined (Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
++#elif defined (Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+ #include "backends/wmi/wmimanager.h"
+ #endif
+ 
+@@ -68,7 +68,7 @@ void Solid::ManagerBasePrivate::loadBack
+ #        if defined(Q_OS_MAC)
+             m_backends << new Solid::Backends::IOKit::IOKitManager(0);
+ 
+-#        elif defined(Q_WS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
++#        elif defined(Q_OS_WIN) && defined(HAVE_WBEM) && !defined(_WIN32_WCE)
+             m_backends << new Solid::Backends::Wmi::WmiManager(0);
+ 
+ #        elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX)
+diff -up kdelibs-4.8.2/solid/tests/CMakeLists.txt.udisks2_prep kdelibs-4.8.2/solid/tests/CMakeLists.txt
+--- kdelibs-4.8.2/solid/tests/CMakeLists.txt.udisks2_prep	2011-10-20 15:52:04.000000000 -0500
++++ kdelibs-4.8.2/solid/tests/CMakeLists.txt	2012-04-17 16:02:44.584505527 -0500
+@@ -16,20 +16,6 @@ target_link_libraries(fakehardwaretest s
+ add_definitions(-DTEST_DATA="\\"${CMAKE_CURRENT_SOURCE_DIR}/../solid/backends/fakehw/fakecomputer.xml\\"")
+ 
+ 
+-########### halbasictest ###############
+-
+-if(NOT WIN32 AND NOT APPLE)
+-set(halbasictest_SRCS halbasictest.cpp )
+-
+-kde4_add_executable(halbasictest ${halbasictest_SRCS})
+-
+-if(WIN32)
+-  set_target_properties(halbasictest PROPERTIES COMPILE_FLAGS -DSOLID_EXPORT=)
+-endif(WIN32)
+-
+-target_link_libraries(halbasictest solid_static ${KDEWIN_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} )
+-endif(NOT WIN32 AND NOT APPLE)
+-
+ ########### solidhwtest ###############
+ 
+ set(solidhwtest_SRCS 

diff --git a/kde-base/kdelibs/kdelibs-4.8.90.ebuild b/kde-base/kdelibs/kdelibs-4.8.90.ebuild
index 8e5fbd3..bad7083 100644
--- a/kde-base/kdelibs/kdelibs-4.8.90.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.90.ebuild
@@ -99,7 +99,7 @@ RDEPEND="${COMMONDEPEND}
 		x11-apps/iceauth
 		x11-apps/rgb
 		>=x11-misc/xdg-utils-1.0.2-r3
-		udisks? ( sys-fs/udisks:0 )
+		udisks? ( sys-fs/udisks:2 )
 		upower? ( sys-power/upower )
 	)
 "
@@ -129,6 +129,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.90-udisks2"_{prep,backend,post}.patch
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 8e6a93a..7b1a1b1 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -99,7 +99,7 @@ RDEPEND="${COMMONDEPEND}
 		x11-apps/iceauth
 		x11-apps/rgb
 		>=x11-misc/xdg-utils-1.0.2-r3
-		udisks? ( sys-fs/udisks:0 )
+		udisks? ( sys-fs/udisks:2 )
 		upower? ( sys-power/upower )
 	)
 "
@@ -129,6 +129,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.90-udisks2"_{prep,backend,post}.patch
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-05-31 21:38 Marc Schiffbauer
  0 siblings, 0 replies; 38+ messages in thread
From: Marc Schiffbauer @ 2012-05-31 21:38 UTC (permalink / raw
  To: gentoo-commits

commit:     14d7d9cb2219f64c7a715d8da0bbe48a32c9dad8
Author:     Marc Schiffbauer <mschiff <AT> gentoo <DOT> org>
AuthorDate: Thu May 31 21:37:17 2012 +0000
Commit:     Marc Schiffbauer <marc <AT> schiffbauer <DOT> net>
CommitDate: Thu May 31 21:37:17 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=14d7d9cb

[kde-base/kdelibs] added kdelibs-4.8.4-bytecode.patch

	Updated patch is required for kdelibs >4.8.3

---
 .../kdelibs/files/kdelibs-4.8.4-bytecode.patch     |   78 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    2 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    2 +-
 3 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.4-bytecode.patch b/kde-base/kdelibs/files/kdelibs-4.8.4-bytecode.patch
new file mode 100644
index 0000000..6920121
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.4-bytecode.patch
@@ -0,0 +1,78 @@
+--- cmake/modules/PythonMacros.cmake.orig	2012-05-31 23:28:04.035788719 +0200
++++ cmake/modules/PythonMacros.cmake	2012-05-31 23:30:13.997840354 +0200
+@@ -24,39 +24,41 @@
+   INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
+ 
+   # Byte compile and install the .pyc file.        
+-  GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
+-  GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
+-  GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
+-  GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
+-
+-  if(WIN32)
+-    string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
+-  endif(WIN32)
+-
+-  SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
+-  SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
+-
+-  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
+-
+-  SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
+-
+-  GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
+-  IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
+-    ADD_CUSTOM_COMMAND(
+-      TARGET compile_python_files
+-      COMMAND ${CMAKE_COMMAND} -E echo ${_message}
+-      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
+-      DEPENDS ${_absfilename}
+-    )
+-  ELSE(_abs_bin_py STREQUAL ${_absfilename})
+-    ADD_CUSTOM_COMMAND(
+-      TARGET compile_python_files
+-      COMMAND ${CMAKE_COMMAND} -E echo ${_message} 
+-      COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
+-      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
+-      DEPENDS ${_absfilename}
+-    )
+-  ENDIF(_abs_bin_py STREQUAL ${_absfilename})
++  IF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
++    GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
++    GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
++    GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
++    GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
++
++    if(WIN32)
++      string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
++    endif(WIN32)
++
++    SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
++    SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
++
++    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
++
++    SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
++
++    GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
++    IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
++      ADD_CUSTOM_COMMAND(
++        TARGET compile_python_files
++        COMMAND ${CMAKE_COMMAND} -E echo ${_message}
++        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
++        DEPENDS ${_absfilename}
++      )
++    ELSE(_abs_bin_py STREQUAL ${_absfilename})
++      ADD_CUSTOM_COMMAND(
++        TARGET compile_python_files
++        COMMAND ${CMAKE_COMMAND} -E echo ${_message} 
++        COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
++        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
++        DEPENDS ${_absfilename}
++      )
++    ENDIF(_abs_bin_py STREQUAL ${_absfilename})
+ 
+-  INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
++    INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
++  ENDIF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
+ ENDMACRO(PYTHON_INSTALL)

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index a5e2f24..b4d5a7b 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -126,7 +126,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.7.96-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
-	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 )

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index e744a19..0aeaeee 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -126,7 +126,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.7.96-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
-	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.4-bytecode.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 )



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-04-12 19:38 Michael Palimaka
  0 siblings, 0 replies; 38+ messages in thread
From: Michael Palimaka @ 2012-04-12 19:38 UTC (permalink / raw
  To: gentoo-commits

commit:     de19116cce5dafbf2ca6582d303e1a2f8d3204cd
Author:     Michael Palimaka <kensington <AT> astralcloak <DOT> net>
AuthorDate: Thu Apr 12 19:30:58 2012 +0000
Commit:     Michael Palimaka <kensington <AT> astralcloak <DOT> net>
CommitDate: Thu Apr 12 19:30:58 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=de19116c

[kde-base/kdelibs] Sync warning text between live ebuilds and remove unused patches that are updated / fixed upstream.

(Portage version: 2.1.10.56/git/Linux x86_64, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.5.90-mimetypes.patch   |   51 --------------------
 .../kdelibs/files/kdelibs-4.7.4-xinelib12x.patch   |   32 ------------
 kde-base/kdelibs/kdelibs-9999.ebuild               |    2 +-
 3 files changed, 1 insertions(+), 84 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.5.90-mimetypes.patch b/kde-base/kdelibs/files/kdelibs-4.5.90-mimetypes.patch
deleted file mode 100644
index 5088123..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.5.90-mimetypes.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-diff -ur kdelibs-4.5.90.orig/mimetypes/kde.xml kdelibs-4.5.90/mimetypes/kde.xml
---- kdelibs-4.5.90.orig/mimetypes/kde.xml	2010-12-22 10:56:01.000000000 +0100
-+++ kdelibs-4.5.90/mimetypes/kde.xml	2010-12-23 11:31:53.000000000 +0100
-@@ -178,34 +178,6 @@
-     <glob pattern="*.abc"/>
-   </mime-type>
- 
--  <!-- all/ fake mime types -->
--  <mime-type type="all/all">
--    <comment>all files and folders</comment>
--  </mime-type>
--  <mime-type type="all/allfiles">
--    <comment>all files</comment>
--  </mime-type>
--
--  <!-- uri/ fake mime types -->
--  <mime-type type="uri/mms">
--    <comment>mms: URIs</comment>
--  </mime-type>
--  <mime-type type="uri/mmst">
--    <comment>mmst: URIs</comment>
--  </mime-type>
--  <mime-type type="uri/mmsu">
--    <comment>mmsu: URIs</comment>
--  </mime-type>
--  <mime-type type="uri/pnm">
--    <comment>pnm: URIs</comment>
--  </mime-type>
--  <mime-type type="uri/rtspt">
--    <comment>rtspt: URIs</comment>
--  </mime-type>
--  <mime-type type="uri/rtspu">
--    <comment>rtspu: URIs</comment>
--  </mime-type>
--
-   <mime-type type="application/vnd.kde.fontspackage">
-     <sub-class-of type="application/zip"/>
-     <comment>fonts package</comment>
-@@ -346,12 +318,6 @@
-     <glob pattern="*.icq"/>
-   </mime-type>
- 
--  <mime-type type="interface/x-winamp-skin">
--    <sub-class-of type="application/zip"/>
--    <comment>compressed Winamp skin</comment>
--    <glob pattern="*.wsz"/>
--  </mime-type>
--
-   <mime-type type="video/x-ms-wmp"> <!-- fdo #19671, rejected because "not a file type, only a plugin type" -->
-     <comment>Microsoft Media Format</comment>
-     <sub-class-of type="video/x-ms-wmv"/>
\ No newline at end of file

diff --git a/kde-base/kdelibs/files/kdelibs-4.7.4-xinelib12x.patch b/kde-base/kdelibs/files/kdelibs-4.7.4-xinelib12x.patch
deleted file mode 100644
index bdcd39a..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.7.4-xinelib12x.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From de5da56d10a47ff8fdf55c0818e9e776dcfa01f9 Mon Sep 17 00:00:00 2001
-From: Johannes Huber <johu@gentoo.org>
-Date: Thu, 5 Jan 2012 10:06:05 +0100
-Subject: [PATCH] Fix FindXine.cmake module with >=xine-lib-1.2.
-
----
- cmake/modules/FindXine.cmake |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/cmake/modules/FindXine.cmake b/cmake/modules/FindXine.cmake
-index 37c58c6..d71969a 100644
---- a/cmake/modules/FindXine.cmake
-+++ b/cmake/modules/FindXine.cmake
-@@ -36,13 +36,13 @@ find_library(XINE_LIBRARY NAMES xine
-   ${PC_LIBXINE_LIBRARY_DIRS}
-  )
- 
--find_program(XINECONFIG_EXECUTABLE NAMES xine-config 
-+find_program(XINECONFIG_EXECUTABLE NAMES pkg-config
-    HINTS
-    ${PC_LIBXINE_PREFIX}/bin
- )
- 
- if (XINE_INCLUDE_DIR AND XINE_LIBRARY AND XINECONFIG_EXECUTABLE)
--   exec_program(${XINECONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE XINE_VERSION ERROR_QUIET)
-+   exec_program(${XINECONFIG_EXECUTABLE} ARGS --modversion libxine RETURN_VALUE _return_VALUE OUTPUT_VARIABLE XINE_VERSION ERROR_QUIET)
-    if("${XINE_VERSION}" VERSION_GREATER "1.1.0")   #if (... VERSION_GREATER) is new since cmake 2.6.2
-       set(XINE_VERSION_OK TRUE)
-       string(REGEX REPLACE "[0-9]\\.[0-9]\\." "" XINE_BUGFIX_VERSION ${XINE_VERSION})
--- 
-1.7.8.2
-

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 595e4d9..a958f20 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -191,7 +191,7 @@ src_configure() {
 		if has_version net-dns/avahi; then
 			mycmakeargs=(-DWITH_Avahi=ON -DWITH_DNSSD=OFF)
 		else
-			die "USE=\"zeroconf\" but net-dns/avahi wasn't found."
+			die "USE=\"zeroconf\" enabled but net-dns/avahi wasn't found."
 		fi
 	else
 		mycmakeargs=(-DWITH_Avahi=OFF -DWITH_DNSSD=OFF)



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-04-05  5:55 Johannes Huber
  0 siblings, 0 replies; 38+ messages in thread
From: Johannes Huber @ 2012-04-05  5:55 UTC (permalink / raw
  To: gentoo-commits

commit:     d62378f09a9978e6d878c4a5fe2f1ce36a01f09b
Author:     Johannes Huber <johu <AT> gentoo <DOT> org>
AuthorDate: Thu Apr  5 05:53:40 2012 +0000
Commit:     Johannes Huber <johu <AT> gentoo <DOT> org>
CommitDate: Thu Apr  5 05:53:40 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=d62378f0

[kde-base/kdelibs] Remove obsolete, newer version with rpath removal patch in tree.

(Portage version: 2.2.0_alpha98/git/Linux i686, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.1-nepomuk-kmail.patch        |   52 ----
 .../files/kdelibs-4.8.1-sonnet-highlighter.patch   |   40 ---
 kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild           |  314 --------------------
 3 files changed, 0 insertions(+), 406 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.1-nepomuk-kmail.patch b/kde-base/kdelibs/files/kdelibs-4.8.1-nepomuk-kmail.patch
deleted file mode 100644
index 145472d..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.1-nepomuk-kmail.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff --git a/nepomuk/core/resourcedata.cpp b/nepomuk/core/resourcedata.cpp
-index abe55ea..e65e66e 100644
---- a/nepomuk/core/resourcedata.cpp
-+++ b/nepomuk/core/resourcedata.cpp
-@@ -175,7 +175,7 @@ void Nepomuk::ResourceData::resetAll( bool isDelete )
-     if( !m_uri.isEmpty() ) {
-         m_rm->m_initializedData.remove( m_uri );
-         if( m_rm->m_watcher && m_addedToWatcher ) {
--            m_rm->m_watcher->removeResource(Resource::fromResourceUri(m_uri));
-+            QMetaObject::invokeMethod(m_rm->m_watcher, "removeResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Resource::fromResourceUri(m_uri)));
-             m_addedToWatcher = false;
-         }
-     }
-@@ -394,15 +394,16 @@ bool Nepomuk::ResourceData::load()
- 
-         if(!m_rm->m_watcher) {
-             m_rm->m_watcher = new ResourceWatcher(m_rm->m_manager);
-+            m_rm->m_watcher->moveToThread(m_rm->m_manager->thread());
-             QObject::connect( m_rm->m_watcher, SIGNAL(propertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)),
-                               m_rm->m_manager, SLOT(slotPropertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) );
-             QObject::connect( m_rm->m_watcher, SIGNAL(propertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)),
-                               m_rm->m_manager, SLOT(slotPropertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) );
-             m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) );
--            m_rm->m_watcher->start();
-+            QMetaObject::invokeMethod(m_rm->m_watcher, "start", Qt::AutoConnection);
-         }
-         else {
--            m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) );
-+            QMetaObject::invokeMethod(m_rm->m_watcher, "addResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Nepomuk::Resource::fromResourceUri(m_uri)) );
-         }
-         m_addedToWatcher = true;
- 
-diff --git a/nepomuk/core/resourcewatcher.h b/nepomuk/core/resourcewatcher.h
-index 06b9622..92b12f5 100644
---- a/nepomuk/core/resourcewatcher.h
-+++ b/nepomuk/core/resourcewatcher.h
-@@ -93,6 +93,7 @@ namespace Nepomuk {
-          */
-         virtual ~ResourceWatcher();
- 
-+    public Q_SLOTS:
-         /**
-          * \brief Add a type to be watched.
-          *
-@@ -204,7 +205,6 @@ namespace Nepomuk {
-          */
-         QList<Types::Property> properties() const;
- 
--    public Q_SLOTS:
-         /**
-          * \brief Start the signalling of changes.
-          *

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.1-sonnet-highlighter.patch b/kde-base/kdelibs/files/kdelibs-4.8.1-sonnet-highlighter.patch
deleted file mode 100644
index 92a1f45..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.8.1-sonnet-highlighter.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-commit 20f73c2150bcd2220fe3604c2ec251b4026a3891
-Author: Montel Laurent <montel@kde.org>
-Date:   Mon Mar 19 12:30:49 2012 +0100
-
-    Fix Bug 295615 - kmail crashes trying to edit subject/message body with
-    
-    some dictionary languages set in identity properties
-    
-    Patch from Matt Whitlock from https://bugs.gentoo.org/show_bug.cgi?id=407709
-    it's right timer can be uninitialize when we change language => it will
-    crash
-    
-    FIXED-IN: 4.8.2
-    BUG: 295615
-
-diff --git a/kdeui/sonnet/highlighter.cpp b/kdeui/sonnet/highlighter.cpp
-index 05f7ed1..b10310a 100644
---- a/kdeui/sonnet/highlighter.cpp
-+++ b/kdeui/sonnet/highlighter.cpp
-@@ -108,6 +108,10 @@ Highlighter::Highlighter(QTextEdit *textEdit,
- 
-     d->dict = new Sonnet::Speller();
-     d->spellCheckerFound = d->dict->isValid();
-+    d->rehighlightRequest = new QTimer(this);
-+    connect( d->rehighlightRequest, SIGNAL(timeout()),
-+             this, SLOT(slotRehighlight()));
-+
-     if(!d->spellCheckerFound)
-         return;
- 
-@@ -121,9 +125,6 @@ Highlighter::Highlighter(QTextEdit *textEdit,
-     for ( QStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
-         d->dict->addToSession( *it );
-     }
--    d->rehighlightRequest = new QTimer(this);
--    connect( d->rehighlightRequest, SIGNAL(timeout()),
--             this, SLOT(slotRehighlight()));
-     d->completeRehighlightRequired = true;
-     d->rehighlightRequest->setInterval(0);
-     d->rehighlightRequest->setSingleShot(true);

diff --git a/kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild b/kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild
deleted file mode 100644
index c54d8c0..0000000
--- a/kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild
+++ /dev/null
@@ -1,314 +0,0 @@
-# Copyright 1999-2012 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/kde-base/kdelibs/kdelibs-4.8.1-r2.ebuild,v 1.2 2012/03/23 21:41:16 johu Exp $
-
-EAPI=4
-
-CPPUNIT_REQUIRED="optional"
-DECLARATIVE_REQUIRED="always"
-OPENGL_REQUIRED="optional"
-KDE_SCM="git"
-inherit kde4-base fdo-mime toolchain-funcs
-
-# The "master" branch is out of date, so use KDE/4.8 per upstream's
-# recommendation.
-EGIT_BRANCH="KDE/4.8"
-
-DESCRIPTION="KDE libraries needed by all KDE programs."
-HOMEPAGE="http://www.kde.org/"
-
-KEYWORDS="~amd64 ~x86 ~x86-fbsd ~amd64-linux ~x86-linux"
-LICENSE="LGPL-2.1"
-IUSE="3dnow acl alsa altivec +bzip2 debug doc fam +handbook jpeg2k kerberos lzma
-mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
-+upower upnp zeroconf"
-
-REQUIRED_USE="
-	udisks? ( udev )
-	upower? ( udev )
-"
-
-# needs the kate regression testsuite from svn
-RESTRICT="test"
-
-COMMONDEPEND="
-	app-crypt/qca:2
-	>=app-misc/strigi-0.7.7
-	app-text/docbook-xml-dtd:4.2
-	app-text/docbook-xsl-stylesheets
-	>=dev-libs/libattica-0.1.90
-	>=dev-libs/libdbusmenu-qt-0.3.2
-	dev-libs/libpcre[unicode]
-	dev-libs/libxml2
-	dev-libs/libxslt
-	media-libs/fontconfig
-	media-libs/freetype:2
-	media-libs/giflib
-	>=media-libs/libpng-1.4
-	>=media-libs/phonon-4.4.3
-	sys-libs/zlib
-	virtual/jpeg
-	>=x11-misc/shared-mime-info-0.60
-	acl? ( virtual/acl )
-	alsa? ( media-libs/alsa-lib )
-	!aqua? (
-		x11-libs/libICE
-		x11-libs/libSM
-		x11-libs/libX11
-		x11-libs/libXau
-		x11-libs/libXcursor
-		x11-libs/libXdmcp
-		x11-libs/libXext
-		x11-libs/libXfixes
-		x11-libs/libXft
-		x11-libs/libXpm
-		x11-libs/libXrender
-		x11-libs/libXScrnSaver
-		x11-libs/libXtst
-		!kernel_SunOS? ( sys-libs/libutempter )
-	)
-	bzip2? ( app-arch/bzip2 )
-	fam? ( virtual/fam )
-	jpeg2k? ( media-libs/jasper )
-	kerberos? ( virtual/krb5 )
-	openexr? (
-		media-libs/openexr
-		media-libs/ilmbase
-	)
-	policykit? ( >=sys-auth/polkit-qt-0.103.0 )
-	semantic-desktop? (
-		>=dev-libs/shared-desktop-ontologies-0.8.1
-		>=dev-libs/soprano-2.7.3[dbus,raptor,redland]
-	)
-	spell? ( app-text/enchant )
-	ssl? ( dev-libs/openssl )
-	udev? ( sys-fs/udev )
-	upnp? ( media-libs/herqq )
-	zeroconf? ( net-dns/avahi[mdnsresponder-compat] )
-"
-DEPEND="${COMMONDEPEND}
-	doc? ( app-doc/doxygen )
-	nls? ( virtual/libintl )
-"
-RDEPEND="${COMMONDEPEND}
-	!x11-libs/qt-phonon
-	>=app-crypt/gnupg-2.0.11
-	app-misc/ca-certificates
-	$(add_kdebase_dep kde-env)
-	!aqua? (
-		x11-apps/iceauth
-		x11-apps/rgb
-		>=x11-misc/xdg-utils-1.0.2-r3
-		udisks? ( sys-fs/udisks:0 )
-		upower? ( sys-power/upower )
-	)
-"
-PDEPEND="
-	$(add_kdebase_dep katepart)
-	|| ( ( $(add_kdebase_dep kfmclient) ) x11-misc/xdg-utils )
-	handbook? ( $(add_kdebase_dep khelpcenter) )
-	policykit? (
-		>=kde-misc/polkit-kde-kcmodules-0.98_pre20101127
-		>=sys-auth/polkit-kde-agent-0.99
-	)
-	semantic-desktop? ( $(add_kdebase_dep nepomuk) )
-"
-
-# Force the upgrade of plasma-workspace to a version that explicitly depends on kactivities
-add_blocker plasma-workspace 4.7.1
-
-# file collision, bug 394991
-add_blocker kcontrol 4.4.50
-
-PATCHES=(
-	"${FILESDIR}/dist/01_gentoo_set_xdg_menu_prefix-1.patch"
-	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
-	"${FILESDIR}/${PN}-4.7.96-mimetypes.patch"
-	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
-	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
-	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
-	"${FILESDIR}/${PN}-4.8.1-nepomuk-kmail.patch"
-	"${FILESDIR}/${PN}-4.8.1-sonnet-highlighter.patch"
-	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
-)
-
-pkg_pretend() {
-	if [[ ${MERGE_TYPE} != binary ]]; then
-		[[ $(gcc-major-version) -lt 4 ]] || \
-				( [[ $(gcc-major-version) -eq 4 && $(gcc-minor-version) -le 3 ]] ) \
-			&& die "Sorry, but gcc-4.3 and earlier won't work for KDE SC 4.6 (see bug #354837)."
-	fi
-}
-
-src_prepare() {
-	kde4-base_src_prepare
-	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
-
-	# Rename applications.menu (needs 01_gentoo_set_xdg_menu_prefix-1.patch to work)
-	sed -e 's|FILES[[:space:]]applications.menu|FILES applications.menu RENAME kde-4-applications.menu|g' \
-		-i kded/CMakeLists.txt || die "Sed on CMakeLists.txt for applications.menu failed."
-
-	if use aqua; then
-		sed -i -e \
-			"s:BUNDLE_INSTALL_DIR \"/Applications:BUNDLE_INSTALL_DIR \"${EPREFIX}/${APP_BUNDLE_DIR}:g" \
-			cmake/modules/FindKDE4Internal.cmake || die "failed to sed FindKDE4Internal.cmake"
-
-		#if [[ ${CHOST} == *-darwin8 ]]; then
-		sed -i -e \
-			"s:set(_add_executable_param MACOSX_BUNDLE):remove(_add_executable_param MACOSX_BUNDLE):g" \
-			cmake/modules/KDE4Macros.cmake || die "failed to sed KDE4Macros.cmake"
-		#fi
-
-		# solid/solid/backends/iokit doesn't properly link, so disable it.
-		sed -e "s|\(APPLE\)|(FALSE)|g" -i solid/solid/CMakeLists.txt \
-			|| die "disabling solid/solid/backends/iokit failed"
-		sed -e "s|m_backend = .*Backends::IOKit.*;|m_backend = 0;|g" -i solid/solid/managerbase.cpp \
-			|| die "disabling solid/solid/backends/iokit failed"
-
-		# There's no fdatasync on OSX and the check fails to detect that.
-		sed -e "/HAVE_FDATASYNC/ d" -i config.h.cmake \
-			|| die "disabling fdatasync failed"
-
-		# Fix nameser include to nameser8_compat
-		sed -e "s|nameser8_compat.h|nameser_compat.h|g" -i kio/misc/kpac/discovery.cpp \
-			|| die "fixing nameser include failed"
-		append-flags -DHAVE_ARPA_NAMESER8_COMPAT_H=1
-
-		# Try to fix kkeyserver_mac
-		epatch "${FILESDIR}"/${PN}-4.3.80-kdeui_util_kkeyserver_mac.patch
-	fi
-
-	if [[ ${CHOST} == *-solaris* ]] ; then
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-ksyscoca.patch"
-		# getgrouplist not in solaris libc
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-getgrouplist.patch"
-		# solaris has no d_type element in dir_ent
-		epatch "${FILESDIR}/kdelibs-4.3.2-solaris-fileunix.patch"
-	fi
-}
-
-src_configure() {
-	if use zeroconf; then
-		if has_version net-dns/avahi; then
-			mycmakeargs=(-DWITH_Avahi=ON -DWITH_DNSSD=OFF)
-		else
-			die "USE=\"zeroconf\" enabled but net-dns/avahi wasn't found."
-		fi
-	else
-		mycmakeargs=(-DWITH_Avahi=OFF -DWITH_DNSSD=OFF)
-	fi
-	mycmakeargs+=(
-		-DWITH_HSPELL=OFF
-		-DWITH_ASPELL=OFF
-		-DKDE_DEFAULT_HOME=.kde4
-		-DKAUTH_BACKEND=POLKITQT-1
-		-DBUILD_libkactivities=OFF
-		$(cmake-utils_use_build handbook doc)
-		$(cmake-utils_use_has 3dnow X86_3DNOW)
-		$(cmake-utils_use_has altivec PPC_ALTIVEC)
-		$(cmake-utils_use_has mmx X86_MMX)
-		$(cmake-utils_use_has sse X86_SSE)
-		$(cmake-utils_use_has sse2 X86_SSE2)
-		$(cmake-utils_use_with acl)
-		$(cmake-utils_use_with alsa)
-		$(cmake-utils_use_with bzip2 BZip2)
-		$(cmake-utils_use_with fam)
-		$(cmake-utils_use_with jpeg2k Jasper)
-		$(cmake-utils_use_with kerberos GSSAPI)
-		$(cmake-utils_use_with lzma LibLZMA)
-		$(cmake-utils_use_with nls Libintl)
-		$(cmake-utils_use_with openexr OpenEXR)
-		$(cmake-utils_use_with opengl OpenGL)
-		$(cmake-utils_use_with policykit PolkitQt-1)
-		$(cmake-utils_use_with semantic-desktop Soprano)
-		$(cmake-utils_use_with semantic-desktop SharedDesktopOntologies)
-		$(cmake-utils_use_with spell ENCHANT)
-		$(cmake-utils_use_with ssl OpenSSL)
-		$(cmake-utils_use_with udev UDev)
-		$(cmake-utils_use_with upnp HUpnp)
-	)
-	kde4-base_src_configure
-}
-
-src_compile() {
-	kde4-base_src_compile
-
-	# The building of apidox is not managed anymore by the build system
-	if use doc; then
-		einfo "Building API documentation"
-		cd "${S}"/doc/api/
-		./doxygen.sh "${S}" || die "APIDOX generation failed"
-	fi
-}
-
-src_install() {
-	kde4-base_src_install
-
-	# use system certificates
-	rm -f "${ED}"/usr/share/apps/kssl/ca-bundle.crt || die
-	dosym /etc/ssl/certs/ca-certificates.crt /usr/share/apps/kssl/ca-bundle.crt
-
-	if use doc; then
-		einfo "Installing API documentation. This could take a bit of time."
-		cd "${S}"/doc/api/
-		docinto /HTML/en/kdelibs-apidox
-		dohtml -r ${P}-apidocs/*
-	fi
-
-	if use aqua; then
-		einfo "fixing ${PN} plugins"
-
-		local _PV=${PV:0:3}.0
-		local _dir=${EPREFIX}/usr/$(get_libdir)/kde4/plugins/script
-
-		install_name_tool -id \
-			"${_dir}/libkrossqtsplugin.${_PV}.dylib" \
-			"${D}/${_dir}/libkrossqtsplugin.${_PV}.dylib" \
-			|| die "failed fixing libkrossqtsplugin.${_PV}.dylib"
-
-		einfo "fixing ${PN} cmake detection files"
-		#sed -i -e \
-		#	"s:if (HAVE_XKB):if (HAVE_XKB AND NOT APPLE):g" \
-		echo -e "set(XKB_FOUND FALSE)\nset(HAVE_XKB FALSE)" > \
-			"${ED}"/usr/share/apps/cmake/modules/FindXKB.cmake \
-			|| die "failed fixing FindXKB.cmake"
-	fi
-
-	einfo Installing environment file.
-	# Since 44qt4 is sourced earlier QT_PLUGIN_PATH is defined.
-	echo "COLON_SEPARATED=QT_PLUGIN_PATH" > "${T}/77kde"
-	echo "QT_PLUGIN_PATH=${EPREFIX}/usr/$(get_libdir)/kde4/plugins" >> "${T}/77kde"
-	doenvd "${T}/77kde"
-}
-
-pkg_postinst() {
-	fdo-mime_mime_database_update
-
-	if use zeroconf; then
-		echo
-		elog "To make zeroconf support available in KDE make sure that the 'mdnsd' daemon"
-		elog "is running."
-		echo
-		einfo "If you also want to use zeroconf for hostname resolution, emerge sys-auth/nss-mdns"
-		einfo "and enable multicast dns lookups by editing the 'hosts:' line in /etc/nsswitch.conf"
-		einfo "to include 'mdns', e.g.:"
-		einfo "	hosts: files mdns dns"
-		echo
-	fi
-
-	elog "Your homedir is set to \${HOME}/.kde4"
-	echo
-
-	kde4-base_pkg_postinst
-}
-
-pkg_prerm() {
-	# Remove ksycoca4 global database
-	rm -f "${EROOT}${PREFIX}"/share/kde4/services/ksycoca4
-}
-
-pkg_postrm() {
-	fdo-mime_mime_database_update
-
-	kde4-base_pkg_postrm
-}



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-04-03 21:01 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-04-03 21:01 UTC (permalink / raw
  To: gentoo-commits

commit:     d3052285dfc9cfac1348e717c54b795b8dfaff9d
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Tue Apr  3 21:00:56 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue Apr  3 21:00:56 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=d3052285

[kde-base/kdelib] Fix usage of calculator key, bug 406049

(Portage version: 2.1.10.54/git/Linux x86_64, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.2-calculator_key.patch       |   11 +++++++++++
 kde-base/kdelibs/kdelibs-4.8.2.ebuild              |    1 +
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 4 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.2-calculator_key.patch b/kde-base/kdelibs/files/kdelibs-4.8.2-calculator_key.patch
new file mode 100644
index 0000000..4c481c6
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.2-calculator_key.patch
@@ -0,0 +1,11 @@
+--- kdeui/util/kkeyserver_x11.cpp	2012-02-25 18:53:49.480771132 -0200
++++ kdeui/util/kkeyserver_x11.cpp	2012-02-25 18:20:38.912403430 -0200
+@@ -355,7 +355,7 @@
+     { Qt::Key_MediaRecord, XF86XK_AudioRecord },
+     { Qt::Key_LaunchMail, XF86XK_Mail },
+     { Qt::Key_Launch0,    XF86XK_MyComputer },
+-    { Qt::Key_Calculator,    XF86XK_Calculator },
++    { Qt::Key_Launch1,    XF86XK_Calculator },
+     { Qt::Key_Memo,    XF86XK_Memo },
+     { Qt::Key_ToDoList,    XF86XK_ToDoList },
+     { Qt::Key_Calendar,    XF86XK_Calendar },

diff --git a/kde-base/kdelibs/kdelibs-4.8.2.ebuild b/kde-base/kdelibs/kdelibs-4.8.2.ebuild
index 9ed7e74..fa80b48 100644
--- a/kde-base/kdelibs/kdelibs-4.8.2.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.2.ebuild
@@ -128,6 +128,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
+	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index 0f2c38a..a958f20 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -128,6 +128,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
+	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index ab2cd65..595e4d9 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -128,6 +128,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
 	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
+	"${FILESDIR}/${PN}-4.8.2-calculator_key.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-03-24 16:47 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2012-03-24 16:47 UTC (permalink / raw
  To: gentoo-commits

commit:     7928de25d218d2639d107cf75e47ec7c08e4ab11
Author:     Andreas K. Huettel (dilfridge) <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 24 16:25:33 2012 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sat Mar 24 16:25:33 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=7928de25

[kde-base/kdelibs] Add patch to drop rpath from kde executables

(Portage version: 2.1.10.49/git/Linux x86_64, unsigned Manifest commit)

---
 .../files/kdelibs-4.8.1-nepomuk-kmail.patch        |   52 ++++++++++++++++++++
 kde-base/kdelibs/files/kdelibs-4.8.1-norpath.patch |   18 +++++++
 .../files/kdelibs-4.8.1-sonnet-highlighter.patch   |   40 +++++++++++++++
 ...-4.8.49.9999.ebuild => kdelibs-4.8.1-r3.ebuild} |    7 ++-
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 6 files changed, 117 insertions(+), 2 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.1-nepomuk-kmail.patch b/kde-base/kdelibs/files/kdelibs-4.8.1-nepomuk-kmail.patch
new file mode 100644
index 0000000..145472d
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.1-nepomuk-kmail.patch
@@ -0,0 +1,52 @@
+diff --git a/nepomuk/core/resourcedata.cpp b/nepomuk/core/resourcedata.cpp
+index abe55ea..e65e66e 100644
+--- a/nepomuk/core/resourcedata.cpp
++++ b/nepomuk/core/resourcedata.cpp
+@@ -175,7 +175,7 @@ void Nepomuk::ResourceData::resetAll( bool isDelete )
+     if( !m_uri.isEmpty() ) {
+         m_rm->m_initializedData.remove( m_uri );
+         if( m_rm->m_watcher && m_addedToWatcher ) {
+-            m_rm->m_watcher->removeResource(Resource::fromResourceUri(m_uri));
++            QMetaObject::invokeMethod(m_rm->m_watcher, "removeResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Resource::fromResourceUri(m_uri)));
+             m_addedToWatcher = false;
+         }
+     }
+@@ -394,15 +394,16 @@ bool Nepomuk::ResourceData::load()
+ 
+         if(!m_rm->m_watcher) {
+             m_rm->m_watcher = new ResourceWatcher(m_rm->m_manager);
++            m_rm->m_watcher->moveToThread(m_rm->m_manager->thread());
+             QObject::connect( m_rm->m_watcher, SIGNAL(propertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)),
+                               m_rm->m_manager, SLOT(slotPropertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) );
+             QObject::connect( m_rm->m_watcher, SIGNAL(propertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)),
+                               m_rm->m_manager, SLOT(slotPropertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) );
+             m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) );
+-            m_rm->m_watcher->start();
++            QMetaObject::invokeMethod(m_rm->m_watcher, "start", Qt::AutoConnection);
+         }
+         else {
+-            m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) );
++            QMetaObject::invokeMethod(m_rm->m_watcher, "addResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Nepomuk::Resource::fromResourceUri(m_uri)) );
+         }
+         m_addedToWatcher = true;
+ 
+diff --git a/nepomuk/core/resourcewatcher.h b/nepomuk/core/resourcewatcher.h
+index 06b9622..92b12f5 100644
+--- a/nepomuk/core/resourcewatcher.h
++++ b/nepomuk/core/resourcewatcher.h
+@@ -93,6 +93,7 @@ namespace Nepomuk {
+          */
+         virtual ~ResourceWatcher();
+ 
++    public Q_SLOTS:
+         /**
+          * \brief Add a type to be watched.
+          *
+@@ -204,7 +205,6 @@ namespace Nepomuk {
+          */
+         QList<Types::Property> properties() const;
+ 
+-    public Q_SLOTS:
+         /**
+          * \brief Start the signalling of changes.
+          *

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.1-norpath.patch b/kde-base/kdelibs/files/kdelibs-4.8.1-norpath.patch
new file mode 100644
index 0000000..83d5576
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.1-norpath.patch
@@ -0,0 +1,18 @@
+diff -ruN kdelibs-4.8.1.orig/cmake/modules/FindKDE4Internal.cmake kdelibs-4.8.1/cmake/modules/FindKDE4Internal.cmake
+--- kdelibs-4.8.1.orig/cmake/modules/FindKDE4Internal.cmake	2012-02-29 22:55:52.000000000 +0100
++++ kdelibs-4.8.1/cmake/modules/FindKDE4Internal.cmake	2012-03-24 17:18:59.452942648 +0100
+@@ -1045,7 +1045,13 @@
+ 
+       set(CMAKE_SKIP_BUILD_RPATH FALSE)
+       set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+-      set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
++
++      # the RPATH to be used when installing
++      SET(CMAKE_INSTALL_RPATH "")
++
++      # don't add the automatically determined parts of the RPATH
++      # which point to directories outside the build tree to the install RPATH
++      SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
+    endif (APPLE)
+ endif (UNIX)
+ 

diff --git a/kde-base/kdelibs/files/kdelibs-4.8.1-sonnet-highlighter.patch b/kde-base/kdelibs/files/kdelibs-4.8.1-sonnet-highlighter.patch
new file mode 100644
index 0000000..92a1f45
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.8.1-sonnet-highlighter.patch
@@ -0,0 +1,40 @@
+commit 20f73c2150bcd2220fe3604c2ec251b4026a3891
+Author: Montel Laurent <montel@kde.org>
+Date:   Mon Mar 19 12:30:49 2012 +0100
+
+    Fix Bug 295615 - kmail crashes trying to edit subject/message body with
+    
+    some dictionary languages set in identity properties
+    
+    Patch from Matt Whitlock from https://bugs.gentoo.org/show_bug.cgi?id=407709
+    it's right timer can be uninitialize when we change language => it will
+    crash
+    
+    FIXED-IN: 4.8.2
+    BUG: 295615
+
+diff --git a/kdeui/sonnet/highlighter.cpp b/kdeui/sonnet/highlighter.cpp
+index 05f7ed1..b10310a 100644
+--- a/kdeui/sonnet/highlighter.cpp
++++ b/kdeui/sonnet/highlighter.cpp
+@@ -108,6 +108,10 @@ Highlighter::Highlighter(QTextEdit *textEdit,
+ 
+     d->dict = new Sonnet::Speller();
+     d->spellCheckerFound = d->dict->isValid();
++    d->rehighlightRequest = new QTimer(this);
++    connect( d->rehighlightRequest, SIGNAL(timeout()),
++             this, SLOT(slotRehighlight()));
++
+     if(!d->spellCheckerFound)
+         return;
+ 
+@@ -121,9 +125,6 @@ Highlighter::Highlighter(QTextEdit *textEdit,
+     for ( QStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
+         d->dict->addToSession( *it );
+     }
+-    d->rehighlightRequest = new QTimer(this);
+-    connect( d->rehighlightRequest, SIGNAL(timeout()),
+-             this, SLOT(slotRehighlight()));
+     d->completeRehighlightRequired = true;
+     d->rehighlightRequest->setInterval(0);
+     d->rehighlightRequest->setSingleShot(true);

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild
similarity index 96%
copy from kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
copy to kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild
index 56163b0..e8d2e62 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.1-r3.ebuild
@@ -1,6 +1,6 @@
 # Copyright 1999-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kdelibs/kdelibs-4.8.1-r2.ebuild,v 1.2 2012/03/23 21:41:16 johu Exp $
 
 EAPI=4
 
@@ -17,7 +17,7 @@ EGIT_BRANCH="KDE/4.8"
 DESCRIPTION="KDE libraries needed by all KDE programs."
 HOMEPAGE="http://www.kde.org/"
 
-KEYWORDS=""
+KEYWORDS="~amd64 ~x86 ~x86-fbsd ~amd64-linux ~x86-linux"
 LICENSE="LGPL-2.1"
 IUSE="3dnow acl alsa altivec +bzip2 debug doc fam +handbook jpeg2k kerberos lzma
 mmx nls openexr +policykit semantic-desktop spell sse sse2 ssl +udev +udisks
@@ -127,6 +127,9 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.1-nepomuk-kmail.patch"
+	"${FILESDIR}/${PN}-4.8.1-sonnet-highlighter.patch"
+	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index 56163b0..01a327e 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -127,6 +127,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index cb3f98e..41de55e 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -127,6 +127,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.8.1-norpath.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2012-01-05 11:12 Johannes Huber
  0 siblings, 0 replies; 38+ messages in thread
From: Johannes Huber @ 2012-01-05 11:12 UTC (permalink / raw
  To: gentoo-commits

commit:     11dec3efc36313f2c88aba6d747b6ab4a8782435
Author:     Johannes Huber <johu <AT> gentoo <DOT> org>
AuthorDate: Thu Jan  5 11:11:11 2012 +0000
Commit:     Johannes Huber <johu <AT> gentoo <DOT> org>
CommitDate: Thu Jan  5 11:11:27 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=11dec3ef

[kde-base/kdelibs] Fix FindXine.cmake to use pkg-config instead of xine-config wrt #397595

(Portage version: 2.2.0_alpha84/git/Linux x86_64, unsigned Manifest commit)

---
 .../kdelibs/files/kdelibs-4.7.4-xinelib12x.patch   |   32 ++++++++++++++++++++
 ...libs-4.7.95.ebuild => kdelibs-4.7.95-r1.ebuild} |    1 +
 ...libs-4.7.97.ebuild => kdelibs-4.7.97-r1.ebuild} |    1 +
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 5 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.7.4-xinelib12x.patch b/kde-base/kdelibs/files/kdelibs-4.7.4-xinelib12x.patch
new file mode 100644
index 0000000..bdcd39a
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.7.4-xinelib12x.patch
@@ -0,0 +1,32 @@
+From de5da56d10a47ff8fdf55c0818e9e776dcfa01f9 Mon Sep 17 00:00:00 2001
+From: Johannes Huber <johu@gentoo.org>
+Date: Thu, 5 Jan 2012 10:06:05 +0100
+Subject: [PATCH] Fix FindXine.cmake module with >=xine-lib-1.2.
+
+---
+ cmake/modules/FindXine.cmake |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/modules/FindXine.cmake b/cmake/modules/FindXine.cmake
+index 37c58c6..d71969a 100644
+--- a/cmake/modules/FindXine.cmake
++++ b/cmake/modules/FindXine.cmake
+@@ -36,13 +36,13 @@ find_library(XINE_LIBRARY NAMES xine
+   ${PC_LIBXINE_LIBRARY_DIRS}
+  )
+ 
+-find_program(XINECONFIG_EXECUTABLE NAMES xine-config 
++find_program(XINECONFIG_EXECUTABLE NAMES pkg-config
+    HINTS
+    ${PC_LIBXINE_PREFIX}/bin
+ )
+ 
+ if (XINE_INCLUDE_DIR AND XINE_LIBRARY AND XINECONFIG_EXECUTABLE)
+-   exec_program(${XINECONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE XINE_VERSION ERROR_QUIET)
++   exec_program(${XINECONFIG_EXECUTABLE} ARGS --modversion libxine RETURN_VALUE _return_VALUE OUTPUT_VARIABLE XINE_VERSION ERROR_QUIET)
+    if("${XINE_VERSION}" VERSION_GREATER "1.1.0")   #if (... VERSION_GREATER) is new since cmake 2.6.2
+       set(XINE_VERSION_OK TRUE)
+       string(REGEX REPLACE "[0-9]\\.[0-9]\\." "" XINE_BUGFIX_VERSION ${XINE_VERSION})
+-- 
+1.7.8.2
+

diff --git a/kde-base/kdelibs/kdelibs-4.7.95.ebuild b/kde-base/kdelibs/kdelibs-4.7.95-r1.ebuild
similarity index 99%
rename from kde-base/kdelibs/kdelibs-4.7.95.ebuild
rename to kde-base/kdelibs/kdelibs-4.7.95-r1.ebuild
index 52a3998..34c63ee 100644
--- a/kde-base/kdelibs/kdelibs-4.7.95.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.7.95-r1.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.7.4-xinelib12x.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.7.97.ebuild b/kde-base/kdelibs/kdelibs-4.7.97-r1.ebuild
similarity index 99%
rename from kde-base/kdelibs/kdelibs-4.7.97.ebuild
rename to kde-base/kdelibs/kdelibs-4.7.97-r1.ebuild
index 0fd4b57..b839f64 100644
--- a/kde-base/kdelibs/kdelibs-4.7.97.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.7.97-r1.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.7.4-xinelib12x.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index 763a9dd..21408f4 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.7.4-xinelib12x.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 763a9dd..21408f4 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.7.4-xinelib12x.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-12-27  3:38 Marc Schiffbauer
  0 siblings, 0 replies; 38+ messages in thread
From: Marc Schiffbauer @ 2011-12-27  3:38 UTC (permalink / raw
  To: gentoo-commits

commit:     899627c5cdde43c63f064b94a20808008b6107a5
Author:     Marc Schiffbauer <mschiff <AT> gentoo <DOT> org>
AuthorDate: Tue Dec 27 03:37:01 2011 +0000
Commit:     Marc Schiffbauer <marc <AT> schiffbauer <DOT> net>
CommitDate: Tue Dec 27 03:37:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=899627c5

[kde-base/kdelibs] Add files/kdelibs-4.7.96-mimetypes.patch

  and switch to KDE/4.8 branch in 9999, too

---
 .../kdelibs/files/kdelibs-4.7.96-mimetypes.patch   |   38 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild        |    2 +-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    4 +-
 3 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.7.96-mimetypes.patch b/kde-base/kdelibs/files/kdelibs-4.7.96-mimetypes.patch
new file mode 100644
index 0000000..049cef8
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.7.96-mimetypes.patch
@@ -0,0 +1,38 @@
+diff -ur kdelibs-4.8.49.9999.orig/mimetypes/kde.xml kdelibs-4.8.49.9999/mimetypes/kde.xml
+--- kdelibs-4.8.49.9999.orig/mimetypes/kde.xml	2011-12-27 04:20:35.982831561 +0100
++++ kdelibs-4.8.49.9999/mimetypes/kde.xml	2011-12-27 04:30:15.747168085 +0100
+@@ -178,34 +178,6 @@
+     <glob pattern="*.abc"/>
+   </mime-type>
+ 
+-  <!-- all/ fake mime types -->
+-  <mime-type type="all/all">
+-    <comment>all files and folders</comment>
+-  </mime-type>
+-  <mime-type type="all/allfiles">
+-    <comment>all files</comment>
+-  </mime-type>
+-
+-  <!-- uri/ fake mime types -->
+-  <mime-type type="uri/mms">
+-    <comment>mms: URIs</comment>
+-  </mime-type>
+-  <mime-type type="uri/mmst">
+-    <comment>mmst: URIs</comment>
+-  </mime-type>
+-  <mime-type type="uri/mmsu">
+-    <comment>mmsu: URIs</comment>
+-  </mime-type>
+-  <mime-type type="uri/pnm">
+-    <comment>pnm: URIs</comment>
+-  </mime-type>
+-  <mime-type type="uri/rtspt">
+-    <comment>rtspt: URIs</comment>
+-  </mime-type>
+-  <mime-type type="uri/rtspu">
+-    <comment>rtspu: URIs</comment>
+-  </mime-type>
+-
+   <mime-type type="application/vnd.kde.fontspackage">
+     <sub-class-of type="application/zip"/>
+     <comment>fonts package</comment>

diff --git a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
index 4dd416c..763a9dd 100644
--- a/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.8.49.9999.ebuild
@@ -129,7 +129,7 @@ add_blocker kcontrol 4.4.50
 PATCHES=(
 	"${FILESDIR}/dist/01_gentoo_set_xdg_menu_prefix-1.patch"
 	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
-	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
+	"${FILESDIR}/${PN}-4.7.96-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index f400411..763a9dd 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -12,7 +12,7 @@ inherit kde4-base fdo-mime toolchain-funcs
 
 # The "master" branch is out of date, so use KDE/4.7 per upstream's
 # recommendation (KDE/4.8 will be branched off of KDE/4.7)
-EGIT_BRANCH="KDE/4.7"
+EGIT_BRANCH="KDE/4.8"
 
 DESCRIPTION="KDE libraries needed by all KDE programs."
 HOMEPAGE="http://www.kde.org/"
@@ -129,7 +129,7 @@ add_blocker kcontrol 4.4.50
 PATCHES=(
 	"${FILESDIR}/dist/01_gentoo_set_xdg_menu_prefix-1.patch"
 	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
-	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
+	"${FILESDIR}/${PN}-4.7.96-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-09-28 10:56 Marc Schiffbauer
  0 siblings, 0 replies; 38+ messages in thread
From: Marc Schiffbauer @ 2011-09-28 10:56 UTC (permalink / raw
  To: gentoo-commits

commit:     6adf728bca168413e7db5191ebe2f84602b8aef7
Author:     Marc Schiffbauer <mschiff <AT> gentoo <DOT> org>
AuthorDate: Wed Sep 28 10:55:46 2011 +0000
Commit:     Marc Schiffbauer <marc <AT> schiffbauer <DOT> net>
CommitDate: Wed Sep 28 10:55:46 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=6adf728b

[kde-base/kdelibs] removed files/kdelibs-4.7.1-libpng15.patch, fixed upstream

(Portage version: 2.2.0_alpha59/git/Linux x86_64, signed Manifest commit with key 0x35A64134)

---
 .../kdelibs/files/kdelibs-4.7.1-libpng15.patch     |   11 -----------
 kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild        |    1 -
 2 files changed, 0 insertions(+), 12 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.7.1-libpng15.patch b/kde-base/kdelibs/files/kdelibs-4.7.1-libpng15.patch
deleted file mode 100644
index 7fd52d9..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.7.1-libpng15.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- kdelibs-4.7.1/khtml/imload/decoders/pngloader.cpp
-+++ kdelibs-4.7.1/khtml/imload/decoders/pngloader.cpp
-@@ -198,7 +198,7 @@
-     {
-         if (interlaced)
-         {
--            Q_ASSERT(pngReadStruct->row_info.pixel_depth <= depth * 8);
-+            //Q_ASSERT(pngReadStruct->row_info.pixel_depth <= depth * 8);
-             requestScanline(rowNum, scanlineBuf);
-             png_progressive_combine_row(pngReadStruct, scanlineBuf, data);
-             notifyScanline(pass + 1, scanlineBuf);

diff --git a/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild
index b4b5de4..e6694c5 100644
--- a/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild
@@ -125,7 +125,6 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
-	"${FILESDIR}/${PN}-4.7.1-libpng15.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-09-24 15:36 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2011-09-24 15:36 UTC (permalink / raw
  To: gentoo-commits

commit:     ae1b325a14e51f8826158ca2296d771dab9c1f53
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Sat Sep 24 15:37:07 2011 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sat Sep 24 15:37:07 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=ae1b325a

Fix build with libpng-1.5, bug 383915

(Portage version: 2.1.10.19/git/Linux x86_64, signed Manifest commit with key B6C5F7DE)

---
 .../kdelibs/files/kdelibs-4.7.1-libpng15.patch     |   11 +++++++++++
 kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild        |    1 +
 2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.7.1-libpng15.patch b/kde-base/kdelibs/files/kdelibs-4.7.1-libpng15.patch
new file mode 100644
index 0000000..7fd52d9
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.7.1-libpng15.patch
@@ -0,0 +1,11 @@
+--- kdelibs-4.7.1/khtml/imload/decoders/pngloader.cpp
++++ kdelibs-4.7.1/khtml/imload/decoders/pngloader.cpp
+@@ -198,7 +198,7 @@
+     {
+         if (interlaced)
+         {
+-            Q_ASSERT(pngReadStruct->row_info.pixel_depth <= depth * 8);
++            //Q_ASSERT(pngReadStruct->row_info.pixel_depth <= depth * 8);
+             requestScanline(rowNum, scanlineBuf);
+             png_progressive_combine_row(pngReadStruct, scanlineBuf, data);
+             notifyScanline(pass + 1, scanlineBuf);

diff --git a/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild
index 691119f..ff4385b 100644
--- a/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.7.49.9999.ebuild
@@ -122,6 +122,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
+	"${FILESDIR}/${PN}-4.7.1-libpng15.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-06-21 20:38 Andreas Hüttel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas Hüttel @ 2011-06-21 20:38 UTC (permalink / raw
  To: gentoo-commits

commit:     d4a62e3e9f8f3c421ee4eef20daf05ce7526bebf
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Tue Jun 21 20:38:40 2011 +0000
Commit:     Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Tue Jun 21 20:38:40 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=d4a62e3e

[kde-base/kdelibs] Respect PYTHONDONTWRITEBYTECODE environmental variable in PYTHON_INSTALL macro, bug 372407

(Portage version: 2.1.10.3/git/Linux x86_64, signed Manifest commit with key B6C5F7DE)

---
 .../kdelibs/files/kdelibs-4.6.3-bytecode.patch     |   81 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.6.49.9999.ebuild        |    1 +
 kde-base/kdelibs/kdelibs-4.6.80-r1.ebuild          |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 4 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.3-bytecode.patch b/kde-base/kdelibs/files/kdelibs-4.6.3-bytecode.patch
new file mode 100644
index 0000000..736e2ae
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.6.3-bytecode.patch
@@ -0,0 +1,81 @@
+diff -ruN kdelibs-4.6.3.orig/cmake/modules/PythonMacros.cmake kdelibs-4.6.3/cmake/modules/PythonMacros.cmake
+--- kdelibs-4.6.3.orig/cmake/modules/PythonMacros.cmake	2011-04-01 15:55:50.000000000 +0200
++++ kdelibs-4.6.3/cmake/modules/PythonMacros.cmake	2011-06-21 22:30:18.957765437 +0200
+@@ -23,40 +23,42 @@
+   # Install the source file.
+   INSTALL(FILES ${SOURCE_FILE} DESTINATION ${DESINATION_DIR})
+ 
+-  # Byte compile and install the .pyc file.        
+-  GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
+-  GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
+-  GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
+-  GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
+-
+-  if(WIN32)
+-    string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
+-  endif(WIN32)
+-
+-  SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
+-  SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
+-
+-  FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
+-
+-  SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
+-
+-  GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
+-  IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
+-    ADD_CUSTOM_COMMAND(
+-      TARGET compile_python_files
+-      COMMAND ${CMAKE_COMMAND} -E echo ${message}
+-      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
+-      DEPENDS ${_absfilename}
+-    )
+-  ELSE(_abs_bin_py STREQUAL ${_absfilename})
+-    ADD_CUSTOM_COMMAND(
+-      TARGET compile_python_files
+-      COMMAND ${CMAKE_COMMAND} -E echo ${message} 
+-      COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
+-      COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
+-      DEPENDS ${_absfilename}
+-    )
+-  ENDIF(_abs_bin_py STREQUAL ${_absfilename})
++  # Byte compile and install the .pyc file.
++  IF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
++    GET_FILENAME_COMPONENT(_absfilename ${SOURCE_FILE} ABSOLUTE)
++    GET_FILENAME_COMPONENT(_filename ${SOURCE_FILE} NAME)
++    GET_FILENAME_COMPONENT(_filenamebase ${SOURCE_FILE} NAME_WE)
++    GET_FILENAME_COMPONENT(_basepath ${SOURCE_FILE} PATH)
++
++    if(WIN32)
++      string(REGEX REPLACE ".:/" "/" _basepath "${_basepath}")
++    endif(WIN32)
++
++    SET(_bin_py ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filename})
++    SET(_bin_pyc ${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_filenamebase}.pyc)
++
++    FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_basepath})
++
++    SET(_message "-DMESSAGE=Byte-compiling ${_bin_py}")
++
++    GET_FILENAME_COMPONENT(_abs_bin_py ${_bin_py} ABSOLUTE)
++    IF(_abs_bin_py STREQUAL ${_absfilename})    # Don't copy the file onto itself.
++      ADD_CUSTOM_COMMAND(
++        TARGET compile_python_files
++        COMMAND ${CMAKE_COMMAND} -E echo ${message}
++        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
++        DEPENDS ${_absfilename}
++      )
++    ELSE(_abs_bin_py STREQUAL ${_absfilename})
++      ADD_CUSTOM_COMMAND(
++        TARGET compile_python_files
++        COMMAND ${CMAKE_COMMAND} -E echo ${message}
++        COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py}
++        COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py}
++        DEPENDS ${_absfilename}
++      )
++    ENDIF(_abs_bin_py STREQUAL ${_absfilename})
+ 
+-  INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
++    INSTALL(FILES ${_bin_pyc} DESTINATION ${DESINATION_DIR})
++  ENDIF("$ENV{PYTHONDONTWRITEBYTECODE}" STREQUAL "")
+ ENDMACRO(PYTHON_INSTALL)

diff --git a/kde-base/kdelibs/kdelibs-4.6.49.9999.ebuild b/kde-base/kdelibs/kdelibs-4.6.49.9999.ebuild
index cd2dfd8..6fea3fd 100644
--- a/kde-base/kdelibs/kdelibs-4.6.49.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.49.9999.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
+	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.6.80-r1.ebuild b/kde-base/kdelibs/kdelibs-4.6.80-r1.ebuild
index 5a9fce3..a87ae07 100644
--- a/kde-base/kdelibs/kdelibs-4.6.80-r1.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.80-r1.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
+	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index a2dfdf2..1cf8d08 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
+	"${FILESDIR}/${PN}-4.6.3-bytecode.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-05-01 22:24 Tomas Chvatal
  0 siblings, 0 replies; 38+ messages in thread
From: Tomas Chvatal @ 2011-05-01 22:24 UTC (permalink / raw
  To: gentoo-commits

commit:     f1534bedb4964925c9bbfef13713c8d8e6854747
Author:     Tomas Chvatal <scarabeus <AT> gentoo <DOT> org>
AuthorDate: Sun May  1 22:24:03 2011 +0000
Commit:     Tomas Chvatal <scarabeus <AT> gentoo <DOT> org>
CommitDate: Sun May  1 22:24:03 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=f1534bed

[kde-base/kdelibs] do not suid kdeinit. Per bug #365633

---
 .../files/kdelibs-4.6.3-no_suid_kdeinit.patch      |   19 +++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.6.3.ebuild              |    1 +
 kde-base/kdelibs/kdelibs-4.6.9999.ebuild           |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 4 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.3-no_suid_kdeinit.patch b/kde-base/kdelibs/files/kdelibs-4.6.3-no_suid_kdeinit.patch
new file mode 100644
index 0000000..4b34f62
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.6.3-no_suid_kdeinit.patch
@@ -0,0 +1,19 @@
+diff -urN kdelibs-4.6.3.old/kinit/CMakeLists.txt kdelibs-4.6.3/kinit/CMakeLists.txt
+--- kdelibs-4.6.3.old/kinit/CMakeLists.txt	2011-05-02 00:19:10.000000000 +0200
++++ kdelibs-4.6.3/kinit/CMakeLists.txt	2011-05-02 00:20:32.000000000 +0200
+@@ -170,15 +170,6 @@
+   install(TARGETS start_kdeinit_wrapper DESTINATION ${LIBEXEC_INSTALL_DIR})
+ endif (NOT WIN32)
+ 
+-if (CMAKE_SYSTEM_NAME MATCHES Linux)
+-    MESSAGE(STATUS "Using setuid root kdeinit wrapper in order to protect it from bad Linux OOM-killer")
+-    set(KDEINIT_OOM_PROTECT 1)
+-    install(CODE "
+-        set(START_KDEINIT_PATH \"\$ENV{DESTDIR}${LIBEXEC_INSTALL_DIR}/start_kdeinit\")
+-        EXECUTE_PROCESS(COMMAND sh -c \"chown 0 '\${START_KDEINIT_PATH}' && chmod u+s '\${START_KDEINIT_PATH}'\")
+-    ")
+-endif (CMAKE_SYSTEM_NAME MATCHES Linux)
+-
+ ########### install files ###############
+ 
+ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.KLauncher.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR} )

diff --git a/kde-base/kdelibs/kdelibs-4.6.3.ebuild b/kde-base/kdelibs/kdelibs-4.6.3.ebuild
index 51c7d4e..76410bc 100644
--- a/kde-base/kdelibs/kdelibs-4.6.3.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.3.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
+	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
index c448e29..bbf33af 100644
--- a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
+	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 )
 
 pkg_pretend() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 1196c44..423e81e 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -133,6 +133,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
+	"${FILESDIR}/${PN}-4.6.3-no_suid_kdeinit.patch"
 )
 
 pkg_pretend() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-05-01 22:13 Tomas Chvatal
  0 siblings, 0 replies; 38+ messages in thread
From: Tomas Chvatal @ 2011-05-01 22:13 UTC (permalink / raw
  To: gentoo-commits

commit:     e58a95bd32024e1205b90da1ce626a855447f7ac
Author:     Tomas Chvatal <scarabeus <AT> gentoo <DOT> org>
AuthorDate: Sun May  1 22:13:02 2011 +0000
Commit:     Tomas Chvatal <scarabeus <AT> gentoo <DOT> org>
CommitDate: Sun May  1 22:13:02 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=e58a95bd

[kde-base/kdelibs] Drop kate patch as acessibility is harddep

---
 kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch |   49 --------------------
 kde-base/kdelibs/kdelibs-4.6.3.ebuild              |    1 -
 kde-base/kdelibs/kdelibs-4.6.9999.ebuild           |    1 -
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 -
 4 files changed, 0 insertions(+), 52 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch b/kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch
deleted file mode 100644
index 80bcfc5..0000000
--- a/kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-diff -ur kdelibs-4.5.96.orig/kate/view/kateviewaccessible.h kdelibs-4.5.95/kate/view/kateviewaccessible.h
---- kdelibs-4.5.96.orig/kate/view/kateviewaccessible.h	2010-11-11 17:41:28.000000000 +0300
-+++ kdelibs-4.5.95/kate/view/kateviewaccessible.h	2011-01-11 11:37:15.288810505 +0300
-@@ -19,6 +19,7 @@
- 
- #ifndef _KATE_VIEW_ACCESSIBLE_
- #define _KATE_VIEW_ACCESSIBLE_
-+#ifndef QT_NO_ACCESSIBILITY
- 
- #include "kateviewinternal.h"
- #include "katetextcursor.h"
-@@ -318,3 +319,4 @@
- }
- 
- #endif
-+#endif
-diff -ur kdelibs-4.5.96.orig/kate/view/kateviewinternal.cpp kdelibs-4.5.95/kate/view/kateviewinternal.cpp
---- kdelibs-4.5.96.orig/kate/view/kateviewinternal.cpp	2010-12-03 17:57:05.000000000 +0300
-+++ kdelibs-4.5.95/kate/view/kateviewinternal.cpp	2011-01-11 11:36:51.968811481 +0300
-@@ -216,7 +216,9 @@
-   connect( m_view, SIGNAL( selectionChanged(KTextEditor::View*) ),
-              this, SLOT( viewSelectionChanged() ) );
- 
-+#ifndef QT_NO_ACCESSIBILITY
-   QAccessible::installFactory(accessibleInterfaceFactory);
-+#endif
- 
-   // update is called in KateView, after construction and layout is over
-   // but before any other kateviewinternal call
-@@ -224,7 +226,9 @@
- 
- KateViewInternal::~KateViewInternal ()
- {
-+#ifndef QT_NO_ACCESSIBILITY
-   QAccessible::removeFactory(accessibleInterfaceFactory);
-+#endif
- 
-   // kill preedit ranges
-   delete m_imPreeditRange;
-@@ -646,7 +650,9 @@
- 
-   m_madeVisible = !force;
- 
-+#ifndef QT_NO_ACCESSIBILITY
-   QAccessible::updateAccessibility( this, KateCursorAccessible::ChildId, QAccessible::Focus );
-+#endif
- }
- 
- void KateViewInternal::slotRegionVisibilityChangedAt(unsigned int,bool clear_cache)

diff --git a/kde-base/kdelibs/kdelibs-4.6.3.ebuild b/kde-base/kdelibs/kdelibs-4.6.3.ebuild
index e3922bd..51c7d4e 100644
--- a/kde-base/kdelibs/kdelibs-4.6.3.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.3.ebuild
@@ -132,7 +132,6 @@ PATCHES=(
 	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
-	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 )
 

diff --git a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
index 124c5b3..c448e29 100644
--- a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
@@ -132,7 +132,6 @@ PATCHES=(
 	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
-	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 )
 

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index b531bea..1196c44 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -132,7 +132,6 @@ PATCHES=(
 	"${FILESDIR}/dist/02_gentoo_append_xdg_config_dirs-1.patch"
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
-	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
 	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 )
 



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-04-11 22:07 Andreas K. Huettel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas K. Huettel @ 2011-04-11 22:07 UTC (permalink / raw
  To: gentoo-commits

commit:     56fcc016245148e9524213ab79906f50c81d3f2e
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Mon Apr 11 22:09:58 2011 +0000
Commit:     Andreas K. Huettel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Mon Apr 11 22:10:12 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=56fcc016

[kde-base/kdelibs] Disable fatal linker warnings for all kde apps on arm only to make things build, bug 336209

(Portage version: 2.1.9.45/git/Linux x86_64, signed Manifest commit with key B6C5F7DE)

---
 .../kdelibs/files/kdelibs-4.6.2-armlinking.patch   |   14 ++++++++++++++
 .../kdelibs/files/kdelibs-4.6.2-nonepomuk.patch    |   15 +++++++++++++++
 kde-base/kdelibs/kdelibs-4.6.9999.ebuild           |    4 +++-
 kde-base/kdelibs/kdelibs-9999.ebuild               |    5 +++--
 4 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.2-armlinking.patch b/kde-base/kdelibs/files/kdelibs-4.6.2-armlinking.patch
new file mode 100644
index 0000000..a207d10
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.6.2-armlinking.patch
@@ -0,0 +1,14 @@
+diff -ruN kdelibs-4.6.2.orig/cmake/modules/FindKDE4Internal.cmake kdelibs-4.6.2/cmake/modules/FindKDE4Internal.cmake
+--- kdelibs-4.6.2.orig/cmake/modules/FindKDE4Internal.cmake	2011-04-01 15:56:18.000000000 +0200
++++ kdelibs-4.6.2/cmake/modules/FindKDE4Internal.cmake	2011-04-11 23:53:19.067196607 +0200
+@@ -1092,8 +1092,8 @@
+ if (CMAKE_SYSTEM_NAME MATCHES Linux OR CMAKE_SYSTEM_NAME STREQUAL GNU)
+    if (CMAKE_COMPILER_IS_GNUCXX)
+       set ( _KDE4_PLATFORM_DEFINITIONS -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_GNU_SOURCE)
+-      set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}")
+-      set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_MODULE_LINKER_FLAGS}")
++      set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}")
++      set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined -lc ${CMAKE_MODULE_LINKER_FLAGS}")
+ 
+       set ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_SHARED_LINKER_FLAGS}")
+       set ( CMAKE_MODULE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_MODULE_LINKER_FLAGS}")

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.2-nonepomuk.patch b/kde-base/kdelibs/files/kdelibs-4.6.2-nonepomuk.patch
new file mode 100644
index 0000000..2e34050
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.6.2-nonepomuk.patch
@@ -0,0 +1,15 @@
+diff -urNp kdelibs-4.6.1.org/kparts/CMakeLists.txt kdelibs-4.6.1/kparts/CMakeLists.txt
+--- kdelibs-4.6.1.org/kparts/CMakeLists.txt	2011-02-25 23:53:31.000000000 +0200
++++ kdelibs-4.6.1/kparts/CMakeLists.txt	2011-04-02 00:41:54.884508059 +0300
+@@ -2,7 +2,10 @@ project(kparts)
+ 
+ add_subdirectory( tests )
+ 
+-include_directories(${KDE4_KIO_INCLUDES} ${kparts_BINARY_DIR} ${nepomuk_SOURCE_DIR} ${nepomuk_SOURCE_DIR}/core ${nepomuk_SOURCE_DIR}/types)
++include_directories(${KDE4_KIO_INCLUDES} ${kparts_BINARY_DIR})
++if(HAVE_NEPOMUK)
++include_directories(${nepomuk_SOURCE_DIR} ${nepomuk_SOURCE_DIR}/core ${nepomuk_SOURCE_DIR}/types)
++endif(HAVE_NEPOMUK)
+ if(Soprano_FOUND)
+ include_directories(${SOPRANO_INCLUDE_DIR})
+ endif(Soprano_FOUND)

diff --git a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
index 40ecc56..cf96750 100644
--- a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
@@ -1,6 +1,6 @@
 # Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kdelibs/kdelibs-4.6.2-r2.ebuild,v 1.2 2011/04/11 21:59:37 dilfridge Exp $
 
 EAPI=3
 
@@ -136,10 +136,12 @@ PATCHES=(
 #	"${FILESDIR}/${PN}-4.5.74-klauncher_mac.patch" - FIXME read above
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
+	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 )
 
 src_prepare() {
 	kde4-base_src_prepare
+	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 
 	# Rename applications.menu (needs 01_gentoo_set_xdg_menu_prefix.patch to work)
 	local menu_prefix="kde-${SLOT}-"

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index c01e401..cf96750 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -1,6 +1,6 @@
 # Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kdelibs/kdelibs-4.6.2-r2.ebuild,v 1.2 2011/04/11 21:59:37 dilfridge Exp $
 
 EAPI=3
 
@@ -136,11 +136,12 @@ PATCHES=(
 #	"${FILESDIR}/${PN}-4.5.74-klauncher_mac.patch" - FIXME read above
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
-#	"${FILESDIR}/${PN}-4.6.0-kateacc.patch" - FIXME no longer in git?
+	"${FILESDIR}/${PN}-4.6.2-nonepomuk.patch"
 )
 
 src_prepare() {
 	kde4-base_src_prepare
+	use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch"
 
 	# Rename applications.menu (needs 01_gentoo_set_xdg_menu_prefix.patch to work)
 	local menu_prefix="kde-${SLOT}-"



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-04-03 17:06 Andreas K. Huettel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas K. Huettel @ 2011-04-03 17:06 UTC (permalink / raw
  To: gentoo-commits

commit:     770600b673ace427b6e17072439149b1764ef7f0
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Sun Apr  3 17:09:57 2011 +0000
Commit:     Andreas K. Huettel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sun Apr  3 17:09:57 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=770600b6

[kde-base/kdelibs] Add upstream patch: KFileMetaDataProvider: Don't crash if a Strigi analyzer crashes

Some Strigi analyzers are still unstable and crash under certain circumstances.
This patch moves the reading of the meta-data into a custom process instead of
doing it in a thread, which assures that a crashing Strigi analyzer does not
result in crashing Dolphin or Konqueror when hovering some items.

(Portage version: 2.1.9.45/git/Linux x86_64, signed Manifest commit with key B6C5F7DE)

---
 .../kdelibs/files/kdelibs-4.6.2-safestrigi.patch   |  780 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.6.2.ebuild              |    1 +
 kde-base/kdelibs/kdelibs-4.6.9999.ebuild           |    1 +
 3 files changed, 782 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.2-safestrigi.patch b/kde-base/kdelibs/files/kdelibs-4.6.2-safestrigi.patch
new file mode 100644
index 0000000..f6c1828
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.6.2-safestrigi.patch
@@ -0,0 +1,780 @@
+commit d1254968eac95f4d9d8c47552e27f0cc40e6aed9
+Author: Peter Penz <peter.penz19@gmail.com>
+Date:   Sun Feb 27 20:01:19 2011 +0100
+
+    KFileMetaDataProvider: Don't crash if a Strigi analyzer crashes
+    
+    Some Strigi analyzers are still unstable and crash under certain circumstances. This patch moves the reading of the meta-data into a custom process instead of doing it in a thread, which assures that a crashing Strigi analyzer does not result in crashing Dolphin or Konqueror when hovering some items.
+    
+    FIXED-IN: 4.7.0
+    BUG: 257964
+    BUG: 258715
+    BUG: 262299
+    BUG: 263468
+    BUG: 263502
+    BUG: 264254
+    BUG: 234799
+    BUG: 251462
+    BUG: 251701
+    BUG: 258918
+    BUG: 192377
+    BUG: 195564
+    BUG: 199368
+    BUG: 210841
+    BUG: 245376
+    BUG: 246461
+    BUG: 246901
+    BUG: 249150
+    BUG: 261952
+    BUG: 249876
+    BUG: 179376
+    BUG: 179417
+    BUG: 179420
+    BUG: 181591
+    BUG: 183269
+    BUG: 183722
+    BUG: 185667
+    BUG: 188596
+    BUG: 191864
+    BUG: 193112
+    BUG: 205813
+    BUG: 244621
+    BUG: 245451
+    BUG: 248214
+    BUG: 249655
+    BUG: 249876
+    BUG: 265549
+    BUG: 267079
+
+diff --git a/kio/CMakeLists.txt b/kio/CMakeLists.txt
+index 0802150..72386f8 100644
+--- a/kio/CMakeLists.txt
++++ b/kio/CMakeLists.txt
+@@ -257,7 +257,6 @@ if(NOT KIO_NO_NEPOMUK)
+   set(kfile_STAT_SRCS
+     ${kfile_STAT_SRCS}
+     kfile/kcommentwidget.cpp
+-    kfile/kloadfilemetadatathread.cpp
+     )
+ endif(NOT KIO_NO_NEPOMUK)
+ 
+@@ -307,6 +306,12 @@ set(kio_LIB_PRIVATE_SRCS
+     kio/slaveinterface_p.h
+ )
+ 
++if(NOT KIO_NO_NEPOMUK)
++    set(kfilemetadatareader_SRCS
++        kfile/kfilemetadatareader.cpp
++    )
++endif(NOT KIO_NO_NEPOMUK)
++
+ kde4_add_ui_files(kio_LIB_SRCS
+    kfile/kpropertiesdesktopadvbase.ui
+    kfile/kpropertiesdesktopbase.ui
+@@ -323,6 +328,8 @@ install(FILES kssl/ksslcertificatemanager.upd
+ kde4_add_library(kio ${LIBRARY_TYPE} ${kio_LIB_SRCS})
+ 
+ if(NOT KIO_NO_NEPOMUK)
++  kde4_add_executable(kfilemetadatareader ${kfilemetadatareader_SRCS})
++  target_link_libraries(kfilemetadatareader ${KDE4_KIO_LIBS} ${KDE4_NEPOMUK_LIBRARY} nepomukutils)
+   target_link_libraries(kio ${KDE4_NEPOMUK_LIBRARY} nepomukquery nepomukutils)
+ endif(NOT KIO_NO_NEPOMUK)
+ target_link_libraries(kio ${KDE4_KDEUI_LIBS} ${ZLIB_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${X11_LIBRARIES} ${KIO_EXTRA_LIBS})
+@@ -343,6 +350,9 @@ set_target_properties(kio PROPERTIES VERSION ${KDE_NON_GENERIC_LIB_VERSION}
+ 
+ ########### install files ###############
+ install(TARGETS kio EXPORT kdelibsLibraryTargets ${INSTALL_TARGETS_DEFAULT_ARGS})
++if(NOT KIO_NO_NEPOMUK)
++    install(TARGETS kfilemetadatareader ${INSTALL_TARGETS_DEFAULT_ARGS})
++endif(NOT KIO_NO_NEPOMUK)
+ 
+ install( PROGRAMS useragent.pl proxytype.pl  DESTINATION ${KCONF_UPDATE_INSTALL_DIR} )
+ 
+diff --git a/kio/kfile/kfilemetadataprovider.cpp b/kio/kfile/kfilemetadataprovider.cpp
+index 09ce4b2..d6e4d0d 100644
+--- a/kio/kfile/kfilemetadataprovider.cpp
++++ b/kio/kfile/kfilemetadataprovider.cpp
+@@ -22,18 +22,20 @@
+ #include <kfileitem.h>
+ #include "knfotranslator_p.h"
+ #include <klocale.h>
++#include <kprocess.h>
++#include <kstandarddirs.h>
+ #include <kurl.h>
+ 
+ #ifndef KIO_NO_NEPOMUK
+     #define DISABLE_NEPOMUK_LEGACY
+     #include "nepomukmassupdatejob.h"
+     #include "tagwidget.h"
++    #include "tag.h"
+     #include "kratingwidget.h"
+     #include "resource.h"
+     #include "resourcemanager.h"
+ 
+     #include "kcommentwidget_p.h"
+-    #include "kloadfilemetadatathread_p.h"
+ #else
+     namespace Nepomuk
+     {
+@@ -103,7 +105,7 @@ public:
+     Private(KFileMetaDataProvider* parent);
+     ~Private();
+ 
+-    void slotLoadingFinished(QThread* finishedThread);
++    void slotLoadingFinished(int exitCode, QProcess::ExitStatus exitStatus);
+ 
+     void slotRatingChanged(unsigned int rating);
+     void slotTagsChanged(const QList<Nepomuk::Tag>& tags);
+@@ -135,8 +137,8 @@ public:
+ #ifndef KIO_NO_NEPOMUK
+     QHash<KUrl, Nepomuk::Variant> m_data;
+ 
+-    QList<KLoadFileMetaDataThread*> m_metaDataThreads;
+-    KLoadFileMetaDataThread* m_latestMetaDataThread;
++    QList<KProcess*> m_metaDataProcesses;
++    KProcess* m_latestMetaDataProcess;
+ 
+     QWeakPointer<KRatingWidget> m_ratingWidget;
+     QWeakPointer<Nepomuk::TagWidget> m_tagWidget;
+@@ -153,8 +155,8 @@ KFileMetaDataProvider::Private::Private(KFileMetaDataProvider* parent) :
+     m_fileItems(),
+ #ifndef KIO_NO_NEPOMUK
+     m_data(),
+-    m_metaDataThreads(),
+-    m_latestMetaDataThread(0),
++    m_metaDataProcesses(),
++    m_latestMetaDataProcess(0),
+     m_ratingWidget(),
+     m_tagWidget(),
+     m_commentWidget(),
+@@ -169,35 +171,57 @@ KFileMetaDataProvider::Private::Private(KFileMetaDataProvider* parent) :
+ KFileMetaDataProvider::Private::~Private()
+ {
+ #ifndef KIO_NO_NEPOMUK
+-    foreach (KLoadFileMetaDataThread* thread, m_metaDataThreads) {
+-        disconnect(thread, SIGNAL(finished(QThread*)),
+-                   q, SLOT(slotLoadingFinished(QThread*)));
+-        thread->wait();
+-    }
++    qDeleteAll(m_metaDataProcesses);
+ #endif
+ }
+ 
+-void KFileMetaDataProvider::Private::slotLoadingFinished(QThread* finishedThread)
++void KFileMetaDataProvider::Private::slotLoadingFinished(int exitCode, QProcess::ExitStatus exitStatus)
+ {
++    Q_UNUSED(exitCode);
++    Q_UNUSED(exitStatus);
++
+ #ifndef KIO_NO_NEPOMUK
+-    // The thread that has emitted the finished() signal
+-    // will get deleted and removed from m_metaDataThreads.
+-    const int threadsCount = m_metaDataThreads.count();
+-    for (int i = 0; i < threadsCount; ++i) {
+-        KLoadFileMetaDataThread* thread = m_metaDataThreads[i];
+-        if (thread == finishedThread) {
+-            m_metaDataThreads.removeAt(i);
+-            if (thread != m_latestMetaDataThread) {
+-                // Ignore data of older threads, as the data got
+-                // obsolete by m_latestMetaDataThread.
+-                thread->deleteLater();
++    KProcess* finishedProcess = qobject_cast<KProcess*>(q->sender());
++    // The process that has emitted the finished() signal
++    // will get deleted and removed from m_metaDataProcesses.
++    for (int i = 0; i < m_metaDataProcesses.count(); ++i) {
++        KProcess* process = m_metaDataProcesses[i];
++        if (process == finishedProcess) {
++            m_metaDataProcesses.removeAt(i);
++            if (process != m_latestMetaDataProcess) {
++                // Ignore data of older processs, as the data got
++                // obsolete by m_latestMetaDataProcess.
++                process->deleteLater();
+                 return;
+             }
+         }
+     }
+ 
+-    m_data = m_latestMetaDataThread->data();
+-    m_latestMetaDataThread->deleteLater();
++    m_data.clear();
++    while (m_latestMetaDataProcess->canReadLine()) {
++        // Read key
++        QString key = QString::fromLocal8Bit(m_latestMetaDataProcess->readLine());
++        key.remove(QChar::Other_Control);
++
++        // Read variant-type
++        if (!m_latestMetaDataProcess->canReadLine()) {
++            break;
++        }
++        QString valueTypeString(QString::fromLocal8Bit(m_latestMetaDataProcess->readLine()));
++        valueTypeString.remove(QChar::Other_Control);
++        const int valueType = valueTypeString.toInt();
++        if (!m_latestMetaDataProcess->canReadLine()) {
++            break;
++        }
++
++        // Read variant-value
++        QString value(QString::fromLocal8Bit(m_latestMetaDataProcess->readLine()));
++        value.remove(QChar::Other_Control);
++        // TODO: Handle value-types like QVariantList
++        Q_UNUSED(valueType);
++        m_data.insert(KUrl(key), value);
++    }
++    m_latestMetaDataProcess->deleteLater();
+ 
+     if (m_fileItems.count() == 1) {
+         // TODO: Handle case if remote URLs are used properly. isDir() does
+@@ -219,14 +243,11 @@ void KFileMetaDataProvider::Private::slotLoadingFinished(QThread* finishedThread
+         }
+         m_data.insert(KUrl("kfileitem#totalSize"), KIO::convertSize(totalSize));
+     }
+-#else
+-    Q_UNUSED(finishedThread)
+ #endif
+ 
+     emit q->loadingFinished();
+ }
+ 
+-
+ void KFileMetaDataProvider::Private::slotRatingChanged(unsigned int rating)
+ {
+ #ifndef KIO_NO_NEPOMUK
+@@ -386,18 +407,27 @@ void KFileMetaDataProvider::setItems(const KFileItemList& items)
+         }
+     }
+ 
+-    // Cancel all threads that have not emitted a finished() signal.
+-    // The deleting of those threads is done in slotLoadingFinished().
+-    foreach (KLoadFileMetaDataThread* thread, d->m_metaDataThreads) {
+-        thread->cancel();
++    // Create a new process that will provide the meta data for the items
++    d->m_latestMetaDataProcess = new KProcess();
++
++    const QString fileMetaDataReaderExe = KStandardDirs::findExe(QLatin1String("kfilemetadatareader"));
++    (*d->m_latestMetaDataProcess) << fileMetaDataReaderExe;
++
++    foreach (const KUrl& url, urls) {
++        (*d->m_latestMetaDataProcess) << url.url();
+     }
+ 
+-    // Create a new thread that will provide the meta data for the items
+-    d->m_latestMetaDataThread = new KLoadFileMetaDataThread();
+-    connect(d->m_latestMetaDataThread, SIGNAL(finished(QThread*)),
+-            this, SLOT(slotLoadingFinished(QThread*)));
+-    d->m_latestMetaDataThread->load(urls);
+-    d->m_metaDataThreads.append(d->m_latestMetaDataThread);
++    d->m_latestMetaDataProcess->setOutputChannelMode(KProcess::OnlyStdoutChannel);
++    d->m_latestMetaDataProcess->setNextOpenMode(QIODevice::ReadOnly | QIODevice::Text);
++    d->m_latestMetaDataProcess->start();
++    if (d->m_latestMetaDataProcess->waitForStarted()) {
++        connect(d->m_latestMetaDataProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
++                this, SLOT(slotLoadingFinished(int, QProcess::ExitStatus)));
++        d->m_metaDataProcesses.append(d->m_latestMetaDataProcess);
++    } else {
++        delete d->m_latestMetaDataProcess;
++        d->m_latestMetaDataProcess = 0;
++    }
+ #endif
+ }
+ 
+diff --git a/kio/kfile/kfilemetadataprovider_p.h b/kio/kfile/kfilemetadataprovider_p.h
+index 05ae848..ce6e259 100644
+--- a/kio/kfile/kfilemetadataprovider_p.h
++++ b/kio/kfile/kfilemetadataprovider_p.h
+@@ -33,6 +33,7 @@
+ #endif
+ 
+ class KFileItemList;
++class KProcess;
+ class KUrl;
+ class QWidget;
+ 
+@@ -131,7 +132,7 @@ private:
+     class Private;
+     Private* const d;
+ 
+-    Q_PRIVATE_SLOT(d, void slotLoadingFinished(QThread* finishedThread))
++    Q_PRIVATE_SLOT(d, void slotLoadingFinished(int exitCode, QProcess::ExitStatus exitStatus))
+     Q_PRIVATE_SLOT(d, void slotRatingChanged(unsigned int rating))
+     Q_PRIVATE_SLOT(d, void slotTagsChanged(const QList<Nepomuk::Tag>& tags))
+     Q_PRIVATE_SLOT(d, void slotCommentChanged(const QString& comment))
+diff --git a/kio/kfile/kfilemetadatareader.cpp b/kio/kfile/kfilemetadatareader.cpp
+new file mode 100644
+index 0000000..0609235
+--- /dev/null
++++ b/kio/kfile/kfilemetadatareader.cpp
+@@ -0,0 +1,174 @@
++/*****************************************************************************
++ * Copyright (C) 2011 by Peter Penz <peter.penz@gmx.at>                      *
++ *                                                                           *
++ * 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 <iostream>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kfilemetainfo.h>
++#include <klocale.h>
++
++#include <QtCore/QHash>
++#include <QtCore/QString>
++
++#define DISABLE_NEPOMUK_LEGACY
++#include "config-nepomuk.h"
++
++#include <nepomuk/query/filequery.h>
++#include <nepomuk/query/comparisonterm.h>
++#include <nepomuk/query/andterm.h>
++#include <nepomuk/query/resourceterm.h>
++#include <nepomuk/query/resourcetypeterm.h>
++#include <nepomuk/query/optionalterm.h>
++#include <nepomuk/utils/utils.h>
++#include <nepomuk/property.h>
++#include <nepomuk/tag.h>
++#include <nepomuk/variant.h>
++#include <nepomuk/resourcemanager.h>
++
++using namespace std;
++
++static void sendMetaData(const QHash<KUrl, Nepomuk::Variant>& data)
++{
++    // Write the meta-data as sequence of the following properties:
++    // 1. Metadata key
++    // 2. Variant type
++    // 3. Variant value
++    QHashIterator<KUrl, Nepomuk::Variant> it(data);
++    while (it.hasNext()) {
++        it.next();
++        const QString key = it.key().url();
++        const Nepomuk::Variant& variant = it.value();
++
++        const QString variantType = QString::number(variant.type());
++        // TODO: serialize valuetypes like variant lists
++        QString variantValue = variant.toString();
++        // QChar::Other_Control acts as separator between the output-values.
++        // Assure that this character is not already part of a value:
++        variantValue.remove(QChar::Other_Control);
++
++        cout << key.toLocal8Bit().data() << endl;
++        cout << variantType.toLocal8Bit().data() << endl;
++        cout << variantValue.toLocal8Bit().data() << endl;
++    }
++}
++
++static int readMetaData(const KCmdLineArgs* args)
++{
++    KUrl::List urls;
++    const int argsCount = args->count();
++    for (int i = 0; i < argsCount; ++i) {
++        urls.append(KUrl(args->arg(i)));
++    }
++
++    unsigned int rating = 0;
++    QString comment;
++    QList<Nepomuk::Tag> tags;
++    QHash<KUrl, Nepomuk::Variant> data;
++
++    bool first = true;
++    foreach (const KUrl& url, urls) {
++        Nepomuk::Resource file(url);
++        if (!file.isValid()) {
++            continue;
++        }
++
++        if (!first && (rating != file.rating())) {
++            rating = 0; // Reset rating
++        } else if (first) {
++            rating = file.rating();
++        }
++
++        if (!first && (comment != file.description())) {
++            comment.clear(); // Reset comment
++        } else if (first) {
++            comment = file.description();
++        }
++
++        if (!first && (tags != file.tags())) {
++            tags.clear(); // Reset tags
++        } else if (first) {
++            tags = file.tags();
++        }
++
++        if (first && (urls.count() == 1)) {
++            // Get cached meta data by checking the indexed files
++            QHash<QUrl, Nepomuk::Variant> variants = file.properties();
++            QHash<QUrl, Nepomuk::Variant>::const_iterator it = variants.constBegin();
++            while (it != variants.constEnd()) {
++                Nepomuk::Types::Property prop(it.key());
++                data.insert(prop.uri(), Nepomuk::Utils::formatPropertyValue(prop, it.value(),
++                                                                            QList<Nepomuk::Resource>() << file,
++                                                                            Nepomuk::Utils::WithKioLinks));
++                ++it;
++            }
++
++            if (variants.isEmpty()) {
++                // The file has not been indexed, query the meta data
++                // directly from the file.
++                const QString path = urls.first().toLocalFile();
++                KFileMetaInfo metaInfo(path, QString(), KFileMetaInfo::Fastest);
++                const QHash<QString, KFileMetaInfoItem> metaInfoItems = metaInfo.items();
++                foreach (const KFileMetaInfoItem& metaInfoItem, metaInfoItems) {
++                    const QString uriString = metaInfoItem.name();
++                    const Nepomuk::Variant value(metaInfoItem.value());
++                    data.insert(uriString,
++                                Nepomuk::Utils::formatPropertyValue(Nepomuk::Types::Property(), value));
++                }
++            }
++        }
++
++        first = false;
++    }
++
++    if (Nepomuk::ResourceManager::instance()->initialized()) {
++        data.insert(KUrl("kfileitem#rating"), rating);
++        data.insert(KUrl("kfileitem#comment"), comment);
++
++        QList<Nepomuk::Variant> tagVariants;
++        foreach (const Nepomuk::Tag& tag, tags) {
++            tagVariants.append(Nepomuk::Variant(tag));
++        }
++        data.insert(KUrl("kfileitem#tags"), tagVariants);
++    }
++
++    sendMetaData(data);
++    return 0;
++}
++
++int main(int argc, char *argv[])
++{
++    KAboutData aboutData("kfilemetadatareader", 0, ki18n("KFileMetaDataReader"),
++                         "1.0",
++                         ki18n("KFileMetaDataReader can be used to read metadata from a file"),
++                         KAboutData::License_GPL,
++                         ki18n("(C) 2011, Peter Penz"));
++    aboutData.addAuthor(ki18n("Peter Penz"), ki18n("Current maintainer"), "peter.penz19@gmail.com");
++    
++    KCmdLineArgs::init(argc, argv, &aboutData);
++    
++    KCmdLineOptions options;
++    options.add("+[arg]", ki18n("List of URLs where the meta-data should be read from"));
++
++    KCmdLineArgs::addCmdLineOptions(options);
++    const KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
++
++    return readMetaData(args);
++}
++
+diff --git a/kio/kfile/kfilemetadatawidget.cpp b/kio/kfile/kfilemetadatawidget.cpp
+index dca3a12..532d884 100644
+--- a/kio/kfile/kfilemetadatawidget.cpp
++++ b/kio/kfile/kfilemetadatawidget.cpp
+@@ -41,9 +41,7 @@
+     #include <property.h>
+     #include <tag.h>
+ 
+-    #include <QMutex>
+     #include <QSpacerItem>
+-    #include <QThread>
+ #endif
+ 
+ class KFileMetaDataWidget::Private
+diff --git a/kio/kfile/kloadfilemetadatathread.cpp b/kio/kfile/kloadfilemetadatathread.cpp
+deleted file mode 100644
+index 55d2c37..0000000
+--- a/kio/kfile/kloadfilemetadatathread.cpp
++++ /dev/null
+@@ -1,178 +0,0 @@
+-/*****************************************************************************
+- * Copyright (C) 2009-2010 by Peter Penz <peter.penz@gmx.at>                 *
+- * Copyright (C) 2009-2010 by Sebastian Trueg <trueg@kde.org>                *
+- *                                                                           *
+- * 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 "kloadfilemetadatathread_p.h"
+-
+-#include <kfilemetainfo.h>
+-#include <kfilemetainfoitem.h>
+-#include <kglobal.h>
+-#include <klocale.h>
+-#include "kfilemetadataprovider_p.h"
+-#include <kprotocolinfo.h>
+-
+-#include "resource.h"
+-#include "thing.h"
+-#include "variant.h"
+-#include "resourcemanager.h"
+-
+-#include "config-nepomuk.h"
+-
+-#include "query/filequery.h"
+-#include "query/comparisonterm.h"
+-#include "query/andterm.h"
+-#include "query/resourceterm.h"
+-#include "query/resourcetypeterm.h"
+-#include "query/optionalterm.h"
+-#include "utils/utils.h"
+-
+-#include <Soprano/Model>
+-#include <Soprano/QueryResultIterator>
+-#include <Soprano/NodeIterator>
+-
+-#include <QMutexLocker>
+-
+-KLoadFileMetaDataThread::KLoadFileMetaDataThread()
+-    : m_canceled(false)
+-{
+-    connect(this, SIGNAL(finished()), this, SLOT(slotLoadingFinished()));
+-}
+-
+-KLoadFileMetaDataThread::~KLoadFileMetaDataThread()
+-{
+-}
+-
+-void KLoadFileMetaDataThread::load(const KUrl::List& urls)
+-{
+-    QMutexLocker locker(&m_mutex);
+-    m_urls = urls;
+-    m_canceled = false;
+-    start();
+-}
+-
+-QHash<KUrl, Nepomuk::Variant> KLoadFileMetaDataThread::data() const
+-{
+-    QMutexLocker locker(&m_mutex);
+-    return m_data;
+-}
+-
+-void KLoadFileMetaDataThread::cancel()
+-{
+-    // Setting m_canceled to true will cancel KLoadFileMetaDataThread::run()
+-    // as soon as run() gets the chance to check m_cancel.
+-    m_canceled = true;
+-}
+-
+-void KLoadFileMetaDataThread::run()
+-{
+-    QMutexLocker locker(&m_mutex);
+-    const KUrl::List urls = m_urls;
+-    locker.unlock(); // no shared member is accessed until locker.relock()
+-
+-    unsigned int rating = 0;
+-    QString comment;
+-    QList<Nepomuk::Tag> tags;
+-    QHash<KUrl, Nepomuk::Variant> data;
+-
+-    bool first = true;
+-    foreach (const KUrl& url, urls) {
+-        if (m_canceled) {
+-            return;
+-        }
+-
+-        Nepomuk::Resource file(url);
+-        if (!file.isValid()) {
+-            continue;
+-        }
+-
+-        if (!first && (rating != file.rating())) {
+-            rating = 0; // reset rating
+-        } else if (first) {
+-            rating = file.rating();
+-        }
+-
+-        if (!first && (comment != file.description())) {
+-            comment.clear(); // reset comment
+-        } else if (first) {
+-            comment = file.description();
+-        }
+-
+-        if (!first && (tags != file.tags())) {
+-            tags.clear(); // reset tags
+-        } else if (first) {
+-            tags = file.tags();
+-        }
+-
+-        if (first && (urls.count() == 1)) {
+-            // get cached meta data by checking the indexed files
+-            QHash<QUrl, Nepomuk::Variant> variants = file.properties();
+-            QHash<QUrl, Nepomuk::Variant>::const_iterator it = variants.constBegin();
+-            while (it != variants.constEnd()) {
+-                Nepomuk::Types::Property prop(it.key());
+-                data.insert(prop.uri(), Nepomuk::Utils::formatPropertyValue(prop, it.value(), QList<Nepomuk::Resource>() << file, Nepomuk::Utils::WithKioLinks));
+-                ++it;
+-            }
+-
+-            if (variants.isEmpty()) {
+-                // The file has not been indexed, query the meta data
+-                // directly from the file
+-
+-                // TODO: Some Strigi analyzers (used in KFileMetaInfo) are not reentrant.
+-                // As workaround the access is protected by a mutex here. To reproduce
+-                // the issue run kfilemetainfotest with helgrind.
+-                static QMutex metaInfoMutex;
+-                metaInfoMutex.lock();
+-
+-                const QString path = urls.first().toLocalFile();
+-                KFileMetaInfo metaInfo(path, QString(), KFileMetaInfo::Fastest);
+-                const QHash<QString, KFileMetaInfoItem> metaInfoItems = metaInfo.items();
+-                foreach (const KFileMetaInfoItem& metaInfoItem, metaInfoItems) {
+-                    const QString uriString = metaInfoItem.name();
+-                    const Nepomuk::Variant value(metaInfoItem.value());
+-                    data.insert(uriString, Nepomuk::Utils::formatPropertyValue(Nepomuk::Types::Property(), value));
+-                }
+-
+-                metaInfoMutex.unlock();
+-            }
+-        }
+-
+-        first = false;
+-    }
+-
+-    if (Nepomuk::ResourceManager::instance()->initialized()) {
+-        data.insert(KUrl("kfileitem#rating"), rating);
+-        data.insert(KUrl("kfileitem#comment"), comment);
+-
+-        QList<Nepomuk::Variant> tagVariants;
+-        foreach (const Nepomuk::Tag& tag, tags) {
+-            tagVariants.append(Nepomuk::Variant(tag));
+-        }
+-        data.insert(KUrl("kfileitem#tags"), tagVariants);
+-    }
+-
+-    locker.relock();
+-    m_data = data;
+-}
+-
+-void KLoadFileMetaDataThread::slotLoadingFinished()
+-{
+-    emit finished(this);
+-}
+-
+-#include "kloadfilemetadatathread_p.moc"
+diff --git a/kio/kfile/kloadfilemetadatathread_p.h b/kio/kfile/kloadfilemetadatathread_p.h
+deleted file mode 100644
+index 006e3a0..0000000
+--- a/kio/kfile/kloadfilemetadatathread_p.h
++++ /dev/null
+@@ -1,96 +0,0 @@
+-/*****************************************************************************
+- * Copyright (C) 2009-2010 by Peter Penz <peter.penz@gmx.at>                 *
+- *                                                                           *
+- * 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.                                               *
+- *****************************************************************************/
+-
+-#ifndef KLOADFILEMETADATATHREAD_H
+-#define KLOADFILEMETADATATHREAD_H
+-
+-#define DISABLE_NEPOMUK_LEGACY
+-#include <property.h>
+-#include <tag.h>
+-#include <variant.h>
+-
+-#include <kurl.h>
+-#include <QList>
+-#include <QMutex>
+-#include <QThread>
+-
+-/**
+- * Loads the meta data of files that are
+- * required by the widget KMetaDataWidget.
+- *
+- * Is used in KMetaDataModel.
+- */
+-class KLoadFileMetaDataThread : public QThread
+-{
+-    Q_OBJECT
+-
+-public:
+-    KLoadFileMetaDataThread();
+-    virtual ~KLoadFileMetaDataThread();
+-
+-    /**
+-     * Starts the thread and loads the meta data for
+-     * the files given by \p urls. After receiving
+-     * the signal finished(), the method KLoadFileMetaDataThread::data()
+-     * provides the loaded meta data.
+-     */
+-    void load(const KUrl::List& urls);
+-
+-    /**
+-     * Returns the meta data for the URLs given
+-     * by KLoadFileMetaDataThread::load(). The method only provides
+-     * valid results after the signal finished() has been
+-     * emitted.
+-     */
+-    QHash<KUrl, Nepomuk::Variant> data() const;
+-
+-    /**
+-     * Tells the thread that it should cancel as soon
+-     * as possible. It is undefined when the thread
+-     * gets cancelled. The signal finished() will emitted
+-     * after the cancelling has been done.mergedIt
+-     */
+-    void cancel();
+-
+-    /** @see QThread::run() */
+-    virtual void run();
+-
+-Q_SIGNALS:
+-    /**
+-     * Is emitted if the thread has finished the loading. KMetaDataModel
+-     * requires the information which thread has been finished, hence
+-     * the thread is passed as parameter (using QObject::sender() would
+-     * be an alternative, but it is less understandable).
+-     */
+-    void finished(QThread* thread);
+-
+-private slots:
+-    /**
+-     * Emits the signal finished() including the thread as parameter.
+-     */
+-    void slotLoadingFinished();
+-
+-private:
+-    mutable QMutex m_mutex;
+-    QHash<KUrl, Nepomuk::Variant> m_data;
+-    KUrl::List m_urls;
+-
+-    volatile bool m_canceled;
+-};
+-#endif

diff --git a/kde-base/kdelibs/kdelibs-4.6.2.ebuild b/kde-base/kdelibs/kdelibs-4.6.2.ebuild
index b28049b..4b2d0e7 100644
--- a/kde-base/kdelibs/kdelibs-4.6.2.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.2.ebuild
@@ -136,6 +136,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
+	"${FILESDIR}/${PN}-4.6.2-safestrigi.patch"
 )
 
 src_prepare() {

diff --git a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
index 6d76d50..61b0f5f 100644
--- a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
@@ -136,6 +136,7 @@ PATCHES=(
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
 	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
+	"${FILESDIR}/${PN}-4.6.2-safestrigi.patch"
 )
 
 src_prepare() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread
* [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/
@ 2011-02-27 20:45 Andreas K. Huettel
  0 siblings, 0 replies; 38+ messages in thread
From: Andreas K. Huettel @ 2011-02-27 20:45 UTC (permalink / raw
  To: gentoo-commits

commit:     2ab0b518fba47b1ea0c4334fde2b8c85d36e09a0
Author:     Andreas K. Huettel (dilfridge) <mail <AT> akhuettel <DOT> de>
AuthorDate: Sun Feb 27 20:46:06 2011 +0000
Commit:     Andreas K. Huettel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sun Feb 27 20:46:06 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=commit;h=2ab0b518

[kde-base/kdelibs] Include no accessibility fix, bug 355969

(Portage version: 2.1.9.41/git/Linux x86_64, signed Manifest commit with key B6C5F7DE)

---
 kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch |   49 ++++++++++++++++++++
 kde-base/kdelibs/kdelibs-4.6.1.ebuild              |    1 +
 kde-base/kdelibs/kdelibs-4.6.9999.ebuild           |    1 +
 kde-base/kdelibs/kdelibs-9999.ebuild               |    1 +
 4 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch b/kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch
new file mode 100644
index 0000000..80bcfc5
--- /dev/null
+++ b/kde-base/kdelibs/files/kdelibs-4.6.0-kateacc.patch
@@ -0,0 +1,49 @@
+diff -ur kdelibs-4.5.96.orig/kate/view/kateviewaccessible.h kdelibs-4.5.95/kate/view/kateviewaccessible.h
+--- kdelibs-4.5.96.orig/kate/view/kateviewaccessible.h	2010-11-11 17:41:28.000000000 +0300
++++ kdelibs-4.5.95/kate/view/kateviewaccessible.h	2011-01-11 11:37:15.288810505 +0300
+@@ -19,6 +19,7 @@
+ 
+ #ifndef _KATE_VIEW_ACCESSIBLE_
+ #define _KATE_VIEW_ACCESSIBLE_
++#ifndef QT_NO_ACCESSIBILITY
+ 
+ #include "kateviewinternal.h"
+ #include "katetextcursor.h"
+@@ -318,3 +319,4 @@
+ }
+ 
+ #endif
++#endif
+diff -ur kdelibs-4.5.96.orig/kate/view/kateviewinternal.cpp kdelibs-4.5.95/kate/view/kateviewinternal.cpp
+--- kdelibs-4.5.96.orig/kate/view/kateviewinternal.cpp	2010-12-03 17:57:05.000000000 +0300
++++ kdelibs-4.5.95/kate/view/kateviewinternal.cpp	2011-01-11 11:36:51.968811481 +0300
+@@ -216,7 +216,9 @@
+   connect( m_view, SIGNAL( selectionChanged(KTextEditor::View*) ),
+              this, SLOT( viewSelectionChanged() ) );
+ 
++#ifndef QT_NO_ACCESSIBILITY
+   QAccessible::installFactory(accessibleInterfaceFactory);
++#endif
+ 
+   // update is called in KateView, after construction and layout is over
+   // but before any other kateviewinternal call
+@@ -224,7 +226,9 @@
+ 
+ KateViewInternal::~KateViewInternal ()
+ {
++#ifndef QT_NO_ACCESSIBILITY
+   QAccessible::removeFactory(accessibleInterfaceFactory);
++#endif
+ 
+   // kill preedit ranges
+   delete m_imPreeditRange;
+@@ -646,7 +650,9 @@
+ 
+   m_madeVisible = !force;
+ 
++#ifndef QT_NO_ACCESSIBILITY
+   QAccessible::updateAccessibility( this, KateCursorAccessible::ChildId, QAccessible::Focus );
++#endif
+ }
+ 
+ void KateViewInternal::slotRegionVisibilityChangedAt(unsigned int,bool clear_cache)

diff --git a/kde-base/kdelibs/kdelibs-4.6.1.ebuild b/kde-base/kdelibs/kdelibs-4.6.1.ebuild
index 084927c..dde724f 100644
--- a/kde-base/kdelibs/kdelibs-4.6.1.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.1.ebuild
@@ -134,6 +134,7 @@ PATCHES=(
 #	"${FILESDIR}/${PN}-4.5.74-klauncher_mac.patch" - FIXME read above
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
+	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
 )
 
 src_prepare() {

diff --git a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
index 128ac16..0efaedf 100644
--- a/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-4.6.9999.ebuild
@@ -134,6 +134,7 @@ PATCHES=(
 #	"${FILESDIR}/${PN}-4.5.74-klauncher_mac.patch" - FIXME read above
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
+	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
 )
 
 src_prepare() {

diff --git a/kde-base/kdelibs/kdelibs-9999.ebuild b/kde-base/kdelibs/kdelibs-9999.ebuild
index 128ac16..0efaedf 100644
--- a/kde-base/kdelibs/kdelibs-9999.ebuild
+++ b/kde-base/kdelibs/kdelibs-9999.ebuild
@@ -134,6 +134,7 @@ PATCHES=(
 #	"${FILESDIR}/${PN}-4.5.74-klauncher_mac.patch" - FIXME read above
 	"${FILESDIR}/${PN}-4.5.90-mimetypes.patch"
 	"${FILESDIR}/${PN}-4.4.90-xslt.patch"
+	"${FILESDIR}/${PN}-4.6.0-kateacc.patch"
 )
 
 src_prepare() {



^ permalink raw reply related	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2015-10-15 19:11 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-23 15:41 [gentoo-commits] proj/kde:master commit in: kde-base/kdelibs/, kde-base/kdelibs/files/ Michael Palimaka
  -- strict thread matches above, loose matches on Subject: below --
2015-10-15 19:10 Michael Palimaka
2015-03-21 18:24 Michael Palimaka
2013-02-08 12:46 Michael Palimaka
2013-01-31 16:15 Michael Palimaka
2012-12-28 20:22 Andreas Hüttel
2012-12-28 20:15 Andreas Hüttel
2012-12-17 21:26 Andreas Hüttel
2012-11-08  7:51 Michael Palimaka
2012-11-07 19:47 Michael Palimaka
2012-11-07 19:33 Michael Palimaka
2012-10-08  9:20 Michael Palimaka
2012-09-22 17:54 Jonathan Callen
2012-08-23  7:56 Michael Palimaka
2012-08-17 15:50 Michael Palimaka
2012-07-14 19:43 Johannes Huber
2012-07-06 20:54 Andreas Hüttel
2012-06-27 22:05 Andreas Hüttel
2012-06-27 19:55 Andreas Hüttel
2012-06-21 20:20 Andreas Hüttel
2012-06-20 11:44 Andreas Hüttel
2012-06-19 21:05 Andreas Hüttel
2012-06-19 20:48 Andreas Hüttel
2012-05-31 21:38 Marc Schiffbauer
2012-04-12 19:38 Michael Palimaka
2012-04-05  5:55 Johannes Huber
2012-04-03 21:01 Andreas Hüttel
2012-03-24 16:47 Andreas Hüttel
2012-01-05 11:12 Johannes Huber
2011-12-27  3:38 Marc Schiffbauer
2011-09-28 10:56 Marc Schiffbauer
2011-09-24 15:36 Andreas Hüttel
2011-06-21 20:38 Andreas Hüttel
2011-05-01 22:24 Tomas Chvatal
2011-05-01 22:13 Tomas Chvatal
2011-04-11 22:07 Andreas K. Huettel
2011-04-03 17:06 Andreas K. Huettel
2011-02-27 20:45 Andreas K. Huettel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox