summaryrefslogtreecommitdiffstats
path: root/opensuse
diff options
context:
space:
mode:
authorRobert Xu <robxu9@gmail.com>2011-08-13 12:58:51 -0400
committerRobert Xu <robxu9@gmail.com>2011-08-13 12:58:51 -0400
commit46130378aea5fff80803409c2573e2ea31472cb9 (patch)
treecb5da908105e6577da7676f84ba9c7fbaba4fb52 /opensuse
parent53f2819f9af035a38ca08df1ede9e6cd24aa79ef (diff)
downloadtde-packaging-46130378aea5fff80803409c2573e2ea31472cb9.tar.gz
tde-packaging-46130378aea5fff80803409c2573e2ea31472cb9.zip
add dbus-1-tqt and libdbus-1-tqt-0; add unmodified tdelibs from kdelibs3
Diffstat (limited to 'opensuse')
-rw-r--r--opensuse/dbus-1-tqt/README.VERSION1
-rw-r--r--opensuse/dbus-1-tqt/baselibs.conf1
-rw-r--r--opensuse/dbus-1-tqt/dbus-1-tqt.changes56
-rw-r--r--opensuse/dbus-1-tqt/dbus-1-tqt.spec143
-rw-r--r--opensuse/dbus-1-tqt/dbus-qt3-compile-fix-thoenig-01.patch85
-rw-r--r--opensuse/dbus-1-tqt/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch12
-rw-r--r--opensuse/libdbus-1-tqt-0/README.VERSION1
-rw-r--r--opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch14
-rw-r--r--opensuse/libdbus-1-tqt-0/fix_ifdef.patch18
-rw-r--r--opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes58
-rw-r--r--opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec135
-rw-r--r--opensuse/libdbus-1-tqt-0/r785103.patch996
-rw-r--r--opensuse/libdbus-1-tqt-0/r795238.patch60
-rw-r--r--opensuse/tde-filesystem/macros.tde1
-rw-r--r--opensuse/tdelibs/10888-bt.tar.gzbin0 -> 48208 bytes
-rw-r--r--opensuse/tdelibs/3_5_BRANCH.diff126
-rw-r--r--opensuse/tdelibs/CATALOG.kdelibs3.diff139
-rw-r--r--opensuse/tdelibs/add-suse-translations.diff14
-rw-r--r--opensuse/tdelibs/admin.diff55
-rw-r--r--opensuse/tdelibs/admin.tar.bz2bin0 -> 188090 bytes
-rw-r--r--opensuse/tdelibs/allow-man-setgid.diff32
-rw-r--r--opensuse/tdelibs/api_docu_description36
-rw-r--r--opensuse/tdelibs/applications.menu-fallback.diff19
-rw-r--r--opensuse/tdelibs/arts-acinclude.patch66
-rw-r--r--opensuse/tdelibs/artwork.diff46
-rw-r--r--opensuse/tdelibs/autostart-spec.diff55
-rw-r--r--opensuse/tdelibs/avahi-pidfile.diff13
-rw-r--r--opensuse/tdelibs/baselibs.conf3
-rw-r--r--opensuse/tdelibs/bnc557126.diff21
-rw-r--r--opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch562
-rw-r--r--opensuse/tdelibs/bug-399296_ftphandling-fix.diff57
-rw-r--r--opensuse/tdelibs/bundle-locale-help.diff107
-rw-r--r--opensuse/tdelibs/clever-menu.diff221
-rw-r--r--opensuse/tdelibs/common_options156
-rw-r--r--opensuse/tdelibs/cr16-filesys-file_broken.pngbin0 -> 696 bytes
-rw-r--r--opensuse/tdelibs/create-kdeapi107
-rw-r--r--opensuse/tdelibs/default-useragent.diff13
-rw-r--r--opensuse/tdelibs/desktop-translations.diff209
-rw-r--r--opensuse/tdelibs/disable-idn-support.diff34
-rw-r--r--opensuse/tdelibs/disable-samba-dialog-without-smb.diff66
-rw-r--r--opensuse/tdelibs/do_make96
-rw-r--r--opensuse/tdelibs/fileshare.diff296
-rw-r--r--opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff16
-rw-r--r--opensuse/tdelibs/fix-gnome-help-support.diff130
-rw-r--r--opensuse/tdelibs/fix-gnome-help-support_legacy.diff126
-rw-r--r--opensuse/tdelibs/fix-kdemm-build.diff88
-rw-r--r--opensuse/tdelibs/fix-kerberos-printing.diff37
-rw-r--r--opensuse/tdelibs/fix-macmenu.patch11
-rw-r--r--opensuse/tdelibs/fix-qxembed.diff80
-rw-r--r--opensuse/tdelibs/flash-player-non-oss.diff44
-rw-r--r--opensuse/tdelibs/fontconfig-reverse-lookup.diff137
-rw-r--r--opensuse/tdelibs/gcc44.diff20
-rw-r--r--opensuse/tdelibs/gcc45.diff31
-rw-r--r--opensuse/tdelibs/google-mail.diff18
-rw-r--r--opensuse/tdelibs/ignore-inline-menu.diff18
-rw-r--r--opensuse/tdelibs/integrate-global-pixmaps-10.1.diff26
-rw-r--r--opensuse/tdelibs/integrate-global-pixmaps-new.diff13
-rw-r--r--opensuse/tdelibs/kcontrol_crash_patch.diff11
-rw-r--r--opensuse/tdelibs/kde3rc11
-rw-r--r--opensuse/tdelibs/kde3rc.dif17
-rw-r--r--opensuse/tdelibs/kde4-applications.diff70
-rw-r--r--opensuse/tdelibs/kdecode_fakes_include.diff18
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch62
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch42
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch13
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch30
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-kio.patch47
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch143
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch180
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.10.tar.bz2bin0 -> 15614607 bytes
-rw-r--r--opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch545
-rw-r--r--opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff15
-rw-r--r--opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch50
-rw-r--r--opensuse/tdelibs/kdelibs_networkstatus_branch2.diff69
-rw-r--r--opensuse/tdelibs/kdemm-20050330.tar.bz2bin0 -> 42068 bytes
-rw-r--r--opensuse/tdelibs/kdemm-filepreview.diff40
-rw-r--r--opensuse/tdelibs/kdemm.diff669
-rw-r--r--opensuse/tdelibs/kdeprint-restart-cupsd.diff32
-rw-r--r--opensuse/tdelibs/kdeprint-utf8.diff13
-rw-r--r--opensuse/tdelibs/kdesu-settings.diff50
-rw-r--r--opensuse/tdelibs/kdeversion.diff13
-rw-r--r--opensuse/tdelibs/kfile-beagle.diff42
-rw-r--r--opensuse/tdelibs/kickoff-drop-shadow.diff177
-rw-r--r--opensuse/tdelibs/kimproxy-warning.diff13
-rw-r--r--opensuse/tdelibs/kmimelist.diff81
-rw-r--r--opensuse/tdelibs/kremoteencoding-utf8.diff28
-rw-r--r--opensuse/tdelibs/ktip-icon-hack.diff56
-rw-r--r--opensuse/tdelibs/kwalletd-try-open.diff81
-rw-r--r--opensuse/tdelibs/light_v_2_scrollbar_patch.patch34
-rw-r--r--opensuse/tdelibs/limit-max-image-size.diff28
-rw-r--r--opensuse/tdelibs/lpoptions-cups-1.2.diff28
-rw-r--r--opensuse/tdelibs/mimetype-changes.diff36
-rw-r--r--opensuse/tdelibs/mimetype-icons.tar.bz2bin0 -> 84604 bytes
-rw-r--r--opensuse/tdelibs/mozilla-sliders.patch19
-rw-r--r--opensuse/tdelibs/networkstatus.diff6006
-rw-r--r--opensuse/tdelibs/no-debug-by-default.diff158
-rw-r--r--opensuse/tdelibs/no-progress-for-beagle-status-query.diff13
-rw-r--r--opensuse/tdelibs/noauto-package.diff13
-rw-r--r--opensuse/tdelibs/oom_score_adj.patch36
-rw-r--r--opensuse/tdelibs/patch-mimetype-iconnames.diff39
-rw-r--r--opensuse/tdelibs/prefer_distribution_settings.dif13
-rw-r--r--opensuse/tdelibs/printpreview.patch14
-rw-r--r--opensuse/tdelibs/r874968-ebay-crash.diff24
-rw-r--r--opensuse/tdelibs/rubberband-selection.diff380
-rw-r--r--opensuse/tdelibs/show-distribution.diff21
-rw-r--r--opensuse/tdelibs/silence.diff13
-rw-r--r--opensuse/tdelibs/smooth-scrolling.diff267
-rw-r--r--opensuse/tdelibs/spellcheck-default-utf8.diff26
-rw-r--r--opensuse/tdelibs/stat-on-media.diff14
-rw-r--r--opensuse/tdelibs/tdelibs-devel-doc.changes2956
-rw-r--r--opensuse/tdelibs/tdelibs-devel-doc.spec118
-rw-r--r--opensuse/tdelibs/tdelibs.changes4296
-rw-r--r--opensuse/tdelibs/tdelibs.spec892
-rw-r--r--opensuse/tdelibs/textcompletion-editor.diff344
-rw-r--r--opensuse/tdelibs/use-mediamanager.diff44
-rw-r--r--opensuse/tdelibs/use-xauthlocalhostname.diff240
-rw-r--r--opensuse/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop10
-rw-r--r--opensuse/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop10
-rw-r--r--opensuse/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop10
-rw-r--r--opensuse/tdelibs/x-jar-desktop.diff10
-rw-r--r--opensuse/tdelibs/x-kde-InitialPreference.diff16
-rw-r--r--opensuse/tdelibs/xinerama.patch543
-rw-r--r--opensuse/tdelibs/xml-catalog.diff44
-rw-r--r--opensuse/tdelibs/xmlhttprequest_3.x.diff47
124 files changed, 24305 insertions, 0 deletions
diff --git a/opensuse/dbus-1-tqt/README.VERSION b/opensuse/dbus-1-tqt/README.VERSION
new file mode 100644
index 000000000..3167a4836
--- /dev/null
+++ b/opensuse/dbus-1-tqt/README.VERSION
@@ -0,0 +1 @@
+In the TRINITY tree this is dependencies/dbus-tqt.
diff --git a/opensuse/dbus-1-tqt/baselibs.conf b/opensuse/dbus-1-tqt/baselibs.conf
new file mode 100644
index 000000000..eadc4f615
--- /dev/null
+++ b/opensuse/dbus-1-tqt/baselibs.conf
@@ -0,0 +1 @@
+dbus-1-tqt
diff --git a/opensuse/dbus-1-tqt/dbus-1-tqt.changes b/opensuse/dbus-1-tqt/dbus-1-tqt.changes
new file mode 100644
index 000000000..152c611cd
--- /dev/null
+++ b/opensuse/dbus-1-tqt/dbus-1-tqt.changes
@@ -0,0 +1,56 @@
+-------------------------------------------------------------------
+Sat Aug 13 16:49:42 UTC 2011 - rxu@lincomlinux.org
+
+- upgrade to trinity dbus-tqt and adjust accordingly
+
+-------------------------------------------------------------------
+Sat Dec 19 00:39:25 CET 2009 - jengelh@medozas.de
+
+- add baselibs.conf as a source
+
+-------------------------------------------------------------------
+Wed Dec 10 12:34:56 CET 2008 - olh@suse.de
+
+- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade
+ (bnc#437293)
+
+-------------------------------------------------------------------
+Thu Oct 30 12:34:56 CET 2008 - olh@suse.de
+
+- obsolete old -XXbit packages (bnc#437293)
+
+-------------------------------------------------------------------
+Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de
+
+- added baselibs.conf file to build xxbit packages
+ for multilib support
+
+-------------------------------------------------------------------
+Mon Nov 6 15:53:15 CET 2006 - thoenig@suse.de
+
+- loosen dependency to D-Bus
+
+-------------------------------------------------------------------
+Fri Oct 20 16:42:06 CEST 2006 - thoenig@suse.de
+
+- add dbus-qt3-do-not-close-shared-connection-thoenig-01.patch:
+ Do not close shared connection
+- F=dbus-qt3-compile-fix-thoenig-01; mv $.diff $F.patch
+
+-------------------------------------------------------------------
+Mon Aug 21 12:49:44 CEST 2006 - thoenig@suse.de
+
+- remove hack for 64bit architectures
+- use bz2 for tar ball
+
+-------------------------------------------------------------------
+Thu Aug 17 18:22:08 CEST 2006 - dmueller@suse.de
+
+- really enable -fstack-protector
+- fix build on x86_64
+
+-------------------------------------------------------------------
+Tue Aug 1 23:03:23 CEST 2006 - thoenig@suse.de
+
+- split out binings to sparate spec files
+
diff --git a/opensuse/dbus-1-tqt/dbus-1-tqt.spec b/opensuse/dbus-1-tqt/dbus-1-tqt.spec
new file mode 100644
index 000000000..912e3ac2c
--- /dev/null
+++ b/opensuse/dbus-1-tqt/dbus-1-tqt.spec
@@ -0,0 +1,143 @@
+#
+# spec file for package dbus-1-tqt
+#
+# Copyright (c) 2011 the Trinity Project (opensuse).
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/
+#
+
+# norootforbuild
+
+
+Name: dbus-1-tqt
+BuildRequires: dbus-1 dbus-1-devel libtqt4-devel unsermake
+URL: http://dbus.freedesktop.org/
+License: GPLv2+
+Group: Development/Libraries/TDE
+Version: 0.62
+Release: 1
+AutoReqProv: on
+Summary: TQt/KDE bindings for D-Bus
+Source0: dbus-tqt-%{version}.tar.bz2
+Source1: baselibs.conf
+Patch0: dbus-qt3-compile-fix-thoenig-01.patch
+Patch1: dbus-qt3-do-not-close-shared-connection-thoenig-01.patch
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+Requires: dbus-1 >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1`)
+
+%package devel
+License: Other uncritical OpenSource License
+Summary: Developer package for TQt/KDE bindings for D-Bus
+Requires: dbus-1 >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1`)
+Requires: dbus-1-devel >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1-devel`)
+Requires: dbus-1-tqt = %{version}
+AutoReqProv: on
+Group: Development/Libraries/TDE
+
+%description
+TQt/KDE bindings for D-Bus.
+
+
+
+Authors:
+--------
+ Olivier Andrieu <oliv__a@users.sourceforge.net>
+ Philip Blundell <pb@nexus.co.uk>
+ Anders Carlsson <andersca@gnome.org>
+ Kristian Hogsberg <krh@redhat.com>
+ Alex Larsson <alexl@redhat.com>
+ Michael Meeks <michael@ximian.com>
+ Seth Nickell <seth@gnome.org>
+ Havoc Pennington <hp@redhat.com>
+ Harri Porten <porten@kde.org>
+ Matthew Rickard <mjricka@epoch.ncsc.mil>
+ Zack Rusin <zack@kde.org>
+ Joe Shaw <joe@assbarn.com>
+ Colin Walters <walters@gnu.org>
+ David Zeuthen <david@fubar.dk>
+
+%description devel
+Developer package for TQt/KDE bindings for D-Bus.
+
+
+
+Authors:
+--------
+ Olivier Andrieu <oliv__a@users.sourceforge.net>
+ Philip Blundell <pb@nexus.co.uk>
+ Anders Carlsson <andersca@gnome.org>
+ Kristian Hogsberg <krh@redhat.com>
+ Alex Larsson <alexl@redhat.com>
+ Michael Meeks <michael@ximian.com>
+ Seth Nickell <seth@gnome.org>
+ Havoc Pennington <hp@redhat.com>
+ Harri Porten <porten@kde.org>
+ Matthew Rickard <mjricka@epoch.ncsc.mil>
+ Zack Rusin <zack@kde.org>
+ Joe Shaw <joe@assbarn.com>
+ Colin Walters <walters@gnu.org>
+ David Zeuthen <david@fubar.dk>
+
+%prep
+%setup -n dbus-tqt-%{version} -q
+%patch0 -p0
+%patch1 -p0
+
+%build
+RPM_OPT_FLAGS="${RPM_OPT_FLAGS} -fstack-protector -fno-strict-aliasing -fPIC"
+export CFLAGS="${RPM_OPT_FLAGS}"
+export CXXFLAGS="${RPM_OPT_FLAGS}"
+mkdir build
+cd build
+ cmake -DCMAKE_SKIP_RPATH=ON \\\
+ -DCMAKE_INSTALL_PREFIX=%{_prefix} \\\
+ -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \\\
+      -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \\\
+ -DLIB_INSTALL_DIR:PATH=%{_libdir} \\\
+ -DLIBEXEC_INSTALL_DIR:PATH=%{_libexecdir} \\\
+ -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\
+ -DCMAKE_VERBOSE_MAKEFILE=ON \\\
+      -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\
+      -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\
+ -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\
+ -DMAN_INSTALL_DIR=%{_mandir} \
+ ../
+make
+
+%install
+make DESTDIR=%{buildroot} install
+
+%post
+%{run_ldconfig}
+
+%postun
+%{run_ldconfig}
+
+%clean
+%{__rm} -rf %{buildroot}
+
+%files
+%defattr(-, root, root)
+%{_libdir}/libdbus-tqt-1.so.1*
+
+%files devel
+%defattr(-, root, root)
+%dir %{_includedir}/dbus-1.0
+%dir %{_includedir}/dbus-1.0/dbus
+%{_includedir}/dbus-1.0/dbus/connection.h
+%{_includedir}/dbus-1.0/dbus/dbus-qt.h
+%{_includedir}/dbus-1.0/dbus/message.h
+%{_includedir}/dbus-1.0/dbus/server.h
+%{_libdir}/libdbus-tqt-1.la
+%{_libdir}/libdbus-tqt-1.so
+
+%changelog
diff --git a/opensuse/dbus-1-tqt/dbus-qt3-compile-fix-thoenig-01.patch b/opensuse/dbus-1-tqt/dbus-qt3-compile-fix-thoenig-01.patch
new file mode 100644
index 000000000..00b8b6026
--- /dev/null
+++ b/opensuse/dbus-1-tqt/dbus-qt3-compile-fix-thoenig-01.patch
@@ -0,0 +1,85 @@
+--- dbus-qt3/connection.cpp 2005-04-18 05:19:17.000000000 -0600
++++ dbus-qt3/connection.cpp 2005-04-19 14:35:07.000000000 -0600
+@@ -154,6 +154,7 @@
+
+ void* Connection::virtual_hook( int, void* )
+ {
++ return (void *)NULL;
+ }
+
+ void Connection::dbus_connection_setup_with_qt_main (DBusConnection *connection)
+--- dbus-qt3/message.cpp 2005-04-18 05:19:17.000000000 -0600
++++ dbus-qt3/message.cpp 2005-04-19 14:55:32.000000000 -0600
+@@ -359,6 +359,7 @@
+ Message Message::operator=( const Message& other )
+ {
+ //FIXME: ref the other.d->msg instead of copying it?
++ return (Message &)(d->msg);
+ }
+ /**
+ * Destructs message.
+@@ -508,42 +509,49 @@
+ const dbus_bool_t right_size_bool = b;
+ dbus_message_append_args( d->msg, DBUS_TYPE_BOOLEAN, &right_size_bool,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( Q_INT8 byte )
+ {
+ dbus_message_append_args( d->msg, DBUS_TYPE_BYTE, &byte,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( Q_INT32 num )
+ {
+ dbus_message_append_args( d->msg, DBUS_TYPE_INT32, &num,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( Q_UINT32 num )
+ {
+ dbus_message_append_args( d->msg, DBUS_TYPE_UINT32, &num,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( Q_INT64 num )
+ {
+ dbus_message_append_args( d->msg, DBUS_TYPE_INT64, &num,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( Q_UINT64 num )
+ {
+ dbus_message_append_args( d->msg, DBUS_TYPE_UINT64, &num,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( double num )
+ {
+ dbus_message_append_args( d->msg, DBUS_TYPE_DOUBLE, &num,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( const QString& str )
+@@ -551,11 +559,13 @@
+ const char *u = str.utf8();
+ dbus_message_append_args( d->msg, DBUS_TYPE_STRING, &u,
+ DBUS_TYPE_INVALID );
++ return (Message &)(d->msg);
+ }
+
+ Message& Message::operator<<( const QVariant& custom )
+ {
+ //FIXME: imeplement
++ return (Message &)(d->msg);
+ }
+
+ }
+
diff --git a/opensuse/dbus-1-tqt/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch b/opensuse/dbus-1-tqt/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch
new file mode 100644
index 000000000..3cc726de1
--- /dev/null
+++ b/opensuse/dbus-1-tqt/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch
@@ -0,0 +1,12 @@
+--- dbus-qt3/connection.cpp 2006-10-20 16:33:29.000000000 +0200
++++ dbus-qt3/connection.cpp 2006-10-20 16:33:10.000000000 +0200
+@@ -106,7 +106,7 @@
+
+ void Connection::close()
+ {
+- dbus_connection_close ( d->connection );
++ dbus_connection_unref ( d->connection );
+ }
+
+ void Connection::flush()
+
diff --git a/opensuse/libdbus-1-tqt-0/README.VERSION b/opensuse/libdbus-1-tqt-0/README.VERSION
new file mode 100644
index 000000000..b8b49c0d6
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/README.VERSION
@@ -0,0 +1 @@
+In the TRINITY tree this is dependencies/dbus-1-tqt.
diff --git a/opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch b/opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch
new file mode 100644
index 000000000..cadd26ca0
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch
@@ -0,0 +1,14 @@
+Index: tools/dbusxml2qt3/methodgen.cpp
+===================================================================
+--- tools/dbusxml2qt3/methodgen.cpp (Revision 805416)
++++ tools/dbusxml2qt3/methodgen.cpp (Arbeitskopie)
+@@ -1740,7 +1740,8 @@
+ stream << " for (; it != endIt; ++it)" << endl;
+ stream << " {" << endl;
+ stream << " QDBusObjectBase* interface = it.data();" << endl;
+- stream << " delete interface;" << endl;
++ stream << " if (interface != this)" << endl;
++ stream << " delete interface;" << endl;
+ stream << " }" << endl;
+ stream << " interfaces.clear();" << endl;
+ stream << "}" << endl;
diff --git a/opensuse/libdbus-1-tqt-0/fix_ifdef.patch b/opensuse/libdbus-1-tqt-0/fix_ifdef.patch
new file mode 100644
index 000000000..99da35290
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/fix_ifdef.patch
@@ -0,0 +1,18 @@
+--- dbus/qdbusobjectpath.h
++++ dbus/qdbusobjectpath.h
+@@ -21,6 +21,9 @@
+ *
+ */
+
++#ifndef QDBUSOBJECTPATH_H
++#define QDBUSOBJECTPATH_H
++
+ #include <qcstring.h>
+
+ /**
+@@ -111,3 +114,5 @@
+ */
+ static int validate(const QCString& path);
+ };
++
++#endif
diff --git a/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes b/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes
new file mode 100644
index 000000000..f5e01f9af
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes
@@ -0,0 +1,58 @@
+-------------------------------------------------------------------
+Sat Aug 13 15:57:46 UTC 2011 - rxu@lincomlinux.org
+
+- upgrade to TQt version and adjust accordingly
+
+-------------------------------------------------------------------
+Fri Mar 6 15:38:51 CET 2009 - crrodriguez@suse.de
+
+- remove static libraries and "la" files
+
+-------------------------------------------------------------------
+Thu May 8 17:15:13 CEST 2008 - hschaa@suse.de
+
+- Add fix_circular_destructor.patch which fixes a crash in the
+ generated objects
+
+-------------------------------------------------------------------
+Wed Apr 9 17:45:53 CEST 2008 - hschaa@suse.de
+
+- Update to SVN revision 795238 which fixes some issues with KNM
+
+-------------------------------------------------------------------
+Thu Mar 13 10:32:01 CET 2008 - hschaa@suse.de
+
+- Update to 0.8.1 + SVN revision 785103
+- Remove BRANCH_UPDATE.diff
+- Add r785103.patch
+
+-------------------------------------------------------------------
+Fri Feb 8 01:03:49 CET 2008 - dmueller@suse.de
+
+- also allow building on s390/s390x
+
+-------------------------------------------------------------------
+Fri Jan 11 12:14:10 CET 2008 - hschaa@suse.de
+
+- add ifdefs to qdbusobjectpath.h (fix_ifdef.patch)
+
+-------------------------------------------------------------------
+Wed Jan 9 19:01:49 CET 2008 - dmueller@suse.de
+
+- fix generation of nm introspection (branch update)
+
+-------------------------------------------------------------------
+Mon Dec 17 16:43:44 CET 2007 - dmueller@suse.de
+
+- include bugfixes from SVN
+
+-------------------------------------------------------------------
+Wed Dec 12 14:03:53 CET 2007 - hschaa@suse.de
+
+- Added packages to PDB
+
+-------------------------------------------------------------------
+Fri Nov 30 13:30:33 CET 2007 - hschaa@suse.de
+
+- Initial checkin
+
diff --git a/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec b/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec
new file mode 100644
index 000000000..244080a40
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec
@@ -0,0 +1,135 @@
+#
+# spec file for package libdbus-1-tqt-0
+#
+# Copyright (c) 2011 the Trinity Project (opensuse).
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/
+#
+
+# norootforbuild
+
+
+Name: libdbus-1-tqt-0
+Url: http://www.freedesktop.org/wiki/Software/DBusBindings
+%define appname libdbus-1-tqt
+BuildRequires: dbus-1-devel libtqt4-devel
+License: GPL v2 or later
+Group: Development/Libraries/C and C++
+AutoReqProv: on
+Version: 0.8.1
+Release: 1
+Summary: TQt DBus Bindings
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+Source0: %{appname}-%{version}.tar.bz2
+Patch1: fix_ifdef.patch
+Patch2: r785103.patch
+Patch3: r795238.patch
+Patch4: fix_circular_destructor.patch
+
+%description
+This library provides TQt-classes for accessing the DBus
+
+
+
+Authors:
+--------
+ Kevin Krammer <kevin.krammer@gmx.at>
+
+%package devel
+License: GPL v2 or later
+Summary: Development files for libdbus-1-tqt
+Group: Development/Libraries/C and C++
+Requires: %{name} = %{version}-%{release}
+Requires: dbus-1-devel libtqt4-devel
+
+%description devel
+This library provides TQt-classes for accessing the DBus.
+
+This package holds the development files for libdbus-1-tqt.
+
+
+
+Authors:
+--------
+ Kevin Krammer <kevin.krammer@gmx.at>
+
+%package -n dbusxml2tqt
+License: GPL v2 or later
+Summary: Generate TQt-classes from DBus-introspection data
+Group: Development/Libraries/C and C++
+Requires: %{name} = %{version}-%{release}
+
+%description -n dbusxml2tqt
+dbusxml2tqt allows to generate TQt-classes from DBus-introspection data
+
+
+
+Authors:
+--------
+ Kevin Krammer <kevin.krammer@gmx.at>
+
+%prep
+%setup -n %{appname}-%{version} -q
+%patch1
+%patch2 -p1
+%patch3 -p0
+%patch4 -p0
+
+%build
+mkdir build
+cd build
+cmake ../
+%{__make} %{?jobs:-j%jobs}
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT
+#install -D -m 0755 ./tools/dbusxml2qt3/dbusxml2qt3 $RPM_BUILD_ROOT%{_bindir}/dbusxml2tqt
+%{__rm} -f %{buildroot}%{_libdir}/*.la
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc README AUTHORS ChangeLog COPYING INSTALL
+%{_libdir}/libdbus-1-tqt.so.0
+%{_libdir}/libdbus-1-tqt.so.0.8.1
+
+%files devel
+%defattr(-,root,root)
+%{_libdir}/libdbus-1-tqt.so
+%dir %{_includedir}/dbus-1.0/tqt
+%dir %{_includedir}/dbus-1.0/tqt/dbus
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusconnection.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdata.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdataconverter.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdatalist.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdatamap.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbuserror.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusmacros.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusmessage.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusobject.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusobjectpath.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusproxy.h
+%{_includedir}/dbus-1.0/tqt/dbus/tqdbusvariant.h
+%{_libdir}/pkgconfig/dbus-1-tqt.pc
+
+%files -n dbusxml2tqt
+%defattr(-,root,root)
+%{_bindir}/dbusxml2tqt
+
+%changelog
+
diff --git a/opensuse/libdbus-1-tqt-0/r785103.patch b/opensuse/libdbus-1-tqt-0/r785103.patch
new file mode 100644
index 000000000..d07b87180
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/r785103.patch
@@ -0,0 +1,996 @@
+diff -ur libdbus-1-qt3-0.8.1/qdbusintegrator.cpp ../dbus-qt4-qt3backport/qdbusintegrator.cpp
+--- libdbus-1-qt3-0.8.1/qdbusintegrator.cpp 2007-12-17 12:34:08.000000000 +0100
++++ ../dbus-qt4-qt3backport/qdbusintegrator.cpp 2008-03-13 10:28:54.000000000 +0100
+@@ -121,7 +121,7 @@
+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
+
+ int flags = dbus_watch_get_flags(watch);
+- int fd = dbus_watch_get_fd(watch);
++ int fd = dbus_watch_get_unix_fd(watch);
+
+ QDBusConnectionPrivate::Watcher watcher;
+ if (flags & DBUS_WATCH_READABLE) {
+@@ -163,7 +163,7 @@
+ //qDebug("remove watch");
+
+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
+- int fd = dbus_watch_get_fd(watch);
++ int fd = dbus_watch_get_unix_fd(watch);
+
+ QDBusConnectionPrivate::WatcherHash::iterator it = d->watchers.find(fd);
+ if (it != d->watchers.end())
+@@ -205,7 +205,7 @@
+ //qDebug("toggle watch");
+
+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
+- int fd = dbus_watch_get_fd(watch);
++ int fd = dbus_watch_get_unix_fd(watch);
+
+ QDBusConnectionPrivate::WatcherHash::iterator it = d->watchers.find(fd);
+ if (it != d->watchers.end()) {
+@@ -218,7 +218,7 @@
+ int flags = dbus_watch_get_flags(watch);
+
+ // qDebug("toggle watch %d to %d (write: %d, read: %d)",
+-// dbus_watch_get_fd(watch), enabled,
++// dbus_watch_get_unix_fd(watch), enabled,
+ // flags & DBUS_WATCH_WRITABLE, flags & DBUS_WATCH_READABLE);
+
+ if (flags & DBUS_WATCH_READABLE && (*wit).read)
+diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/classgen.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/classgen.cpp
+--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/classgen.cpp 2007-12-17 12:34:08.000000000 +0100
++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/classgen.cpp 2008-03-13 10:28:54.000000000 +0100
+@@ -38,6 +38,11 @@
+ insert(key, true);
+ }
+
++ void removeString(const QString& key)
++ {
++ erase(key);
++ }
++
+ void insertStringList(const QStringList& list)
+ {
+ QStringList::const_iterator it = list.begin();
+@@ -194,6 +199,14 @@
+ forwards.insertString("class QDomElement");
+ if (!classData.signals.isEmpty())
+ forwards.insertString("class QString");
++ if (!classData.asyncMethods.isEmpty())
++ {
++ includes["Qt"].insertString("<qmap.h>");
++ forwards.erase("template <typename K, typename V> class QMap");
++
++ includes["qdbus"].insertString("<dbus/qdbusmessage.h>");
++ forwards.erase("class QDBusMessage");
++ }
+ break;
+
+ case Class::Proxy:
+@@ -205,6 +218,11 @@
+ forwards.insertString("class QString");
+ if (!classData.properties.isEmpty())
+ forwards.insertString("class QDBusVariant");
++ if (!classData.asyncMethods.isEmpty())
++ {
++ includes["Qt"].insertString("<qmap.h>");
++ forwards.erase("template <typename K, typename V> class QMap");
++ }
+ break;
+
+ case Class::Node:
+@@ -345,7 +363,7 @@
+ stream << "#include \"" << (*it).name.lower() << ".h\"" << endl;
+ }
+
+- stream << "#include \"introspectable.h\"" << endl;
++ stream << "#include \"introspectableinterface.h\"" << endl;
+
+ stream << endl;
+ }
+@@ -442,7 +460,30 @@
+ static void writeMethodDeclarations(const Class& classData, Class::Role role,
+ QTextStream& stream)
+ {
+- if (!classData.methods.isEmpty())
++ if (role == Class::Interface && !classData.asyncReplyMethods.isEmpty())
++ {
++ stream << "public:" << endl;
++
++ QValueList<Method>::const_iterator it =
++ classData.asyncReplyMethods.begin();
++ QValueList<Method>::const_iterator endIt =
++ classData.asyncReplyMethods.end();
++ for (; it != endIt; ++it)
++ {
++ Method method = *it;
++ method.name += "AsyncReply";
++
++ stream << " virtual void ";
++ MethodGenerator::writeMethodDeclaration(method, false, false, stream);
++
++ stream << " virtual void " << (*it).name
++ << "AsyncError(int asyncCallId, const QDBusError& error);"
++ << endl;
++ stream << endl;
++ }
++ }
++
++ if (!classData.methods.isEmpty() || !classData.asyncMethods.isEmpty())
+ {
+ bool pureVirtual = true;
+ switch (role)
+@@ -465,9 +506,35 @@
+ QValueList<Method>::const_iterator endIt = classData.methods.end();
+ for (; it != endIt; ++it)
+ {
++ if ((*it).async) continue;
++
+ stream << " virtual bool ";
+ MethodGenerator::writeMethodDeclaration(*it, pureVirtual, true, stream);
+ }
++
++ it = classData.asyncMethods.begin();
++ endIt = classData.asyncMethods.end();
++ for (; it != endIt; ++it)
++ {
++ Method method = *it;
++ method.name += "Async";
++
++ switch (role)
++ {
++ case Class::Interface:
++ stream << " virtual void ";
++ MethodGenerator::writeMethodDeclaration(method, pureVirtual, false, stream);
++ break;
++
++ case Class::Proxy:
++ stream << " virtual bool ";
++ MethodGenerator::writeMethodDeclaration(method, pureVirtual, true, stream);
++ break;
++
++ case Class::Node: // no async methods
++ break;
++ }
++ }
+ }
+
+ if (!classData.properties.isEmpty())
+@@ -511,7 +578,7 @@
+ switch (role)
+ {
+ case Class::Interface:
+- if (!classData.methods.isEmpty())
++ if (!classData.methods.isEmpty() || !classData.asyncMethods.isEmpty())
+ {
+ stream << "protected: // implement sending replies" << endl;
+ stream << " virtual void handleMethodReply(const QDBusMessage& reply) = 0;" << endl;
+@@ -527,15 +594,35 @@
+ break;
+
+ case Class::Proxy:
++ {
+ if (!classData.signals.isEmpty())
+ {
+ stream << "protected slots: // usually no need to reimplement" << endl;
+ stream << " virtual void slotHandleDBusSignal(const QDBusMessage& message);" << endl;
+ stream << endl;
+ }
++
++ if (!classData.asyncReplySignals.isEmpty())
++ {
++ if (classData.signals.isEmpty())
++ {
++ stream << "protected slots: // usually no need to reimplement" << endl;
++ }
++ stream << " virtual void slotHandleAsyncReply(int id, const QDBusMessage& message);" << endl;
++ stream << endl;
++ }
++
+ stream << "protected:" << endl;
+ stream << " QDBusProxy* m_baseProxy;" << endl;
++
++ if (!classData.asyncMethods.isEmpty())
++ {
++ stream << endl;
++ stream << " QMap<int, QString> m_asyncCalls;" << endl;
++ }
++
+ break;
++ }
+
+ case Class::Node: // not variable methods
+ break;
+@@ -547,7 +634,8 @@
+ static void writeSignalDeclarations(const Class& classData, Class::Role role,
+ QTextStream& stream)
+ {
+- if (classData.signals.isEmpty()) return;
++ if (classData.signals.isEmpty() && classData.asyncReplySignals.isEmpty())
++ return;
+
+ QString prefix;
+ switch (role)
+@@ -578,6 +666,18 @@
+ MethodGenerator::writeMethodDeclaration(*it, false, false, stream);
+ }
+
++ it = classData.asyncReplySignals.begin();
++ endIt = classData.asyncReplySignals.end();
++ for (; it != endIt; ++it)
++ {
++ stream << prefix;
++
++ Method signal = *it;
++ signal.name += "AsyncReply";
++
++ MethodGenerator::writeMethodDeclaration(signal, false, false, stream);
++ }
++
+ stream << endl;
+ }
+
+@@ -598,8 +698,6 @@
+ static void writeMethodCallDeclarations(const Class& classData,
+ QTextStream& stream)
+ {
+- if (classData.methods.isEmpty()) return;
+-
+ QValueList<Method>::const_iterator it = classData.methods.begin();
+ QValueList<Method>::const_iterator endIt = classData.methods.end();
+ for (; it != endIt; ++it)
+@@ -607,6 +705,26 @@
+ stream << " ";
+ MethodGenerator::writeMethodCallDeclaration(*it, stream);
+ }
++
++ if (!classData.asyncReplyMethods.isEmpty())
++ {
++ stream << "protected:" << endl;
++ stream << " QMap<int, QDBusMessage> m_asyncCalls;" << endl;
++ stream << endl;
++ }
++}
++
++static void writeInterfaceAsyncReplyHandlers(const Class& classData,
++ QTextStream& stream)
++{
++ if (classData.asyncReplyMethods.isEmpty()) return;
++
++ QValueList<Method>::const_iterator it = classData.asyncReplyMethods.begin();
++ QValueList<Method>::const_iterator endIt = classData.asyncReplyMethods.end();
++ for (; it != endIt; ++it)
++ {
++ MethodGenerator::writeInterfaceAsyncReplyHandler(classData, *it, stream);
++ }
+ }
+
+ static void writeMethodCalls(const Class& classData, QTextStream& stream)
+@@ -615,6 +733,15 @@
+ QValueList<Method>::const_iterator endIt = classData.methods.end();
+ for (; it != endIt; ++it)
+ {
++ if ((*it).async) continue;
++
++ MethodGenerator::writeMethodCall(classData, *it, stream);
++ }
++
++ it = classData.asyncMethods.begin();
++ endIt = classData.asyncMethods.end();
++ for (; it != endIt; ++it)
++ {
+ MethodGenerator::writeMethodCall(classData, *it, stream);
+ }
+ }
+@@ -625,6 +752,15 @@
+ QValueList<Method>::const_iterator endIt = classData.methods.end();
+ for (; it != endIt; ++it)
+ {
++ if ((*it).async) continue;
++
++ MethodGenerator::writeProxyMethod(classData.name, *it, stream);
++ }
++
++ it = classData.asyncMethods.begin();
++ endIt = classData.asyncMethods.end();
++ for (; it != endIt; ++it)
++ {
+ MethodGenerator::writeProxyMethod(classData.name, *it, stream);
+ }
+ }
+@@ -643,6 +779,121 @@
+ }
+ }
+
++static void splitAsyncProxyMethods(Class& classData)
++{
++ // create the async identifier
++ Argument idArgMethod;
++ idArgMethod.name = "asyncCallId";
++ idArgMethod.signature = "int";
++ idArgMethod.isPrimitive = true;
++ idArgMethod.direction = Argument::Out;
++
++ Argument idArgSignal = idArgMethod;
++ idArgSignal.direction = Argument::In;
++
++ QValueList<Method>::iterator it = classData.methods.begin();
++ QValueList<Method>::iterator endIt = classData.methods.end();
++ for (; it != endIt; ++it)
++ {
++ if (!(*it).async) continue;
++
++ Method method = *it;
++
++ QValueList<Argument> methodArgs;
++ QValueList<Argument> signalArgs;
++
++ // add id argument
++ methodArgs << idArgMethod;
++ signalArgs << idArgSignal;
++
++ // split in/out arguments: "in" belong to the method, "out" to the new signal
++ QValueList<Argument>::const_iterator argIt = method.arguments.begin();
++ QValueList<Argument>::const_iterator argEndIt = method.arguments.end();
++ for (; argIt != argEndIt; ++argIt)
++ {
++ if ((*argIt).direction == Argument::Out)
++ {
++ // signal parameters are "out" but have "in" signature,
++ // e.g. "const T&"
++ Argument arg = *argIt;
++ arg.direction = Argument::In;
++
++ signalArgs << arg;
++ }
++ else
++ methodArgs << *argIt;
++ }
++
++ // change method
++ method.arguments = methodArgs;
++
++ classData.asyncMethods << method;
++
++ // create "callback" signal
++ Method signal = method;
++ signal.arguments = signalArgs;
++
++ classData.asyncReplySignals << signal;
++ }
++}
++
++static void splitAsyncInterfaceMethods(Class& classData)
++{
++ // create the async identifier
++ Argument idArgMethod;
++ idArgMethod.name = "asyncCallId";
++ idArgMethod.signature = "int";
++ idArgMethod.isPrimitive = true;
++ idArgMethod.direction = Argument::In;
++
++ Argument idArgReply = idArgMethod;
++
++ QValueList<Method>::iterator it = classData.methods.begin();
++ QValueList<Method>::iterator endIt = classData.methods.end();
++ for (; it != endIt; ++it)
++ {
++ if (!(*it).async) continue;
++
++ Method method = *it;
++
++ QValueList<Argument> methodArgs;
++ QValueList<Argument> replyArgs;
++
++ // add id argument
++ methodArgs << idArgMethod;
++ replyArgs << idArgReply;
++
++ // split in/out arguments: "in" belong to the call, "out" to the reply
++ QValueList<Argument>::const_iterator argIt = method.arguments.begin();
++ QValueList<Argument>::const_iterator argEndIt = method.arguments.end();
++ for (; argIt != argEndIt; ++argIt)
++ {
++ if ((*argIt).direction == Argument::Out)
++ {
++ // reply parameters are "out" for the service but "in" for
++ // the reply handler
++ Argument arg = *argIt;
++ arg.direction = Argument::In;
++
++ replyArgs << arg;
++ }
++ else
++ methodArgs << *argIt;
++ }
++
++ // change method
++ method.arguments = methodArgs;
++
++ classData.asyncMethods << method;
++
++ // create reply handler
++ Method reply = method;
++ reply.arguments = replyArgs;
++
++ classData.asyncReplyMethods << reply;
++ }
++}
++
+ bool ClassGenerator::initStreams(const QString& baseName,
+ QTextStream& headerStream,
+ QTextStream& sourceStream)
+@@ -680,7 +931,6 @@
+ {
+ closeIncludeGuard(baseName, headerStream);
+ writeFileFooter(headerStream);
+-
+ writeFileFooter(sourceStream);
+
+ QIODevice* device = headerStream.device();
+@@ -717,33 +967,36 @@
+ QTextStream& headerStream,
+ QTextStream& sourceStream)
+ {
++ Class classDataCopy = classData;
++ splitAsyncInterfaceMethods(classDataCopy);
++
+ // create header
+- writeHeaderIncludes(classData, Class::Interface, headerStream);
++ writeHeaderIncludes(classDataCopy, Class::Interface, headerStream);
+
+- openNamespaces(classData.namespaces, headerStream);
+- openClassDeclaration(classData, Class::Interface, headerStream);
++ openNamespaces(classDataCopy.namespaces, headerStream);
++ openClassDeclaration(classDataCopy, Class::Interface, headerStream);
+
+- writeSignalDeclarations(classData, Class::Interface, headerStream);
+- writeMethodDeclarations(classData, Class::Interface, headerStream);
+- writeMethodCallDeclarations(classData, headerStream);
++ writeSignalDeclarations(classDataCopy, Class::Interface, headerStream);
++ writeMethodDeclarations(classDataCopy, Class::Interface, headerStream);
++ writeMethodCallDeclarations(classDataCopy, headerStream);
+
+- closeClassDeclaration(classData, Class::Interface, headerStream);
+- closeNamespaces(classData.namespaces, headerStream);
++ closeClassDeclaration(classDataCopy, Class::Interface, headerStream);
++ closeNamespaces(classDataCopy.namespaces, headerStream);
+
+ // create source
+- writeSourceIncludes(classData, Class::Interface, sourceStream);
+-
+- openNamespaces(classData.namespaces, sourceStream);
++ writeSourceIncludes(classDataCopy, Class::Interface, sourceStream);
+
+- MethodGenerator::writeIntrospectionDataMethod(classData, sourceStream);
++ openNamespaces(classDataCopy.namespaces, sourceStream);
+
+- writeSignalEmitters(classData, sourceStream);
++ MethodGenerator::writeIntrospectionDataMethod(classDataCopy, sourceStream);
+
+- writeMethodCalls(classData, sourceStream);
++ writeSignalEmitters(classDataCopy, sourceStream);
++ writeInterfaceAsyncReplyHandlers(classDataCopy, sourceStream);
++ writeMethodCalls(classDataCopy, sourceStream);
+
+- MethodGenerator::writeInterfaceMainMethod(classData, sourceStream);
++ MethodGenerator::writeInterfaceMainMethod(classDataCopy, sourceStream);
+
+- closeNamespaces(classData.namespaces, sourceStream);
++ closeNamespaces(classDataCopy.namespaces, sourceStream);
+
+ return true;
+ }
+@@ -752,33 +1005,39 @@
+ QTextStream& headerStream,
+ QTextStream& sourceStream)
+ {
++ Class classDataCopy = classData;
++ splitAsyncProxyMethods(classDataCopy);
++
+ // create header
+- writeHeaderIncludes(classData, Class::Proxy, headerStream);
++ writeHeaderIncludes(classDataCopy, Class::Proxy, headerStream);
+
+- openNamespaces(classData.namespaces, headerStream);
+- openClassDeclaration(classData, Class::Proxy, headerStream);
++ openNamespaces(classDataCopy.namespaces, headerStream);
++ openClassDeclaration(classDataCopy, Class::Proxy, headerStream);
+
+- writeSignalDeclarations(classData, Class::Proxy, headerStream);
+- writeMethodDeclarations(classData, Class::Proxy, headerStream);
++ writeSignalDeclarations(classDataCopy, Class::Proxy, headerStream);
++ writeMethodDeclarations(classDataCopy, Class::Proxy, headerStream);
+
+- closeClassDeclaration(classData, Class::Proxy, headerStream);
+- closeNamespaces(classData.namespaces, headerStream);
++ closeClassDeclaration(classDataCopy, Class::Proxy, headerStream);
++ closeNamespaces(classDataCopy.namespaces, headerStream);
+
+ // create source
+- writeSourceIncludes(classData, Class::Proxy, sourceStream);
++ writeSourceIncludes(classDataCopy, Class::Proxy, sourceStream);
+
+- openNamespaces(classData.namespaces, sourceStream);
++ openNamespaces(classDataCopy.namespaces, sourceStream);
+
+- MethodGenerator::writeProxyBegin(classData, sourceStream);
++ MethodGenerator::writeProxyBegin(classDataCopy, sourceStream);
+
+- writeProxyMethods(classData, sourceStream);
++ writeProxyMethods(classDataCopy, sourceStream);
+
+- writeProxyProperties(classData, sourceStream);
++ writeProxyProperties(classDataCopy, sourceStream);
+
+- if (!classData.signals.isEmpty())
+- MethodGenerator::writeSignalHandler(classData, sourceStream);
++ if (!classDataCopy.signals.isEmpty())
++ MethodGenerator::writeSignalHandler(classDataCopy, sourceStream);
+
+- closeNamespaces(classData.namespaces, sourceStream);
++ if (!classDataCopy.asyncReplySignals.isEmpty())
++ MethodGenerator::writeProxyAsyncReplyHandler(classDataCopy, sourceStream);
++
++ closeNamespaces(classDataCopy.namespaces, sourceStream);
+
+ return true;
+ }
+@@ -796,7 +1055,6 @@
+
+ closeClassDeclaration(classData, Class::Node, headerStream);
+ closeNamespaces(classData.namespaces, headerStream);
+- closeIncludeGuard(classData.name, headerStream);
+
+ // create source
+ writeSourceIncludes(classData, Class::Node, sourceStream);
+diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/main.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/main.cpp
+--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/main.cpp 2007-12-17 12:34:08.000000000 +0100
++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/main.cpp 2008-03-13 10:28:54.000000000 +0100
+@@ -153,12 +153,16 @@
+ exit(3);
+ }
+
+- QStringList nameParts = QStringList::split("::", options["classname"]);
++ // class name for node is handled differently later on
++ if (!generateNode)
++ {
++ QStringList nameParts = QStringList::split("::", options["classname"]);
+
+- interfaces[0].name = nameParts.back();
++ interfaces[0].name = nameParts.back();
+
+- nameParts.pop_back();
+- interfaces[0].namespaces = nameParts;
++ nameParts.pop_back();
++ interfaces[0].namespaces = nameParts;
++ }
+ }
+
+ if (checkForOption(options, "namespace"))
+@@ -284,6 +288,7 @@
+ Method method;
+ method.name = "Introspect";
+ method.noReply = false;
++ method.async = false;
+
+ Argument argument;
+ argument.name = "data";
+diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.cpp
+--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.cpp 2007-12-17 12:34:08.000000000 +0100
++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.cpp 2008-03-13 10:28:54.000000000 +0100
+@@ -279,6 +279,24 @@
+ return annotations;
+ }
+
++static bool hasAnnotation(const QDomElement& element, const QString& annotation, QString* value = 0)
++{
++ for (QDomNode node = element.firstChild(); !node.isNull();
++ node = node.nextSibling())
++ {
++ if (!node.isElement()) continue;
++
++ QDomElement childElement = node.toElement();
++ if (childElement.tagName() != "annotation") continue;
++ if (childElement.attribute("name") != annotation) continue;
++
++ if (value != 0) *value = childElement.attribute("value");
++ return true;
++ }
++
++ return false;
++}
++
+ static QValueList<Argument> extractArguments(const QDomElement& methodElement,
+ Class& classData)
+ {
+@@ -568,9 +586,13 @@
+ method.name = element.attribute("name");
+ method.arguments = extractArguments(element, classData);
+ method.noReply = false;
++ method.async = false;
+
+ if (element.tagName() == "method")
++ {
++ method.async = hasAnnotation(element, "org.freedesktop.DBus.GLib.Async");
+ classData.methods.append(method);
++ }
+ else
+ classData.signals.append(method);
+ }
+@@ -689,36 +711,85 @@
+ void MethodGenerator::writeMethodCallDeclaration(const Method& method,
+ QTextStream& stream)
+ {
+- stream << "QDBusMessage call" << method.name
+- << "(const QDBusMessage& mesage);" << endl;
++ if (method.async)
++ stream << "void call" << method.name << "Async";
++ else
++ stream << "QDBusMessage call" << method.name;
++
++ stream << "(const QDBusMessage& message);" << endl;
+ stream << endl;
+ }
+
+ void MethodGenerator::writeMethodCall(const Class& classData,
+ const Method& method, QTextStream& stream)
+ {
+- stream << "QDBusMessage " << classData.name << "::call" << method.name
+- << "(const QDBusMessage& message)" << endl;;
++ if (method.async)
++ stream << "void " << classData.name << "::call" << method.name << "Async";
++ else
++ stream << "QDBusMessage " << classData.name << "::call" << method.name;
++
++ stream << "(const QDBusMessage& message)" << endl;
+
+ stream << "{" << endl;
+- stream << " QDBusError error;" << endl;
+- stream << " QDBusMessage reply;" << endl;
+- stream << endl;
+
+- writeVariables(" ", method, stream);
++ if (method.async)
++ {
++ // FIXME: using writeVariables by removing asyncCallId argument
++ Method reducedMethod = method;
++ reducedMethod.arguments.pop_front();
++
++ writeVariables(" ", reducedMethod, stream);
++ }
++ else
++ {
++ stream << " QDBusError error;" << endl;
++ stream << " QDBusMessage reply;" << endl;
++ stream << endl;
++
++ writeVariables(" ", method, stream);
++ }
+
+ stream << endl;
+- stream << " if (" << method.name << "(";
++
++ if (method.async)
++ {
++ stream << " int _asyncCallId = 0;" << endl;
++ stream << " while (m_asyncCalls.find(_asyncCallId) != m_asyncCalls.end())"
++ << endl;
++ stream << " {" << endl;
++ stream << " ++_asyncCallId;" << endl;
++ stream << " }" << endl;
++ stream << " m_asyncCalls.insert(_asyncCallId, message);" << endl;
++ stream << endl;
++
++ stream << " " << method.name << "Async(";
++ }
++ else
++ stream << " if (" << method.name << "(";
+
+ QValueList<Argument>::const_iterator it = method.arguments.begin();
+ QValueList<Argument>::const_iterator endIt = method.arguments.end();
+- for (; it != endIt; ++it)
++ while (it != endIt)
+ {
+- stream << "_" << (*it).name << ", ";
++ stream << "_" << (*it).name;
++
++ ++it;
++ if (it != endIt) stream << ", ";
+ }
+
+- stream << "error))" << endl;
++ if (method.async)
++ {
++ stream << ");" << endl;
++ stream << endl;
++
++ stream << " return;" << endl;
++ stream << "}" << endl;
++ stream << endl;
++ return;
++ }
+
++ if (method.arguments.count() > 0) stream << ", ";
++ stream << "error))" << endl;
+
+ stream << " {" << endl;
+ stream << " reply = QDBusMessage::methodReply(message);" << endl;
+@@ -878,6 +949,102 @@
+ stream << endl;
+ }
+
++
++void MethodGenerator::writeInterfaceAsyncReplyHandler(const Class& classData,
++ const Method& method, QTextStream& stream)
++{
++ stream << "void " << classData.name << "::" << method.name
++ << "AsyncReply(";
++
++ QValueList<Argument>::const_iterator it = method.arguments.begin();
++ QValueList<Argument>::const_iterator endIt = method.arguments.end();
++ while (it != endIt)
++ {
++ if (!(*it).isPrimitive && (*it).direction == Argument::In)
++ stream << "const ";
++
++ stream << (*it).signature;
++
++ if (!(*it).isPrimitive || (*it).direction == Argument::Out) stream << "&";
++
++ stream << " " << (*it).name;
++
++ ++it;
++ if (it != endIt) stream << ", ";
++ }
++ stream << ")" << endl;
++ stream << endl;
++ stream << "{" << endl;
++
++ stream << " QMap<int, QDBusMessage>::iterator findIt = m_asyncCalls.find(asyncCallId);" << endl;
++ stream << " if (findIt == m_asyncCalls.end()) return;" << endl;
++ stream << endl;
++
++ stream << " QDBusMessage call = findIt.data();" << endl;
++ stream << " m_asyncCalls.erase(findIt);" << endl;
++ stream << endl;
++
++ stream << " QDBusMessage reply = QDBusMessage::methodReply(call);"
++ << endl;
++
++ it = method.arguments.begin();
++ for (++it; it != endIt; ++it) // skip asyncCallId at beginning
++ {
++ if (!(*it).annotatedType.isEmpty())
++ {
++ stream << " QDBusData " << (*it).name << "Data;" << endl;
++
++ // TODO error handling
++ stream << " if (QDBusDataConverter::convertToQDBusData<"
++ << (*it).annotatedType << ">(" << (*it).name << ", "
++ << (*it).name << "Data"
++ << ") != QDBusDataConverter::Success) return false;"
++ << endl;
++ stream << " reply << " << (*it).name << "Data;" << endl;
++ }
++ else if (!(*it).accessor.isEmpty())
++ {
++ stream << " reply << QDBusData::from" << (*it).accessor << "(";
++
++ if ((*it).subAccessor.isEmpty())
++ stream << (*it).name;
++ else
++ stream << (*it).containerClass << "(" << (*it).name << ")";
++
++ stream << ");" << endl;
++ }
++ else
++ stream << " reply << " << (*it).name << ";" << endl;
++ }
++ stream << endl;
++
++ stream << " handleMethodReply(reply);" << endl;
++
++ stream << "}" << endl;
++ stream << endl;
++
++ stream << "void " << classData.name << "::" << method.name
++ << "AsyncError(int asyncCallId, const QDBusError& error)";
++ stream << endl;
++
++ stream << "{" << endl;
++
++ stream << " QMap<int, QDBusMessage>::iterator findIt = m_asyncCalls.find(asyncCallId);" << endl;
++ stream << " if (findIt == m_asyncCalls.end()) return;" << endl;
++ stream << endl;
++
++ stream << " QDBusMessage call = findIt.data();" << endl;
++ stream << " m_asyncCalls.erase(findIt);" << endl;
++ stream << endl;
++
++ stream << " QDBusMessage reply = QDBusMessage::methodError(call, error);"
++ << endl;
++ stream << " handleMethodReply(reply);" << endl;
++
++ stream << "}" << endl;
++ stream << endl;
++}
++
+ void MethodGenerator::writeInterfaceMainMethod(const Class& classData,
+ QTextStream& stream)
+ {
+@@ -897,10 +1064,19 @@
+ {
+ stream << " if (message.member() == \"" << (*it).name << "\")" << endl;
+ stream << " {" << endl;
+- stream << " QDBusMessage reply = call" << (*it).name << "(message);"
+- << endl;
+- stream << " handleMethodReply(reply);" << endl;
+- stream << endl;
++
++ if ((*it).async)
++ {
++ stream << " call" << (*it).name << "Async(message);" << endl;
++ stream << endl;
++ }
++ else
++ {
++ stream << " QDBusMessage reply = call" << (*it).name
++ << "(message);" << endl;
++ stream << " handleMethodReply(reply);" << endl;
++ stream << endl;
++ }
+ stream << " return true;" << endl;
+ stream << " }" << endl;
+ stream << endl;
+@@ -967,6 +1143,15 @@
+ << endl;
+ }
+
++ if (!classData.asyncReplySignals.isEmpty())
++ {
++ stream << " QObject::connect(m_baseProxy, "
++ << "SIGNAL(asyncReply(int, const QDBusMessage&))," << endl;
++ stream << " this, "
++ << " SLOT(slotHandleAsyncReply(int, const QDBusMessage&)));"
++ << endl;
++ }
++
+ stream << "}" << endl;
+
+ stream << endl;
+@@ -988,7 +1173,8 @@
+ void MethodGenerator::writeProxyMethod(const QString& className,
+ const Method& method, QTextStream& stream)
+ {
+- stream << "bool " << className << "::" << method.name << "(";
++ stream << "bool " << className << "::" << method.name
++ << (method.async ? "Async(" : "(");
+
+ QValueList<Argument>::const_iterator it = method.arguments.begin();
+ QValueList<Argument>::const_iterator endIt = method.arguments.end();
+@@ -1064,6 +1250,22 @@
+ return;
+ }
+
++ if (method.async)
++ {
++ stream << " asyncCallId = m_baseProxy->sendWithAsyncReply(\"";
++ stream << method.name << "\", parameters);" << endl;
++ stream << endl;
++
++ stream << " if (asyncCallId != 0) m_asyncCalls[asyncCallId] = \""
++ << method.name << "\";" << endl;
++ stream << endl;
++
++ stream << " return (asyncCallId != 0);" << endl;
++ stream << "}" << endl;
++ stream << endl;
++ return;
++ }
++
+ stream << " QDBusMessage reply = m_baseProxy->sendWithReply(\"";
+ stream << method.name << "\", parameters, &error);" << endl;
+ stream << endl;
+@@ -1335,6 +1537,58 @@
+ }
+ }
+
++void MethodGenerator::writeProxyAsyncReplyHandler(const Class& classData,
++ QTextStream& stream)
++{
++ stream << "void " << classData.name
++ << "::slotHandleAsyncReply(int asyncCallId, const QDBusMessage& message)" << endl;
++ stream << "{" << endl;
++
++ stream << " QMap<int, QString>::iterator findIt = "
++ << "m_asyncCalls.find(asyncCallId);" << endl;
++ stream << " if (findIt == m_asyncCalls.end()) return;" << endl;
++ stream << endl;
++ stream << " const QString signalName = findIt.data();" << endl;
++ stream << " m_asyncCalls.erase(findIt);" << endl;
++ stream << endl;
++
++ QValueList<Method>::const_iterator it = classData.asyncReplySignals.begin();
++ QValueList<Method>::const_iterator endIt = classData.asyncReplySignals.end();
++ bool first = true;
++ for (; it != endIt; ++it)
++ {
++ stream << " ";
++
++ if (!first)
++ stream << "else ";
++ else
++ first = false;
++
++ stream << "if (signalName == \"" << (*it).name << "\")" << endl;
++ stream << " {" << endl;
++
++ // FIXME tricking writeVariables and writeSignalEmit into writing
++ // the reply emit code by manipulating arguments and name
++ stream << " int _asyncCallId = asyncCallId;" << endl;
++
++ Method signal = *it;
++ signal.arguments.pop_front();
++
++ writeVariables(" ", signal, stream);
++ stream << endl;
++
++ signal = *it;
++ signal.name += "AsyncReply";
++
++ writeSignalEmit(signal, stream);
++
++ stream << " }" << endl;
++ }
++
++ stream << "}" << endl;
++ stream << endl;
++}
++
+ void MethodGenerator::writeIntrospectionDataMethod(const Class& classData,
+ QTextStream& stream)
+ {
+diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.h ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.h
+--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.h 2007-12-17 12:34:08.000000000 +0100
++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.h 2008-03-13 10:28:55.000000000 +0100
+@@ -61,6 +61,7 @@
+ QString name;
+ QValueList<Argument> arguments;
+ bool noReply;
++ bool async;
+ };
+
+ class Property : public Argument
+@@ -86,6 +87,10 @@
+ QValueList<Method> methods;
+ QValueList<Method> signals;
+ QValueList<Property> properties;
++
++ QValueList<Method> asyncMethods;
++ QValueList<Method> asyncReplySignals;
++ QValueList<Method> asyncReplyMethods;
+ };
+
+ class MethodGenerator
+@@ -109,6 +114,10 @@
+ static void writeSignalEmitter(const Class& classData, const Method& method,
+ QTextStream& stream);
+
++ static void writeInterfaceAsyncReplyHandler(const Class& classData,
++ const Method& method,
++ QTextStream& stream);
++
+ static void writeInterfaceMainMethod(const Class& classData,
+ QTextStream& stream);
+
+@@ -125,6 +134,9 @@
+ static void writeProxyProperty(const Class& classData, const Property& property,
+ QTextStream& stream);
+
++ static void writeProxyAsyncReplyHandler(const Class& classData,
++ QTextStream& stream);
++
+ static void writeIntrospectionDataMethod(const Class& classData,
+ QTextStream& stream);
+
diff --git a/opensuse/libdbus-1-tqt-0/r795238.patch b/opensuse/libdbus-1-tqt-0/r795238.patch
new file mode 100644
index 000000000..3213c823d
--- /dev/null
+++ b/opensuse/libdbus-1-tqt-0/r795238.patch
@@ -0,0 +1,60 @@
+Index: dbus/qdbusdatamap.h
+===================================================================
+--- dbus/qdbusdatamap.h (Revision 785103)
++++ dbus/qdbusdatamap.h (Revision 795238)
+@@ -173,7 +173,7 @@
+ }
+ else if (hasContainerValueType())
+ {
+- if (it.data()->buildSignature() != containerSignature)
++ if (it.data().buildDBusSignature() != containerSignature)
+ {
+ m_valueType = QDBusData::Invalid;
+ m_containerValueType = QDBusData();
+Index: dbus/qdbuserror.h
+===================================================================
+--- dbus/qdbuserror.h (Revision 785103)
++++ dbus/qdbuserror.h (Revision 795238)
+@@ -119,7 +119,7 @@
+ * Returned by QDBusConnection's addConnection if the specified address
+ * isn't a valid D-Bus bus address.
+ *
+- * @see QDBusConnection:::addConnection(const QString&,const QString&);
++ * @see QDBusConnection::addConnection(const QString&,const QString&);
+ */
+ BadAddress,
+
+Index: tools/dbusxml2qt3/classgen.cpp
+===================================================================
+--- tools/dbusxml2qt3/classgen.cpp (Revision 785103)
++++ tools/dbusxml2qt3/classgen.cpp (Revision 795238)
+@@ -168,6 +168,17 @@
+ extractForwardDeclarations(*it, forwards);
+ }
+
++ it = classData.signals.begin();
++ endIt = classData.signals.end();
++ for (; it != endIt; ++it)
++ {
++ if ((*it).arguments.isEmpty()) continue;
++
++ extractHeaderIncludes(*it, includes);
++ extractForwardDeclarations(*it, forwards);
++ }
++
++
+ QValueList<Property>::const_iterator propertyIt = classData.properties.begin();
+ QValueList<Property>::const_iterator propertyEndIt = classData.properties.end();
+ for (; propertyIt != propertyEndIt; ++propertyIt)
+Index: dbus-1-qt3.pc.in
+===================================================================
+--- dbus-1-qt3.pc.in (Revision 785103)
++++ dbus-1-qt3.pc.in (Revision 795238)
+@@ -1,6 +1,6 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+-libdir=${prefix}/lib
++libdir=@libdir@
+ includedir=${prefix}/include/dbus-1.0/qt3
+
+ Name: dbus-1-qt3
diff --git a/opensuse/tde-filesystem/macros.tde b/opensuse/tde-filesystem/macros.tde
index 529d1dfb6..44a3a46fb 100644
--- a/opensuse/tde-filesystem/macros.tde
+++ b/opensuse/tde-filesystem/macros.tde
@@ -63,6 +63,7 @@
      -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\
      -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\
-DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\
+ -DMAN_INSTALL_DIR=%{_mandir} \\\
$bdir %* \
%{nil}
diff --git a/opensuse/tdelibs/10888-bt.tar.gz b/opensuse/tdelibs/10888-bt.tar.gz
new file mode 100644
index 000000000..8c94be571
--- /dev/null
+++ b/opensuse/tdelibs/10888-bt.tar.gz
Binary files differ
diff --git a/opensuse/tdelibs/3_5_BRANCH.diff b/opensuse/tdelibs/3_5_BRANCH.diff
new file mode 100644
index 000000000..6809b8aea
--- /dev/null
+++ b/opensuse/tdelibs/3_5_BRANCH.diff
@@ -0,0 +1,126 @@
+package: kdelibs-3.5.10.tar.bz2
+kdemod: kdelibs
+Index: BRANCH_STATUS
+===================================================================
+--- /dev/null
++++ BRANCH_STATUS
+@@ -0,0 +1,2 @@
++current HEAD: 859452
++svn di between //tags/KDE/3.5.10/kdelibs and //branches/KDE/3.5/kdelibs
+Index: kinit/start_kdeinit.c
+===================================================================
+--- kinit/start_kdeinit.c.orig
++++ kinit/start_kdeinit.c
+@@ -44,7 +44,7 @@ static int set_protection( pid_t pid, in
+ {
+ char buf[ 1024 ];
+ int procfile;
+- sprintf( buf, "/proc/%d/oom_adj", pid );
++ sprintf( buf, "/proc/%d/stat", pid );
+ if( !enable ) {
+ /* Be paranoid and check that the pid we got from the pipe
+ belongs to this user. */
+@@ -52,6 +52,7 @@ static int set_protection( pid_t pid, in
+ if( lstat( buf, &st ) < 0 || st.st_uid != getuid())
+ return 0;
+ }
++ sprintf( buf, "/proc/%d/oom_adj", pid );
+ procfile = open( buf, O_WRONLY );
+ if( procfile >= 0 ) {
+ if( enable )
+Index: kio/kio/configure.in.in
+===================================================================
+--- kio/kio/configure.in.in.orig
++++ kio/kio/configure.in.in
+@@ -139,8 +139,30 @@ if test "x$kde_enable_inotify" = "xyes";
+ AC_LANG_RESTORE
+ ])
+
+- if test "$kde_cv_have_inotify" = "yes" ; then
++ AC_CACHE_VAL(kde_cv_have_sys_inotify,
++ [
++ kde_cv_have_sys_inotify=no
++ AC_LANG_SAVE
++ AC_LANG_C
++
++ AC_TRY_COMPILE(
++ [
++#include <sys/inotify.h>
++ ],
++ [
++#ifndef IN_ALL_EVENTS
++#error no inotify notification
++#endif
++ ],kde_cv_have_sys_inotify=yes,kde_cv_have_sys_inotify=no)
++
++ AC_LANG_RESTORE
++ ])
++
++ if test "$kde_cv_have_inotify" = "yes" -o "$kde_cv_have_sys_inotify" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_INOTIFY, 1, [Define if your system has Linux Inode Notification])
++ if test "$kde_cv_have_sys_inotify" = "yes"; then
++ AC_DEFINE_UNQUOTED(HAVE_SYS_INOTIFY, 1, [Define if your system has glibc support for inotify])
++ fi
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+Index: kio/kio/kdirwatch.cpp
+===================================================================
+--- kio/kio/kdirwatch.cpp.orig
++++ kio/kio/kdirwatch.cpp
+@@ -64,11 +64,13 @@
+ // debug
+ #include <sys/ioctl.h>
+
+-#ifdef HAVE_INOTIFY
++#ifdef HAVE_SYS_INOTIFY
++#include <sys/inotify.h>
++#include <fcntl.h>
++#elif HAVE_INOTIFY
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/syscall.h>
+-#include <linux/types.h>
+ // Linux kernel headers are documented to not compile
+ #define _S390_BITOPS_H
+ #include <linux/inotify.h>
+@@ -87,7 +89,9 @@ static inline int inotify_rm_watch (int
+ {
+ return syscall (__NR_inotify_rm_watch, fd, wd);
+ }
++#endif
+
++#ifdef HAVE_INOTIFY
+ #ifndef IN_ONLYDIR
+ #define IN_ONLYDIR 0x01000000
+ #endif
+@@ -99,7 +103,6 @@ static inline int inotify_rm_watch (int
+ #ifndef IN_MOVE_SELF
+ #define IN_MOVE_SELF 0x00000800
+ #endif
+-
+ #endif
+
+ #include <sys/utsname.h>
+Index: kdoctools/customization/pt-BR/user.entities
+===================================================================
+--- kdoctools/customization/pt-BR/user.entities.orig
++++ kdoctools/customization/pt-BR/user.entities
+@@ -17,7 +17,7 @@
+ <!ENTITY Esc "<keycap>Esc</keycap>">
+ <!ENTITY etc "<abbrev>etc</abbrev>">
+ <!ENTITY ex "<abbrev>por exemplo</abbrev>">
+-<!ENTITY FAQ "Perguntas Mais Freqüentes (do inglês <acronym>FAQ</acronym>)">
++<!ENTITY FAQ "Perguntas mais freqüentes (do inglês <acronym>FAQ</acronym>)">
+ <!ENTITY HTML '<acronym>HTML</acronym>'>
+ <!ENTITY ie "isto é">
+ <!ENTITY infocenter "<application>Centro de Informações</application>">
+@@ -34,7 +34,7 @@
+ <!ENTITY LMB "botão <mousebutton>esquerdo</mousebutton> do mouse">
+ <!ENTITY MMB "botão do <mousebutton>meio</mousebutton> do mouse">
+ <!ENTITY OS "<acronym>Sistema Operacional</acronym>">
+-<!ENTITY RMB "botão <mousebutton>direto</mousebutton> do mouse">
++<!ENTITY RMB "botão <mousebutton>direito</mousebutton> do mouse">
+ <!ENTITY Shift "<keycap>Shift</keycap>">
+ <!ENTITY systemtray "<application>bandeja do sistema</application>">
+ <!ENTITY Tab "<keycap>Tab</keycap>">
diff --git a/opensuse/tdelibs/CATALOG.kdelibs3.diff b/opensuse/tdelibs/CATALOG.kdelibs3.diff
new file mode 100644
index 000000000..5fac7cf92
--- /dev/null
+++ b/opensuse/tdelibs/CATALOG.kdelibs3.diff
@@ -0,0 +1,139 @@
+Index: kdelibs-3.5.10/CATALOG.kdelibs3
+===================================================================
+--- /dev/null
++++ kdelibs-3.5.10/CATALOG.kdelibs3
+@@ -0,0 +1,134 @@
++--
++Catalogue for KDE DocBook XML
++
++Copyright (C) 2001,2002 Frederik Fouvry
++
++This program is free software; you can redistribute it and/or
++modify it under the terms of the GNU General Public License
++as published by the Free Software Foundation; either version 2
++of the License, or (at your option) any later version.
++
++This program 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 General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with this program; if not, write to the Free Software
++Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA.
++
++Send suggestions, comments, etc. to the KDE DocBook mailing list
++<kde-docbook@kde.org>.
++--
++
++OVERRIDE YES
++-- SGMLDECL "xml.dcl" --
++DTDDECL "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" /usr/share/sgml/opensp/xml.dcl
++DTDDECL "-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN" /usr/share/sgml/opensp/xml.dcl
++DTDDECL "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN" /usr/share/sgml/opensp/xml.dcl
++DTDDECL "-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN" /usr/share/sgml/opensp/xml.dcl
++DTDDECL "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN" /usr/share/sgml/opensp/xml.dcl
++DTDDECL "-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN" /usr/share/sgml/opensp/xml.dcl
++DTDDECL "-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN" /usr/share/sgml/opensp/xml.dcl
++
++ -- DocBook --
++
++-- DocBook 4.2 KDE Variant V1.1 --
++
++PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
++ "dtd/kdex.dtd"
++PUBLIC "-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN"
++ "dtd/rdbhier2.elements"
++PUBLIC "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN"
++ "dtd/rdbpool.elements"
++PUBLIC "-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN"
++ "dtd/modifications.elements"
++
++PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN"
++ "entities/general.entities"
++PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN"
++ "entities/contributor.entities"
++
++ -- General KDE Entities --
++
++PUBLIC "-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN"
++ "entities/l10n.entities"
++
++ -- Various external files --
++
++-- only DocBook XML files are in entities, the others are in
++ kdelibs/doc/common or in kdelibs/licenses --
++
++PUBLIC "-//GNU//DOCUMENT GNU General Public License V2//EN"
++ "entities/gpl-license"
++PUBLIC "-//GNU//DOCUMENT GNU Lesser General Public License V2.1//EN"
++ "entities/lgpl-license"
++PUBLIC "-//GNU//DOCUMENT GNU Free Documentation License V1.1//EN"
++ "entities/fdl-license"
++PUBLIC "-//KDE//DOCUMENT X11 License//EN"
++ "entities/x11-license"
++PUBLIC "-//KDE//DOCUMENT BSD License//EN"
++ "entities/bsd-license"
++PUBLIC "-//KDE//DOCUMENT Artistic License//EN"
++ "entities/artistic-license"
++
++CATALOG af/catalog
++CATALOG bg/catalog
++CATALOG ca/catalog
++CATALOG cs/catalog
++CATALOG da/catalog
++CATALOG de/catalog
++CATALOG el/catalog
++CATALOG en/catalog
++CATALOG en-GB/catalog
++CATALOG es/catalog
++CATALOG et/catalog
++CATALOG fi/catalog
++CATALOG fo/catalog
++CATALOG fr/catalog
++CATALOG he/catalog
++CATALOG hu/catalog
++CATALOG id/catalog
++CATALOG it/catalog
++CATALOG ja/catalog
++CATALOG ko/catalog
++CATALOG lt/catalog
++CATALOG nl/catalog
++CATALOG no/catalog -- considered to be the same as nb --
++CATALOG nn/catalog -- incorrectly known as no_NY --
++CATALOG pl/catalog
++CATALOG pt-BR/catalog
++CATALOG pt/catalog
++CATALOG ro/catalog
++CATALOG ru/catalog
++CATALOG sk/catalog
++CATALOG sl/catalog
++CATALOG sr/catalog
++CATALOG sv/catalog
++CATALOG tr/catalog
++CATALOG uk/catalog
++CATALOG wa/catalog
++CATALOG xh/catalog
++CATALOG zh-CN/catalog
++CATALOG zh-TW/catalog
++
++-- DocBook 4.1.2 KDE Variant V1.1 --
++
++PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN"
++ "obsolete/kdex.dtd"
++PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.1//EN"
++ "obsolete/general.entities"
++PUBLIC "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.0//EN"
++ "obsolete/rdbpool.elements"
++PUBLIC "-//KDE//ELEMENTS DocBook XML Modifications V1.0//EN"
++ "obsolete/modifications.elements"
++
++-- DocBook 4.1.2 KDE Variant V1.0 --
++
++PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN"
++ "obsolete/kdex-412-10.dtd"
++
++-- DocBook 4.1 KDE Variant V1.0 --
++
++PUBLIC "-//KDE//DTD DocBook XML V4.1-Based Variant V1.0//EN"
++ "obsolete/kdex-412-10.dtd"
diff --git a/opensuse/tdelibs/add-suse-translations.diff b/opensuse/tdelibs/add-suse-translations.diff
new file mode 100644
index 000000000..2cb8ce8cb
--- /dev/null
+++ b/opensuse/tdelibs/add-suse-translations.diff
@@ -0,0 +1,14 @@
+Index: kdecore/klocale.cpp
+===================================================================
+--- kdecore/klocale.cpp.orig
++++ kdecore/klocale.cpp
+@@ -131,6 +131,9 @@ void KLocale::initMainCatalogues(const Q
+ d->catalogNames.append( mainCatalogue ); // application catalog
+ d->catalogNames.append( SYSTEM_MESSAGES ); // always include kdelibs.mo
+ d->catalogNames.append( "kio" ); // always include kio.mo
++ KGlobal::dirs()->addResourceDir("locale", "/usr/share/locale");
++ d->catalogNames.append( "desktop_translations" );
++ d->catalogNames.append( "susetranslations" );
+ updateCatalogues(); // evaluate this for all languages
+ }
+ }
diff --git a/opensuse/tdelibs/admin.diff b/opensuse/tdelibs/admin.diff
new file mode 100644
index 000000000..8abac2426
--- /dev/null
+++ b/opensuse/tdelibs/admin.diff
@@ -0,0 +1,55 @@
+Index: admin/acinclude.m4.in
+===================================================================
+--- admin/acinclude.m4.in.orig
++++ admin/acinclude.m4.in
+@@ -4988,6 +4988,7 @@ AC_DEFUN([KDE_SET_PREFIX_CORE],
+ fi
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
++ kde_libs_htmldir=$prefix/share/doc/HTML/
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ kde_libs_prefix='$(prefix)'
+Index: admin/detect-autoconf.pl
+===================================================================
+--- admin/detect-autoconf.pl.orig
++++ admin/detect-autoconf.pl
+@@ -216,7 +216,7 @@ $unsermake = "";
+ # backward compatible: if $UNSERMAKE points to a path, use it
+ $unsermake = findProgram('unsermake') if (defined($ENV{'UNSERMAKE'}) and $ENV{'UNSERMAKE'} =~ /\//);
+ # new compatible: if it says 'yes', use the one from path
+-$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} ne 'no');
++$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} eq 'yes');
+
+ ($automake_suffix) = $automake =~ /.*automake(.*)$/;
+
+
+--- admin/cvs.sh
++++ admin/cvs.sh
+@@ -32,7 +32,7 @@ check_autotool_versions()
+ required_autoconf_version="2.53 or newer"
+ AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1`
+ case $AUTOCONF_VERSION in
+- Autoconf*2.5* | autoconf*2.5* | autoconf*2.6* ) : ;;
++ autoconf* ) : ;;
+ "" )
+ echo "*** AUTOCONF NOT FOUND!."
+ echo "*** KDE requires autoconf $required_autoconf_version"
+@@ -47,7 +47,7 @@ esac
+
+ AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1`
+ case $AUTOHEADER_VERSION in
+- Autoconf*2.5* | autoheader*2.5* | autoheader*2.6* ) : ;;
++ autoheader* ) : ;;
+ "" )
+ echo "*** AUTOHEADER NOT FOUND!."
+ echo "*** KDE requires autoheader $required_autoconf_version"
+@@ -68,7 +68,7 @@ case $AUTOMAKE_STRING in
+ echo "*** KDE requires automake $required_automake_version"
+ exit 1
+ ;;
+- automake*1.6.* | automake*1.7* | automake*1.8* | automake*1.9* | automake*1.10*)
++ automake*)
+ echo "*** $AUTOMAKE_STRING found."
+ UNSERMAKE=no
+ ;;
diff --git a/opensuse/tdelibs/admin.tar.bz2 b/opensuse/tdelibs/admin.tar.bz2
new file mode 100644
index 000000000..7a2e55a1e
--- /dev/null
+++ b/opensuse/tdelibs/admin.tar.bz2
Binary files differ
diff --git a/opensuse/tdelibs/allow-man-setgid.diff b/opensuse/tdelibs/allow-man-setgid.diff
new file mode 100644
index 000000000..51a47d720
--- /dev/null
+++ b/opensuse/tdelibs/allow-man-setgid.diff
@@ -0,0 +1,32 @@
+Index: kdecore/kapplication.cpp
+===================================================================
+--- kdecore/kapplication.cpp.orig
++++ kdecore/kapplication.cpp
+@@ -87,6 +87,8 @@
+ #include <sys/stat.h>
+ #endif
+ #include <sys/wait.h>
++#include <grp.h>
++#include <sys/types.h>
+
+ #ifndef Q_WS_WIN
+ #include "kwin.h"
+@@ -776,10 +778,15 @@ void KApplication::init(bool GUIenabled)
+ {
+ d->guiEnabled = GUIenabled;
+ if ((getuid() != geteuid()) ||
+- (getgid() != getegid()))
++ (getgid() != getegid()) )
+ {
+- fprintf(stderr, "The KDE libraries are not designed to run with suid privileges.\n");
+- ::exit(127);
++ // man permissions are not exploitable and better than
++ // world writable directories
++ struct group *man = getgrnam("man");
++ if ( !man || man->gr_gid != getegid() ){
++ fprintf(stderr, "The KDE libraries are not designed to run with suid privileges.\n");
++ ::exit(127);
++ }
+ }
+
+ KProcessController::ref();
diff --git a/opensuse/tdelibs/api_docu_description b/opensuse/tdelibs/api_docu_description
new file mode 100644
index 000000000..8c26424dd
--- /dev/null
+++ b/opensuse/tdelibs/api_docu_description
@@ -0,0 +1,36 @@
+arts:KDE bindings for arts including knotify
+dcop:The DCOP communications library
+interfaces:Defines interfaces for common components so that new implementations can be dropped in
+kabc:Access to the KDE address book
+kate:Interfaces for the standard text editor KPart
+kdecore: Core KDE classes that are not related to the user interface
+kded:The KDE daemon interface, to observe your file system
+kdejava:The KDE Java enviroment
+kdeprint:High level printer control functionality
+kdeui:KDE User interface classes such as widgets
+kfile:High level access to the KDE network aware file abstraction
+khtml:The KDE HTML component
+kio:Low level access to network files. Also provides access to facilities such as KDirWatcher which monitors directories for changes
+kjs:Javascript (aka. ECMAScript and JScript) support
+kparts:Support for re-usable, embeddable, extendable applications
+kspell:Easy access to the spell checker
+kspell2:Easy access to the spell checker
+kdefx:A library with pixmap effects
+kssl:KDE secure socket layer interface
+kutils:High-level utils, like search/replace support
+kmdi:MultiDocument Interface library
+kresources:The KDE resources system
+kwallet:KDE password manager classes
+kdeprint:High level printer control functionality
+libkmid:Midi library
+knewstuff:Upload and download of application data
+dnssd:mDNS support library to request and register network services
+kdemm:KDE Multimedia Framework
+kcmshell:KControl module shell
+kdesu:Change user helper framework
+kdoctools:Documentation support
+kimgio:Image Handlers
+kinit:KDEinit support
+kioslave:Basic IO slaves
+kunittest:Support for unit tests
+libkscreensaver:KDE screensavers
diff --git a/opensuse/tdelibs/applications.menu-fallback.diff b/opensuse/tdelibs/applications.menu-fallback.diff
new file mode 100644
index 000000000..69450dad8
--- /dev/null
+++ b/opensuse/tdelibs/applications.menu-fallback.diff
@@ -0,0 +1,19 @@
+Index: kded/kbuildsycoca.cpp
+===================================================================
+--- kded/kbuildsycoca.cpp.orig
++++ kded/kbuildsycoca.cpp
+@@ -378,8 +378,12 @@ bool KBuildSycoca::build()
+
+ connect(g_vfolder, SIGNAL(newService(const QString &, KService **)),
+ this, SLOT(slotCreateEntry(const QString &, KService **)));
+-
+- VFolderMenu::SubMenu *kdeMenu = g_vfolder->parseMenu("applications.menu", true);
++
++ VFolderMenu::SubMenu *kdeMenu;
++ if ( QFile::exists( "/etc/xdg/menus/applications.menu" ) )
++ kdeMenu = g_vfolder->parseMenu("applications.menu", true);
++ else
++ kdeMenu = g_vfolder->parseMenu("applications.menu.kde", true);
+
+ KServiceGroup *entry = g_bsgf->addNew("/", kdeMenu->directoryFile, 0, false);
+ entry->setLayoutInfo(kdeMenu->layoutList);
diff --git a/opensuse/tdelibs/arts-acinclude.patch b/opensuse/tdelibs/arts-acinclude.patch
new file mode 100644
index 000000000..0610d6df5
--- /dev/null
+++ b/opensuse/tdelibs/arts-acinclude.patch
@@ -0,0 +1,66 @@
+2009-12-10 Stepan Kasal <skasal@redhat.com>
+
+The change of implementation of AC_REQUIRE in 2.64 caused a regression
+in the arts project.
+This can be fixed by shuffling some macro calls.
+
+I suppose that most of this patch will not be needed with a future
+release of Autoconf.
+But the last chunk of this patch is a real bug in this source and
+should go upstream.
+
+--- arts-1.5.10/admin/acinclude.m4.in 2008-08-20 18:07:05.000000000 +0200
++++ arts-1.5.10/admin/acinclude.m4.in 2009-12-09 17:30:57.000000000 +0100
+@@ -3081,8 +3081,18 @@
+ fi
+ ])
+
++AC_DEFUN([AC_CHECK_COMPILERS_CC],
++[
++ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS
++ CFLAGS=" $CFLAGS"
++ AC_PROG_CC
++ CXXFLAGS=" $CXXFLAGS"
++ AC_PROG_CXX
++])
++
+ AC_DEFUN([AC_CHECK_COMPILERS],
+ [
++ AC_REQUIRE([AC_CHECK_COMPILERS_CC])
+ AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]),
+ [
+@@ -3141,11 +3151,6 @@
+ [kde_use_profiling="no"]
+ )
+
+- dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS
+- CFLAGS=" $CFLAGS"
+-
+- AC_PROG_CC
+-
+ AC_PROG_CPP
+
+ if test "$GCC" = "yes"; then
+@@ -3174,10 +3179,6 @@
+ LDFLAGS=""
+ fi
+
+- CXXFLAGS=" $CXXFLAGS"
+-
+- AC_PROG_CXX
+-
+ KDE_CHECK_FOR_BAD_COMPILER
+
+ if test "$GXX" = "yes" || test "$CXX" = "KCC"; then
+@@ -3503,8 +3504,8 @@
+ AC_REQUIRE([AC_LIBTOOL_DLOPEN])
+ AC_REQUIRE([KDE_CHECK_LIB64])
+
+-AC_OBJEXT
+-AC_EXEEXT
++AC_REQUIRE([AC_OBJEXT])
++AC_REQUIRE([AC_EXEEXT])
+
+ AM_PROG_LIBTOOL
+ AC_LIBTOOL_CXX
diff --git a/opensuse/tdelibs/artwork.diff b/opensuse/tdelibs/artwork.diff
new file mode 100644
index 000000000..0c6742d22
--- /dev/null
+++ b/opensuse/tdelibs/artwork.diff
@@ -0,0 +1,46 @@
+Index: kdecore/eventsrc
+===================================================================
+--- kdecore/eventsrc.orig
++++ kdecore/eventsrc
+@@ -2572,7 +2572,7 @@ Comment[wa]=On messaedje critike est hå
+ Comment[zh_CN]=正在显示关键消息
+ Comment[zh_HK]=顯示嚴重警告訊息
+ Comment[zh_TW]=嚴重的警告訊息已顯示
+-default_sound=KDE_Glass_Break.ogg
++default_sound=KDE_Error_1.ogg
+ default_presentation=65
+ nopresentation=18
+ level=4
+Index: mimetypes/application/x-bittorrent.desktop
+===================================================================
+--- mimetypes/application/x-bittorrent.desktop.orig
++++ mimetypes/application/x-bittorrent.desktop
+@@ -1,4 +1,5 @@
+ [Desktop Entry]
++Icon=torrent
+ Comment=BitTorrent Download
+ Comment[af]=BitTorrent Aflaai
+ Comment[ar]=ملف تنزيل BitTorrent
+Index: mimetypes/application/x-msdos-program.desktop
+===================================================================
+--- mimetypes/application/x-msdos-program.desktop.orig
++++ mimetypes/application/x-msdos-program.desktop
+@@ -85,5 +85,5 @@ MimeType=application/x-msdos-program
+ X-KDE-IsAlso=application/x-executable
+ [Property::X-KDE-NativeExtension]
+ Type=QString
+-Value=.exe
++Value=.exe;.EXE;
+
+Index: kresources/kresources.desktop
+===================================================================
+--- kresources/kresources.desktop.orig
++++ kresources/kresources.desktop
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Exec=kcmshell kresources
+-Icon=date
++Icon=about_kde
+ Type=Application
+ Terminal=false
+
diff --git a/opensuse/tdelibs/autostart-spec.diff b/opensuse/tdelibs/autostart-spec.diff
new file mode 100644
index 000000000..a67a8e487
--- /dev/null
+++ b/opensuse/tdelibs/autostart-spec.diff
@@ -0,0 +1,55 @@
+Index: kdecore/kstandarddirs.cpp
+===================================================================
+--- kdecore/kstandarddirs.cpp.orig
++++ kdecore/kstandarddirs.cpp
+@@ -100,7 +100,7 @@ static const char* const types[] = {"htm
+ "wallpaper", "lib", "pixmap", "templates",
+ "module", "qtplugins",
+ "xdgdata-apps", "xdgdata-dirs", "xdgconf-menu",
+- "xdgdata-icon", "xdgdata-pixmap",
++ "xdgdata-icon", "xdgdata-pixmap", "xdgconf-autostart",
+ "kcfg", "emoticons", 0 };
+
+ static int tokenize( QStringList& token, const QString& str,
+@@ -1067,6 +1067,8 @@ QString KStandardDirs::kde_default(const
+ return "desktop-directories/";
+ if (!strcmp(type, "xdgconf-menu"))
+ return "menus/";
++ if (!strcmp(type, "xdgconf-autostart"))
++ return "autostart/";
+ if (!strcmp(type, "kcfg"))
+ return "share/config.kcfg";
+ if (!strcmp(type, "emoticons"))
+Index: kinit/autostart.cpp
+===================================================================
+--- kinit/autostart.cpp.orig
++++ kinit/autostart.cpp
+@@ -104,7 +104,9 @@ static bool startCondition(const QString
+ void
+ AutoStart::loadAutoStartList()
+ {
+- QStringList files = KGlobal::dirs()->findAllResources("autostart", "*.desktop", false, true);
++ QStringList files = KGlobal::dirs()->findAllResources("xdgconf-autostart", "*.desktop", false, true);
++ QStringList kdefiles = KGlobal::dirs()->findAllResources("autostart", "*.desktop", false, true);
++ files += kdefiles;
+
+ for(QStringList::ConstIterator it = files.begin();
+ it != files.end();
+@@ -129,6 +131,17 @@ AutoStart::loadAutoStartList()
+ continue;
+ }
+
++ if (config.hasKey("OnlyShowIn"))
++ {
++ if (!config.readListEntry("OnlyShowIn", ';').contains("KDE"))
++ continue;
++ }
++ if (config.hasKey("NotShowIn"))
++ {
++ if (config.readListEntry("NotShowIn", ';').contains("KDE"))
++ continue;
++ }
++
+ AutoStartItem *item = new AutoStartItem;
+ item->name = extractName(*it);
+ item->service = *it;
diff --git a/opensuse/tdelibs/avahi-pidfile.diff b/opensuse/tdelibs/avahi-pidfile.diff
new file mode 100644
index 000000000..62cd3d8da
--- /dev/null
+++ b/opensuse/tdelibs/avahi-pidfile.diff
@@ -0,0 +1,13 @@
+Index: dnssd/servicebrowser.cpp
+===================================================================
+--- dnssd/servicebrowser.cpp.orig
++++ dnssd/servicebrowser.cpp
+@@ -30,7 +30,7 @@
+ #include <dns_sd.h>
+ #endif
+
+-#define MDNSD_PID "/var/run/mdnsd.pid"
++#define MDNSD_PID "/var/run/avahi-daemon/pid"
+
+ namespace DNSSD
+ {
diff --git a/opensuse/tdelibs/baselibs.conf b/opensuse/tdelibs/baselibs.conf
new file mode 100644
index 000000000..903729278
--- /dev/null
+++ b/opensuse/tdelibs/baselibs.conf
@@ -0,0 +1,3 @@
+tdelibs
+tdelibs-arts
+tdelibs-default-style
diff --git a/opensuse/tdelibs/bnc557126.diff b/opensuse/tdelibs/bnc557126.diff
new file mode 100644
index 000000000..0782537b9
--- /dev/null
+++ b/opensuse/tdelibs/bnc557126.diff
@@ -0,0 +1,21 @@
+------------------------------------------------------------------------
+r1052100 | mueller | 2009-11-20 19:35:00 +0000 (Fri, 20 Nov 2009) | 2 lines
+Changed paths:
+ M /branches/KDE/4.3/kdelibs/kjs/dtoa.cpp
+
+fix array overrun (CVE-2009-0689)
+
+------------------------------------------------------------------------
+Index: dtoa.cpp
+===================================================================
+--- kjs/dtoa.cpp (revision 1052099)
++++ kjs/dtoa.cpp (revision 1052100)
+@@ -457,7 +457,7 @@
+ #define FREE_DTOA_LOCK(n) /*nothing*/
+ #endif
+
+-#define Kmax 15
++#define Kmax (sizeof(size_t) << 3)
+
+ struct
+ Bigint {
diff --git a/opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch b/opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch
new file mode 100644
index 000000000..f7c3ee78d
--- /dev/null
+++ b/opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch
@@ -0,0 +1,562 @@
+Index: kabc/vcardconverter.cpp
+===================================================================
+--- kabc/vcardconverter.cpp.orig
++++ kabc/vcardconverter.cpp
+@@ -51,6 +51,14 @@ QString VCardConverter::createVCard( con
+ return createVCards( list, version );
+ }
+
++QCString VCardConverter::createVCardRaw( const Addressee &addr, Version version )
++{
++ Addressee::List list;
++ list.append( addr );
++
++ return createVCardsRaw( list, version );
++}
++
+ QString VCardConverter::createVCards( Addressee::List list, Version version )
+ {
+ VCardTool tool;
+@@ -58,6 +66,13 @@ QString VCardConverter::createVCards( Ad
+ return tool.createVCards( list, ( version == v3_0 ? VCard::v3_0 : VCard::v2_1 ) );
+ }
+
++QCString VCardConverter::createVCardsRaw( Addressee::List list, Version version )
++{
++ VCardTool tool;
++
++ return tool.createVCardsRaw( list, ( version == v3_0 ? VCard::v3_0 : VCard::v2_1 ) );
++}
++
+ Addressee VCardConverter::parseVCard( const QString& vcard )
+ {
+ Addressee::List list = parseVCards( vcard );
+@@ -65,6 +80,13 @@ Addressee VCardConverter::parseVCard( co
+ return list[ 0 ];
+ }
+
++Addressee VCardConverter::parseVCardRaw( const QCString& vcard )
++{
++ Addressee::List list = parseVCardsRaw( vcard );
++
++ return list[ 0 ];
++}
++
+ Addressee::List VCardConverter::parseVCards( const QString& vcard )
+ {
+ VCardTool tool;
+@@ -72,6 +94,13 @@ Addressee::List VCardConverter::parseVCa
+ return tool.parseVCards( vcard );
+ }
+
++Addressee::List VCardConverter::parseVCardsRaw( const QCString& vcard )
++{
++ VCardTool tool;
++
++ return tool.parseVCardsRaw( vcard );
++}
++
+ // ---------------------------- deprecated stuff ---------------------------- //
+
+ bool VCardConverter::vCardToAddressee( const QString &str, Addressee &addr, Version version )
+Index: kabc/vcardconverter.h
+===================================================================
+--- kabc/vcardconverter.h.orig
++++ kabc/vcardconverter.h
+@@ -82,6 +82,7 @@ class KABC_EXPORT VCardConverter
+ @param version The version of the generated vCard format
+ */
+ QString createVCard( const Addressee &addr, Version version = v3_0 );
++ QCString createVCardRaw( const Addressee &addr, Version version = v3_0 );
+
+ /**
+ Creates a string in vCard format which contains the given
+@@ -92,6 +93,7 @@ class KABC_EXPORT VCardConverter
+ */
+ // FIXME: Add error handling
+ QString createVCards( Addressee::List list, Version version = v3_0 );
++ QCString createVCardsRaw( Addressee::List list, Version version = v3_0 );
+
+ // FIXME: Add "createVCards( AddressBook * )"
+
+@@ -99,12 +101,14 @@ class KABC_EXPORT VCardConverter
+ Parses a string in vCard format and returns the first contact.
+ */
+ Addressee parseVCard( const QString& vcard );
++ Addressee parseVCardRaw( const QCString& vcard );
+
+ /**
+ Parses a string in vCard format and returns a list of contact objects.
+ */
+ // FIXME: Add error handling
+ Addressee::List parseVCards( const QString& vcard );
++ Addressee::List parseVCardsRaw( const QCString& vcard );
+
+ // FIXME: Add "bool parseVCards( AddressBook *, const QString &vcard )"
+
+Index: kabc/vcardformatplugin.cpp
+===================================================================
+--- kabc/vcardformatplugin.cpp.orig
++++ kabc/vcardformatplugin.cpp
+@@ -38,14 +38,11 @@ VCardFormatPlugin::~VCardFormatPlugin()
+
+ bool VCardFormatPlugin::load( Addressee &addressee, QFile *file )
+ {
+- QString data;
+-
+- QTextStream t( file );
+- t.setEncoding( QTextStream::Latin1 );
+- data = t.read();
++ const QByteArray rawData = file->readAll();
++ const QCString data( rawData.data(), rawData.size() );
+
+ VCardConverter converter;
+- Addressee::List l = converter.parseVCards( data );
++ Addressee::List l = converter.parseVCardsRaw( data );
+
+ if ( ! l.first().isEmpty() ) {
+ addressee = l.first();
+@@ -57,15 +54,11 @@ bool VCardFormatPlugin::load( Addressee
+
+ bool VCardFormatPlugin::loadAll( AddressBook*, Resource *resource, QFile *file )
+ {
+- QString data;
+-
+- QTextStream t( file );
+- t.setEncoding( QTextStream::Latin1 );
+- data = t.read();
++ const QByteArray rawData = file->readAll();
++ const QCString data( rawData.data(), rawData.size() );
+
+ VCardConverter converter;
+-
+- Addressee::List l = converter.parseVCards( data );
++ Addressee::List l = converter.parseVCardsRaw( data );
+
+ Addressee::List::iterator itr;
+ for ( itr = l.begin(); itr != l.end(); ++itr) {
+@@ -86,9 +79,8 @@ void VCardFormatPlugin::save( const Addr
+
+ vcardlist.append( addressee );
+
+- QTextStream t( file );
+- t.setEncoding( QTextStream::UnicodeUTF8 );
+- t << converter.createVCards( vcardlist );
++ const QCString data = converter.createVCardsRaw( vcardlist );
++ file->writeBlock( data, data.length() );
+ }
+
+ void VCardFormatPlugin::saveAll( AddressBook*, Resource *resource, QFile *file )
+@@ -102,9 +94,8 @@ void VCardFormatPlugin::saveAll( Address
+ vcardlist.append( *it );
+ }
+
+- QTextStream t( file );
+- t.setEncoding( QTextStream::UnicodeUTF8 );
+- t << converter.createVCards( vcardlist );
++ const QCString data = converter.createVCardsRaw( vcardlist );
++ file->writeBlock( data, data.length() );
+ }
+
+ bool VCardFormatPlugin::checkFormat( QFile *file ) const
+Index: kabc/vcardparser/vcardparser.cpp
+===================================================================
+--- kabc/vcardparser/vcardparser.cpp.orig
++++ kabc/vcardparser/vcardparser.cpp
+@@ -18,10 +18,13 @@
+ Boston, MA 02110-1301, USA.
+ */
+
++#include <qcstring.h>
+ #include <qregexp.h>
+ #include <qtextcodec.h>
++#include <qvaluelist.h>
+
+ #include <kmdcodec.h>
++#include <kdebug.h>
+
+ #include "vcardparser.h"
+
+@@ -29,25 +32,60 @@
+
+ using namespace KABC;
+
+-static QString backslash( "\\\\" );
+-static QString comma( "\\," );
+-static QString newline( "\\n" );
+-static QString cr( "\\r" );
++typedef QValueList<QCString> QCStringList;
+
+-static void addEscapes( QString &str )
++QValueList<QCString> splitCString( const QCString &str, char sep )
+ {
+- str.replace( '\\', backslash );
+- str.replace( ',', comma );
+- str.replace( '\r', cr );
+- str.replace( '\n', newline );
++ QValueList<QCString> list;
++ int start = 0;
++ int end;
++ while ((end = str.find(sep, start)) != -1) {
++ list.append(str.mid(start, end - start));
++ start = end + 1;
++ }
++ list.append(str.mid(start));
++
++ return list;
++}
++
++QValueList<QCString> splitCString( const QCString &str, const QRegExp &exp )
++{
++ QValueList<QCString> list;
++ int start = 0;
++ int end;
++ while ((end = str.find(exp, start)) != -1) {
++ list.append(str.mid(start, end - start));
++ start = end + 1;
++ }
++ list.append(str.mid(start));
++
++ return list;
++}
++
++bool cStringStartsWith( const QCString &str, const QCString &pattern )
++{
++ const int length = pattern.length();
++ if ( length == 0 )
++ return true;
++
++ const QCString part = str.left( length );
++ return (pattern == part);
+ }
+
+-static void removeEscapes( QString &str )
++static void addEscapes( QCString &str )
+ {
+- str.replace( cr, "\\r" );
+- str.replace( newline, "\n" );
+- str.replace( comma, "," );
+- str.replace( backslash, "\\" );
++ str.replace( '\\', "\\\\" );
++ str.replace( ',', "\\," );
++ str.replace( '\r', "\\r" );
++ str.replace( '\n', "\\n" );
++}
++
++static void removeEscapes( QCString &str )
++{
++ str.replace( "\\r", "\r" );
++ str.replace( "\\n", "\n" );
++ str.replace( "\\,", "," );
++ str.replace( "\\\\", "\\" );
+ }
+
+ VCardParser::VCardParser()
+@@ -60,24 +98,29 @@ VCardParser::~VCardParser()
+
+ VCard::List VCardParser::parseVCards( const QString& text )
+ {
++ return parseVCardsRaw( text.utf8() );
++}
++
++VCard::List VCardParser::parseVCardsRaw( const QCString& text )
++{
+ static QRegExp sep( "[\x0d\x0a]" );
+
+ VCard currentVCard;
+ VCard::List vCardList;
+- QString currentLine;
++ QCString currentLine;
+
+- const QStringList lines = QStringList::split( sep, text );
+- QStringList::ConstIterator it;
++ const QCStringList lines = splitCString( text, sep );
++ QCStringList::ConstIterator it;
+
+ bool inVCard = false;
+- QStringList::ConstIterator linesEnd( lines.end() );
++ QCStringList::ConstIterator linesEnd( lines.end() );
+ for ( it = lines.begin(); it != linesEnd; ++it ) {
+
+ if ( (*it).isEmpty() ) // empty line
+ continue;
+
+ if ( (*it)[ 0 ] == ' ' || (*it)[ 0 ] == '\t' ) { // folded line => append to previous
+- currentLine += QString( *it ).remove( 0, 1 );
++ currentLine.append( (*it).mid( 1 ) );
+ continue;
+ } else {
+ if ( inVCard && !currentLine.isEmpty() ) { // now parse the line
+@@ -88,23 +131,23 @@ VCard::List VCardParser::parseVCards( co
+ }
+
+ VCardLine vCardLine;
+- const QString key = currentLine.left( colon ).stripWhiteSpace();
+- QString value = currentLine.mid( colon + 1 );
++ const QCString key = currentLine.left( colon ).stripWhiteSpace();
++ QCString value = currentLine.mid( colon + 1 );
+
+- QStringList params = QStringList::split( ';', key );
++ QCStringList params = splitCString( key, ';' );
+
+ // check for group
+ if ( params[0].find( '.' ) != -1 ) {
+- const QStringList groupList = QStringList::split( '.', params[0] );
+- vCardLine.setGroup( groupList[0] );
+- vCardLine.setIdentifier( groupList[1] );
++ const QCStringList groupList = splitCString( params[0], '.' );
++ vCardLine.setGroup( QString::fromLatin1( groupList[0] ) );
++ vCardLine.setIdentifier( QString::fromLatin1( groupList[1] ) );
+ } else
+- vCardLine.setIdentifier( params[0] );
++ vCardLine.setIdentifier( QString::fromLatin1( params[0] ) );
+
+ if ( params.count() > 1 ) { // find all parameters
+- QStringList::ConstIterator paramIt = params.begin();
++ QCStringList::ConstIterator paramIt = params.begin();
+ for ( ++paramIt; paramIt != params.end(); ++paramIt ) {
+- QStringList pair = QStringList::split( '=', *paramIt );
++ QCStringList pair = splitCString( *paramIt, '=' );
+ if ( pair.size() == 1 ) {
+ // correct the fucking 2.1 'standard'
+ if ( pair[0].lower() == "quoted-printable" ) {
+@@ -119,12 +162,12 @@ VCard::List VCardParser::parseVCards( co
+ }
+ // This is pretty much a faster pair[1].contains( ',' )...
+ if ( pair[1].find( ',' ) != -1 ) { // parameter in type=x,y,z format
+- const QStringList args = QStringList::split( ',', pair[ 1 ] );
+- QStringList::ConstIterator argIt;
++ const QCStringList args = splitCString( pair[ 1 ], ',' );
++ QCStringList::ConstIterator argIt;
+ for ( argIt = args.begin(); argIt != args.end(); ++argIt )
+- vCardLine.addParameter( pair[0].lower(), *argIt );
++ vCardLine.addParameter( QString::fromLatin1( pair[0].lower() ), QString::fromLatin1( *argIt ) );
+ } else
+- vCardLine.addParameter( pair[0].lower(), pair[1] );
++ vCardLine.addParameter( QString::fromLatin1( pair[0].lower() ), QString::fromLatin1( pair[1] ) );
+ }
+ }
+
+@@ -133,10 +176,8 @@ VCard::List VCardParser::parseVCards( co
+ QByteArray output;
+ bool wasBase64Encoded = false;
+
+- params = vCardLine.parameterList();
+- if ( params.findIndex( "encoding" ) != -1 ) { // have to decode the data
+- QByteArray input;
+- input = QCString(value.latin1());
++ if ( vCardLine.parameterList().findIndex( "encoding" ) != -1 ) { // have to decode the data
++ QByteArray input = value;
+ if ( vCardLine.parameter( "encoding" ).lower() == "b" ||
+ vCardLine.parameter( "encoding" ).lower() == "base64" ) {
+ KCodecs::base64Decode( input, output );
+@@ -148,14 +189,14 @@ VCard::List VCardParser::parseVCards( co
+ value = value.remove( value.length() - 1, 1 ) + (*it);
+ ++it;
+ }
+- input = QCString(value.latin1());
++ input = value;
+ KCodecs::quotedPrintableDecode( input, output );
+ }
+ } else {
+- output = QCString(value.latin1());
++ output = value;
+ }
+
+- if ( params.findIndex( "charset" ) != -1 ) { // have to convert the data
++ if ( vCardLine.parameterList().findIndex( "charset" ) != -1 ) { // have to convert the data
+ QTextCodec *codec =
+ QTextCodec::codecForName( vCardLine.parameter( "charset" ).latin1() );
+ if ( codec ) {
+@@ -173,17 +214,17 @@ VCard::List VCardParser::parseVCards( co
+ }
+
+ // we do not save the start and end tag as vcardline
+- if ( (*it).lower().startsWith( "begin:vcard" ) ) {
++ if ( cStringStartsWith( (*it).lower(), QCString( "begin:vcard" ) ) ) {
+ inVCard = true;
+- currentLine.setLength( 0 );
++ currentLine = QCString();
+ currentVCard.clear(); // flush vcard
+ continue;
+ }
+
+- if ( (*it).lower().startsWith( "end:vcard" ) ) {
++ if ( cStringStartsWith( (*it).lower(), QCString( "end:vcard" ) ) ) {
+ inVCard = false;
+ vCardList.append( currentVCard );
+- currentLine.setLength( 0 );
++ currentLine = QCString();
+ currentVCard.clear(); // flush vcard
+ continue;
+ }
+@@ -197,8 +238,13 @@ VCard::List VCardParser::parseVCards( co
+
+ QString VCardParser::createVCards( const VCard::List& list )
+ {
+- QString text;
+- QString textLine;
++ return QString::fromUtf8( createVCardsRaw( list ) );
++}
++
++QCString VCardParser::createVCardsRaw( const VCard::List& list )
++{
++ QCString text;
++ QCString textLine;
+ QString encodingType;
+ QStringList idents;
+ QStringList params;
+@@ -213,7 +259,7 @@ QString VCardParser::createVCards( const
+
+ bool hasEncoding;
+
+- text.reserve( list.size() * 300 ); // reserve memory to be more efficient
++// text.reserve( list.size() * 300 ); // reserve memory to be more efficient
+
+ // iterate over the cards
+ VCard::List::ConstIterator listEnd( list.end() );
+@@ -228,9 +274,9 @@ QString VCardParser::createVCards( const
+ for ( lineIt = lines.constBegin(); lineIt != lines.constEnd(); ++lineIt ) {
+ if ( !(*lineIt).value().asString().isEmpty() ) {
+ if ( (*lineIt).hasGroup() )
+- textLine = (*lineIt).group() + "." + (*lineIt).identifier();
++ textLine = (*lineIt).group().latin1() + QCString( "." ) + (*lineIt).identifier().latin1();
+ else
+- textLine = (*lineIt).identifier();
++ textLine = (*lineIt).identifier().latin1();
+
+ params = (*lineIt).parameterList();
+ hasEncoding = false;
+@@ -243,9 +289,9 @@ QString VCardParser::createVCards( const
+
+ values = (*lineIt).parameters( *paramIt );
+ for ( valueIt = values.constBegin(); valueIt != values.constEnd(); ++valueIt ) {
+- textLine.append( ";" + (*paramIt).upper() );
++ textLine.append( QCString( ";" ) + (*paramIt).upper().latin1() );
+ if ( !(*valueIt).isEmpty() )
+- textLine.append( "=" + (*valueIt) );
++ textLine.append( QCString( "=" ) + (*valueIt).latin1() );
+ }
+ }
+ }
+@@ -261,11 +307,11 @@ QString VCardParser::createVCards( const
+ KCodecs::quotedPrintableEncode( input, output, false );
+ }
+
+- QString value( output );
++ QCString value( output );
+ addEscapes( value );
+ textLine.append( ":" + value );
+ } else {
+- QString value( (*lineIt).value().asString() );
++ QCString value( (*lineIt).value().toString().utf8() );
+ addEscapes( value );
+ textLine.append( ":" + value );
+ }
+Index: kabc/vcardparser/vcardparser.h
+===================================================================
+--- kabc/vcardparser/vcardparser.h.orig
++++ kabc/vcardparser/vcardparser.h
+@@ -34,6 +34,9 @@ class VCardParser
+ static VCard::List parseVCards( const QString& text );
+ static QString createVCards( const VCard::List& list );
+
++ static VCard::List parseVCardsRaw( const QCString& text );
++ static QCString createVCardsRaw( const VCard::List& list );
++
+ private:
+ class VCardParserPrivate;
+ VCardParserPrivate *d;
+Index: kabc/vcardtool.cpp
+===================================================================
+--- kabc/vcardtool.cpp.orig
++++ kabc/vcardtool.cpp
+@@ -74,15 +74,28 @@ VCardTool::~VCardTool()
+ {
+ }
+
+-// TODO: make list a const&
++QCString VCardTool::createVCardsRaw( Addressee::List list, VCard::Version version )
++{
++ const VCard::List vCardList = createVCardsInternal( list, version );
++
++ return VCardParser::createVCardsRaw( vCardList );
++}
++
+ QString VCardTool::createVCards( Addressee::List list, VCard::Version version )
+ {
+- VCard::List vCardList;
++ const VCard::List vCardList = createVCardsInternal( list, version );
++
++ return VCardParser::createVCards( vCardList );
++}
++
++KABC::VCard::List VCardTool::createVCardsInternal( Addressee::List list, KABC::VCard::Version version )
++{
++ KABC::VCard::List vCardList;
+
+ Addressee::List::ConstIterator addrIt;
+ Addressee::List::ConstIterator listEnd( list.constEnd() );
+ for ( addrIt = list.constBegin(); addrIt != listEnd; ++addrIt ) {
+- VCard card;
++ KABC::VCard card;
+ QStringList::ConstIterator strIt;
+
+ // ADR + LABEL
+@@ -348,17 +361,30 @@ QString VCardTool::createVCards( Address
+ vCardList.append( card );
+ }
+
+- return VCardParser::createVCards( vCardList );
++ return vCardList;
++}
++
++Addressee::List VCardTool::parseVCardsRaw( const QCString& vcard )
++{
++ const VCard::List vCardList = VCardParser::parseVCardsRaw( vcard );
++
++ return parseVCardsInternal( vCardList );
+ }
+
+ Addressee::List VCardTool::parseVCards( const QString& vcard )
+ {
++ const VCard::List vCardList = VCardParser::parseVCards( vcard );
++
++ return parseVCardsInternal( vCardList );
++}
++
++Addressee::List VCardTool::parseVCardsInternal( const VCard::List &vCardList )
++{
+ static const QChar semicolonSep( ';' );
+ static const QChar commaSep( ',' );
+ QString identifier;
+
+ Addressee::List addrList;
+- const VCard::List vCardList = VCardParser::parseVCards( vcard );
+
+ VCard::List::ConstIterator cardIt;
+ VCard::List::ConstIterator listEnd( vCardList.end() );
+Index: kabc/vcardtool.h
+===================================================================
+--- kabc/vcardtool.h.orig
++++ kabc/vcardtool.h
+@@ -46,12 +46,19 @@ class KABC_EXPORT VCardTool
+ */
+ QString createVCards( Addressee::List list, VCard::Version version = VCard::v3_0 );
+
++ QCString createVCardsRaw( Addressee::List list, VCard::Version version = VCard::v3_0 );
++
+ /**
+ Parses the string and returns a list of addressee objects.
+ */
+ Addressee::List parseVCards( const QString& vcard );
+
++ Addressee::List parseVCardsRaw( const QCString& vcard );
++
+ private:
++ VCard::List createVCardsInternal( Addressee::List list, VCard::Version version );
++ Addressee::List parseVCardsInternal( const VCard::List &vCardList );
++
+ /**
+ Split a string and replaces escaped separators on the fly with
+ unescaped ones.
diff --git a/opensuse/tdelibs/bug-399296_ftphandling-fix.diff b/opensuse/tdelibs/bug-399296_ftphandling-fix.diff
new file mode 100644
index 000000000..a8719ab92
--- /dev/null
+++ b/opensuse/tdelibs/bug-399296_ftphandling-fix.diff
@@ -0,0 +1,57 @@
+Index: kioslave/ftp/ftp.cc
+===================================================================
+--- kioslave/ftp/ftp.cc.orig
++++ kioslave/ftp/ftp.cc
+@@ -1275,6 +1275,16 @@ bool Ftp::ftpRename( const QString & src
+ return false;
+ }
+
++ // Must check if dst already exists, RNFR+RNTO overwrites by default (#127793).
++ if (ftpFileExists(dst)) {
++ error(ERR_FILE_ALREADY_EXIST, dst);
++ return false;
++ }
++ if (ftpFolder(dst, false)) {
++ error(ERR_DIR_ALREADY_EXIST, dst);
++ return false;
++ }
++
+ int pos = src.findRev("/");
+ if( !ftpFolder(src.left(pos+1), false) )
+ return false;
+@@ -2406,6 +2416,19 @@ bool Ftp::ftpSize( const QString & path,
+ return true;
+ }
+
++bool Ftp::ftpFileExists(const QString& path)
++{
++ QCString buf;
++ buf = "SIZE ";
++ buf += remoteEncoding()->encode(path);
++ if( !ftpSendCmd( buf ) || (m_iRespType != 2) )
++ return false;
++
++ // skip leading "213 " (response code)
++ const char* psz = ftpResponse(4);
++ return psz != 0;
++}
++
+ // Today the differences between ASCII and BINARY are limited to
+ // CR or CR/LF line terminators. Many servers ignore ASCII (like
+ // win2003 -or- vsftp with default config). In the early days of
+Index: kioslave/ftp/ftp.h
+===================================================================
+--- kioslave/ftp/ftp.h.orig
++++ kioslave/ftp/ftp.h
+@@ -350,6 +350,11 @@ private:
+ /**
+ * Set the current working directory, but only if not yet current
+ */
++ bool ftpFileExists(const QString& path);
++
++ /**
++ * Set the current working directory, but only if not yet current
++ */
+ bool ftpFolder(const QString& path, bool bReportError);
+
+ /**
diff --git a/opensuse/tdelibs/bundle-locale-help.diff b/opensuse/tdelibs/bundle-locale-help.diff
new file mode 100644
index 000000000..8305fad3a
--- /dev/null
+++ b/opensuse/tdelibs/bundle-locale-help.diff
@@ -0,0 +1,107 @@
+Index: kdecore/kstandarddirs.cpp
+===================================================================
+--- kdecore/kstandarddirs.cpp.orig
++++ kdecore/kstandarddirs.cpp
+@@ -94,8 +94,8 @@ KStandardDirsSingleton* KStandardDirsSin
+ return s_self;
+ }
+
+-static const char* const types[] = {"html", "icon", "apps", "sound",
+- "data", "locale", "services", "mime",
++static const char* const types[] = {"html", "html-bundle", "icon", "apps", "sound",
++ "data", "locale", "locale-bundle", "services", "mime",
+ "servicetypes", "config", "exe",
+ "wallpaper", "lib", "pixmap", "templates",
+ "module", "qtplugins",
+@@ -1023,6 +1023,8 @@ static int tokenize( QStringList& tokens
+ QString KStandardDirs::kde_default(const char *type) {
+ if (!strcmp(type, "data"))
+ return "share/apps/";
++ if (!strcmp(type, "html-bundle"))
++ return "share/doc-bundle/HTML/";
+ if (!strcmp(type, "html"))
+ return "share/doc/HTML/";
+ if (!strcmp(type, "icon"))
+@@ -1035,6 +1037,8 @@ QString KStandardDirs::kde_default(const
+ return "share/applnk/";
+ if (!strcmp(type, "sound"))
+ return "share/sounds/";
++ if (!strcmp(type, "locale-bundle"))
++ return "share/locale-bundle/";
+ if (!strcmp(type, "locale"))
+ return "share/locale/";
+ if (!strcmp(type, "services"))
+Index: kdecore/kcatalogue.cpp
+===================================================================
+--- kdecore/kcatalogue.cpp.orig
++++ kdecore/kcatalogue.cpp
+@@ -66,7 +66,11 @@ KCatalogue::KCatalogue(const QString & n
+ .arg( d->language )
+ .arg( d->name );
+
+- setFileName( locate( "locale", path ) );
++ QString fileName = locate( "locale", path );
++ if (fileName.isEmpty())
++ fileName = locate( "locale-bundle", path );
++
++ setFileName( fileName );
+
+ }
+
+Index: kdecore/klocale.cpp
+===================================================================
+--- kdecore/klocale.cpp.orig
++++ kdecore/klocale.cpp
+@@ -402,7 +402,11 @@ QString KLocale::catalogueFileName(const
+ .arg( language )
+ .arg( catalog.name() );
+
+- return locate( "locale", path );
++ QString fileName = locate( "locale", path );
++ if (fileName.isEmpty())
++ fileName = locate( "locale-bundle", path );
++
++ return fileName;
+ }
+
+ bool KLocale::setLanguage(const QString & language)
+@@ -501,6 +505,9 @@ bool KLocale::isApplicationTranslatedInt
+ // kdDebug() << "isApplicationTranslatedInto: filename " << sFileName << endl;
+
+ QString sAbsFileName = locate( "locale", sFileName );
++ if (sAbsFileName.isEmpty())
++ sAbsFileName = locate( "locale-bundle", sFileName );
++
+ // kdDebug() << "isApplicationTranslatedInto: absname " << sAbsFileName << endl;
+ return ! sAbsFileName.isEmpty();
+ }
+Index: kdoctools/kio_help.cpp
+===================================================================
+--- kdoctools/kio_help.cpp.orig
++++ kdoctools/kio_help.cpp
+@@ -42,7 +42,7 @@ QString HelpProtocol::langLookup(const Q
+ QStringList search;
+
+ // assemble the local search paths
+- const QStringList localDoc = KGlobal::dirs()->resourceDirs("html");
++ const QStringList localDoc = KGlobal::dirs()->resourceDirs("html") + KGlobal::dirs()->resourceDirs("html-bundle");
+
+ kdDebug( 7119 ) << "Looking up help for: " << fname << endl;
+ QString _fname = fname;
+@@ -60,10 +60,14 @@ QString HelpProtocol::langLookup(const Q
+ QStringList langs = KGlobal::locale()->languageList();
+ QStringList::ConstIterator lang;
+ for (lang = langs.begin(); lang != langs.end(); ++lang)
+- if ((*lang).left(2) == "en")
++ if ((*lang).left(2) == "en") {
+ search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(_fname));
+- else
++ search.append(QString("/usr/share/gnome/help-bundle/%1/C%2").arg(path).arg(_fname));
++ }
++ else {
+ search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname));
++ search.append(QString("/usr/share/gnome/help-bundle/%1/%2%3").arg(path).arg(*lang).arg(_fname));
++ }
+
+ langs.append( "en" );
+ langs.remove( "C" );
diff --git a/opensuse/tdelibs/clever-menu.diff b/opensuse/tdelibs/clever-menu.diff
new file mode 100644
index 000000000..e2ae876c5
--- /dev/null
+++ b/opensuse/tdelibs/clever-menu.diff
@@ -0,0 +1,221 @@
+Index: kio/kio/kservice.cpp
+===================================================================
+--- kio/kio/kservice.cpp.orig
++++ kio/kio/kservice.cpp
+@@ -725,6 +725,20 @@ QString KService::untranslatedGenericNam
+ return v.isValid() ? v.toString() : QString::null;
+ }
+
++bool KService::SuSEunimportant() const {
++ QMap<QString,QVariant>::ConstIterator it = m_mapProps.find( "X-SuSE-Unimportant" );
++ if ( (it == m_mapProps.end()) || (!it.data().isValid()))
++ {
++ return false;
++ }
++
++ QString aValue = it.data().toString();
++ if (aValue == "true" || aValue == "on" || aValue == "yes")
++ return true;
++ else
++ return false;
++}
++
+ QString KService::parentApp() const {
+ QMap<QString,QVariant>::ConstIterator it = m_mapProps.find( "X-KDE-ParentApp" );
+ if ( (it == m_mapProps.end()) || (!it.data().isValid()))
+Index: kio/kio/kservice.h
+===================================================================
+--- kio/kio/kservice.h.orig
++++ kio/kio/kservice.h
+@@ -327,6 +327,10 @@ public:
+ * @return true to suppress this service
+ */
+ bool noDisplay() const;
++ /**
++ * check if the application entry is important
++ */
++ bool SuSEunimportant() const;
+
+ /**
+ * Name of the application this service belongs to.
+Index: kio/kio/kservicegroup.cpp
+===================================================================
+--- kio/kio/kservicegroup.cpp.orig
++++ kio/kio/kservicegroup.cpp
+@@ -31,8 +31,10 @@
+ class KServiceGroup::Private
+ {
+ public:
+- Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false;m_inlineValue = 4;}
++ Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false; m_inlineValue = 4; m_bShortMenu = false; m_bGeneralDescription = false;}
+ bool m_bNoDisplay;
++ bool m_bShortMenu;
++ bool m_bGeneralDescription;
+ bool m_bShowEmptyMenu;
+ bool m_bShowInlineHeader;
+ bool m_bInlineAlias;
+@@ -73,6 +75,11 @@ KServiceGroup::KServiceGroup( const QStr
+ m_strComment = config.readEntry( "Comment" );
+ m_bDeleted = config.readBoolEntry( "Hidden", false );
+ d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false );
++ if (d->directoryEntryPath.startsWith(QDir::homeDirPath()))
++ d->m_bShortMenu = false;
++ else
++ d->m_bShortMenu = config.readBoolEntry( "X-SuSE-AutoShortMenu", true );
++ d->m_bGeneralDescription = config.readBoolEntry( "X-SuSE-GeneralDescription", false );
+ QStringList tmpList;
+ if (config.hasKey("OnlyShowIn"))
+ {
+@@ -120,6 +127,10 @@ int KServiceGroup::childCount()
+ {
+ if (m_childCount == -1)
+ {
++ KConfig global("kdeglobals");
++ global.setGroup("KDE");
++ bool showUnimportant = global.readBoolEntry("showUnimportant", false);
++
+ m_childCount = 0;
+
+ for( List::ConstIterator it = m_serviceList.begin();
+@@ -130,7 +141,8 @@ int KServiceGroup::childCount()
+ {
+ KService *service = static_cast<KService *>(p);
+ if (!service->noDisplay())
+- m_childCount++;
++ if ( showUnimportant || !service->SuSEunimportant() )
++ m_childCount++;
+ }
+ else if (p->isType(KST_KServiceGroup))
+ {
+@@ -203,6 +215,16 @@ QStringList KServiceGroup::suppressGener
+ return d->suppressGenericNames;
+ }
+
++bool KServiceGroup::SuSEgeneralDescription() const
++{
++ return d->m_bGeneralDescription;
++}
++
++bool KServiceGroup::SuSEshortMenu() const
++{
++ return d->m_bShortMenu;
++}
++
+ void KServiceGroup::load( QDataStream& s )
+ {
+ QStringList groupList;
+@@ -214,7 +236,8 @@ void KServiceGroup::load( QDataStream& s
+ s >> m_strCaption >> m_strIcon >>
+ m_strComment >> groupList >> m_strBaseGroupName >> m_childCount >>
+ noDisplay >> d->suppressGenericNames >> d->directoryEntryPath >>
+- d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> _allowInline;
++ d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >>
++ _allowInline >> d->m_bShortMenu >> d->m_bGeneralDescription;
+
+ d->m_bNoDisplay = (noDisplay != 0);
+ d->m_bShowEmptyMenu = ( _showEmptyMenu != 0 );
+@@ -286,7 +309,8 @@ void KServiceGroup::save( QDataStream& s
+ s << m_strCaption << m_strIcon <<
+ m_strComment << groupList << m_strBaseGroupName << m_childCount <<
+ noDisplay << d->suppressGenericNames << d->directoryEntryPath <<
+- d->sortOrder <<_showEmptyMenu <<inlineHeader<<_inlineAlias<<_allowInline;
++ d->sortOrder <<_showEmptyMenu <<inlineHeader<<_inlineAlias<<_allowInline <<
++ d->m_bShortMenu << d->m_bGeneralDescription;
+ }
+
+ KServiceGroup::List
+@@ -312,6 +336,12 @@ static void addItem(KServiceGroup::List
+ KServiceGroup::List
+ KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName)
+ {
++ return SuSEentries(sort, excludeNoDisplay, allowSeparators, sortByGenericName);
++}
++
++KServiceGroup::List
++KServiceGroup::SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant)
++{
+ KServiceGroup *group = this;
+
+ // If the entries haven't been loaded yet, we have to reload ourselves
+@@ -338,11 +368,18 @@ KServiceGroup::entries(bool sort, bool e
+ for (List::ConstIterator it(group->m_serviceList.begin()); it != group->m_serviceList.end(); ++it)
+ {
+ KSycocaEntry *p = (*it);
++ if( !p->isType(KST_KServiceGroup) && !p->isType(KST_KService))
++ continue;
+ bool noDisplay = p->isType(KST_KServiceGroup) ?
+ static_cast<KServiceGroup *>(p)->noDisplay() :
+ static_cast<KService *>(p)->noDisplay();
+ if (excludeNoDisplay && noDisplay)
+ continue;
++ bool SuSEunimportant = p->isType(KST_KService) &&
++ static_cast<KService *>(p)->SuSEunimportant();
++ if (excludeSuSEunimportant && SuSEunimportant)
++ continue;
++
+ // Choose the right list
+ KSortableValueList<SPtr,QCString> & list = p->isType(KST_KServiceGroup) ? glist : slist;
+ QString name;
+@@ -374,6 +411,15 @@ KServiceGroup::entries(bool sort, bool e
+ }
+ list.insert(key,SPtr(*it));
+ }
++
++ return group->SuSEsortEntries( slist, glist, excludeNoDisplay, allowSeparators );
++}
++
++KServiceGroup::List
++KServiceGroup::SuSEsortEntries( KSortableValueList<SPtr,QCString> slist, KSortableValueList<SPtr,QCString> glist, bool excludeNoDisplay, bool allowSeparators )
++{
++ KServiceGroup *group = this;
++
+ // Now sort
+ slist.sort();
+ glist.sort();
+@@ -415,6 +461,8 @@ KServiceGroup::entries(bool sort, bool e
+ // TODO: This prevents duplicates
+ for(KSortableValueList<SPtr,QCString>::Iterator it2 = slist.begin(); it2 != slist.end(); ++it2)
+ {
++ if (!(*it2).value()->isType(KST_KService))
++ continue;
+ KService *service = (KService *)((KSycocaEntry *)((*it2).value()));
+ if (service->menuId() == item)
+ {
+Index: kio/kio/kservicegroup.h
+===================================================================
+--- kio/kio/kservicegroup.h.orig
++++ kio/kio/kservicegroup.h
+@@ -26,6 +26,7 @@
+ #include <qvariant.h>
+
+ #include <kdesktopfile.h>
++#include <ksortablevaluelist.h>
+
+ #include "ksycocaentry.h"
+ #include "ksycocatype.h"
+@@ -201,6 +202,12 @@ public:
+ void setLayoutInfo(const QStringList &layout);
+
+ /**
++ * SuSE special, not part of KDE API
++ */
++ bool SuSEshortMenu() const;
++ bool SuSEgeneralDescription() const;
++
++ /**
+ * @internal
+ * Returns information related to the layout of services in this group.
+ */
+@@ -238,6 +245,12 @@ public:
+ */
+ virtual List entries(bool sorted = false);
+
++ /*
++ * UNOFFICIAL SuSE special
++ */
++ virtual List SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant = true);
++ virtual List SuSEsortEntries( KSortableValueList<SPtr,QCString> slist, KSortableValueList<SPtr,QCString> glist, bool excludeNoDisplay, bool allowSeparators );
++
+ /**
+ * Returns a non-empty string if the group is a special base group.
+ * By default, "Settings/" is the kcontrol base group ("settings")
diff --git a/opensuse/tdelibs/common_options b/opensuse/tdelibs/common_options
new file mode 100644
index 000000000..b1883c282
--- /dev/null
+++ b/opensuse/tdelibs/common_options
@@ -0,0 +1,156 @@
+export prefix="/opt/kde3"
+export includedir="$prefix/include"
+
+export kde_prefix="$prefix"
+export kde_confdir="$prefix/share/config"
+
+export kde_bindir="$kde_prefix/bin"
+export kde_libdir="$kde_prefix/@_lib@"
+export kde_includes="$kde_prefix/include"
+export kde_includedir="$kde_prefix/include"
+
+export kde_htmldir="$kde_prefix/share/doc/HTML"
+export kde_icondir="$kde_prefix/share/icons"
+export kde_sounddir="$kde_prefix/share/sounds"
+export kde_datadir="$kde_prefix/share/apps"
+export kde_locale="$kde_prefix/share/locale"
+export kde_mimedir="$kde_prefix/share/mimelnk"
+export kde_wallpaperdir="$kde_prefix/share/wallpapers"
+
+export kde_appsdir="$kde_prefix/share/applnk"
+export kde_servicesdir="$kde_prefix/share/services"
+export kde_servicetypesdir="$kde_prefix/share/servicetypes"
+
+export kde_styledir="$kde_libdir/kde3/plugins/styles"
+export kde_widgetdir="$kde_libdir/kde3/plugins/designer"
+
+export PATH=$PWD/admin/:$PATH
+if test -x $PWD/admin/do_make; then
+alias make=do_make
+else
+alias make=/opt/kde3/share/apps/kdelibs/admin/do_make
+fi
+
+export configkde="@configkde@"
+
+unset KDEDIR || :
+unset KDEDIRS || :
+unset QTDIR || :
+
+#export INSTALL_TARGET=install-strip
+export INSTALL_TARGET=install
+
+Debug=0
+if test "$Debug" = 1; then
+ export configkde="$configkde --enable-debug=full"
+ export NO_BRP_STRIP_DEBUG=true
+else
+ export configkde="$configkde --disable-debug"
+fi
+
+CFLAGS="$CFLAGS $RPM_OPT_FLAGS"
+CXXFLAGS="$CXXFLAGS $RPM_OPT_FLAGS"
+LDFLAGS=
+if ld -Bsymbolic-functions -v &> /dev/null; then
+ LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
+fi
+export CFLAGS CXXFLAGS LDFLAGS
+
+update_admin()
+{
+ set +x
+ if [ ! -d /opt/kde3/share/apps/kdelibs/admin ]; then
+ echo "ERROR: kde2-compat-devel isn't installed."
+ exit 1
+ fi
+ if [ ! -d admin ]; then
+ echo "WARNING: there is no admin directory."
+ fi
+ rm -rf admin autom4te.cache
+ cp -a /opt/kde3/share/apps/kdelibs/admin .
+ arg=$1
+# if [ "$arg" != "--no-unsermake" ] && \
+# [ -f /.buildenv ] && grep -q BUILD_BASENAME=beta- /.buildenv; then
+# arg="--unsermake"
+# fi
+ if [ "$arg" = "--no-unsermake" ]; then
+ touch $RPM_BUILD_DIR/.no_unsermake
+ else
+ export UNSERMAKE=yes
+ fi
+
+ make -f admin/Makefile.common cvs
+
+ test -f /.buildenv && . /.buildenv
+
+ find . -name \*.ui | while read i; do
+ for j in ${i%.ui}.cpp ${i%.ui}.h ${i%.ui}.moc;do
+ if [ -e "$j" ] && grep -q "by: The User Interface Compiler" "$j"; then
+ echo WARNING: pregenerated files from $i exist, deleting ...
+ rm -f "$j"
+ fi
+ done
+ if [ "${BUILD_BASENAME:0:4}" != "beta" ]; then
+ if grep -q "<includehints>" "$i"; then
+ echo WARNING: removing include hints from $i
+ sed -i -e 's,<includehint>.*</includehint>,,' "$i"
+ fi
+ fi
+ done
+}
+
+kde_post_install()
+{
+ # remove not needed development files
+ rm -f $RPM_BUILD_ROOT/opt/kde3/@_lib@/libkdeinit_*.la
+
+ # not worth the hassle
+ rm -rf $RPM_BUILD_ROOT/opt/kde3/share/icons/locolor
+
+ # move icons in one theme - prefering hicolor
+ d="$RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg"
+ if [ -d "$d" -a ! -e "$d/index.theme" ]; then
+ find "$d" -type f | while read src; do
+ dest="${src/\/crystalsvg\///hicolor/}"
+ dir="${dest%/*}"
+ mkdir -p "$dir"
+ mv "$src" "$dest"
+ done
+ fi
+ # we do this 3 times as there is a 3 fold hierarchy
+ if [ -d $RPM_BUILD_ROOT/opt/kde3/share/icons ]; then
+ for i in `seq 1 3`; do
+ find $RPM_BUILD_ROOT/opt/kde3/share/icons -type d -exec rmdir -v --ignore-fail-on-non-empty -- {} \; || true
+ done
+ fi
+
+ if [ -d $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@Latn ]; then
+ mv $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@Latn $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@latin
+ fi
+
+ if test -e /usr/lib/rpm/suse_update_desktop_file.sh; then
+ distribution=''
+ if test -f $HOME/.rpmmacros && test -d /usr/src/packages/SRPMS; then
+ distribution=`grep ^%distribution $HOME/.rpmmacros | cut '-d ' -f2`
+ fi
+
+ find $RPM_BUILD_ROOT/opt/kde3/share \
+ -name '*.desktop' 2> /dev/null | while read file; do
+ test -r "$file" || continue
+ grep -q "^X-SuSE-translate=" "$file" && continue
+ case "$file" in
+ */.hidden/*)
+ /usr/lib/rpm/suse_update_desktop_file.sh -n "$file"
+ ;;
+ *)
+ if test -n "$distribution"; then
+ /usr/lib/rpm/suse_update_desktop_file.sh --project "$distribution" --basedir /usr/src/packages/SRPMS "$file"
+ else
+ /usr/lib/rpm/suse_update_desktop_file.sh "$file"
+ fi
+ ;;
+ esac
+ done
+ fi
+}
+
diff --git a/opensuse/tdelibs/cr16-filesys-file_broken.png b/opensuse/tdelibs/cr16-filesys-file_broken.png
new file mode 100644
index 000000000..fbbb60a0b
--- /dev/null
+++ b/opensuse/tdelibs/cr16-filesys-file_broken.png
Binary files differ
diff --git a/opensuse/tdelibs/create-kdeapi b/opensuse/tdelibs/create-kdeapi
new file mode 100644
index 000000000..720922e8a
--- /dev/null
+++ b/opensuse/tdelibs/create-kdeapi
@@ -0,0 +1,107 @@
+#! /bin/sh
+# Copyright (c) 2001 SuSE GmbH Nuernberg, Germany. All rights reserved.
+#
+# Author: Adrian Schroeter <adrian@suse.de>
+#
+# This module generates a index.html page for all KDE main api index.html pages
+# SuSEhelp will use this index.html page as start point
+
+r=`pwd`
+while test ! -x usr/share/doc/KDE3-API/ && test "$r" != "/"; do
+ r=`dirname $root`
+ cd ..
+done
+
+kdeapi=/usr/share/doc/KDE3-API/
+
+if test ! -w $r/${kdeapi} ; then
+ echo "The KDE API directory $kdeapi is not writeable. Exit..."
+ exit 1
+fi
+
+#
+# write html header
+#
+cat > $r/${kdeapi}/index.html <<EOF
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="kde-maintainers@suse.de">
+ <meta name="GENERATOR" content="create-kdeapi">
+ <title>KDE API Reference</title>
+</head>
+
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">
+ <CENTER><H1>KDE 3.x API Reference</H1></CENTER>
+
+EOF
+
+#
+# list all the api start pages
+#
+
+cat >> $r/${kdeapi}/index.html <<EOF
+<TABLE WIDTH="100%" BORDER="0">
+<TR bgcolor="b0b0b0">
+<TH>&nbsp;</TH><TH>Description</TH><TH>from package</TH></TR>
+<TR bgcolor="ffffff"><TD><A HREF="/usr/share/doc/packages/qt3/html/classes.html">
+Qt </A></TD> <TD>all Qt classes</TD> <TD>qt</TD></TR>
+EOF
+
+dark=1
+mods=
+list=`ls -1 $r/${kdeapi}/*/index.html 2> /dev/null`
+for page in $list; do
+ mainapi=`echo $page | sed -n -e "s@$r/$kdeapi/\([^/]*\)/index.html@\1@p"`
+ mods="$mods $mainapi"
+ eval "page_$mainapi=$page"
+ eval "path_$mainapi=/$kdeapi/$mainapi"
+done
+
+list=`ls -1 $r/opt/kde3/share/doc/HTML/en/*-apidocs/*/html/index.html 2> /dev/null`
+for page in $list; do
+ mainapi=`echo $page | sed -n -e "s@$r/opt/kde3/share/doc/HTML/en/.*-apidocs/\([^/]*\)/html/index.html@\1@p"`
+ mods="$mods $mainapi"
+ path=`echo $page | sed -e "s,$r/opt,/opt,"`
+ eval "page_$mainapi=$path"
+ path=`echo $page | sed -n -e "s@$r\(/opt/kde3/share/doc/HTML/en/.*-apidocs/[^/]*\)/html/index.html@\1@p"`
+ eval "path_$mainapi=$path"
+done
+
+mods=`(for i in $mods; do echo $i; done ) | sort`
+
+for mod in $mods; do
+ eval "apipath=$""page_$mod"
+ eval "basepath=$""path_$mod"
+ description="`cat $r/$basepath/description.SuSE`"
+ package="`cat $r/$basepath/package.SuSE`"
+
+ if [ "$dark" == "1" ]; then
+ dark=0
+ echo "<TR bgcolor=\"eeeeee\">" >> $r/${kdeapi}/index.html
+ else
+ dark=1
+ echo "<TR bgcolor=\"ffffff\">" >> $r/${kdeapi}/index.html
+ fi
+
+ echo "<TD><A HREF=\"${apipath}\"> ${mod} </A></TD>" >> $r/${kdeapi}/index.html
+ echo "<TD>${description}</TD>" >> $r/${kdeapi}/index.html
+ echo "<TD>${package}</TD>" >> $r/${kdeapi}/index.html
+ echo "</TR>" >> $r/${kdeapi}/index.html
+
+done
+
+#
+# finish it ...
+#
+cat >> $r/${kdeapi}/index.html <<EOF
+</TABLE>
+<hr>
+<table>
+<tr><td><small> generated by create-kdeapi on `date` </td></tr>
+</table>
+
+</body>
+</html>
+EOF
diff --git a/opensuse/tdelibs/default-useragent.diff b/opensuse/tdelibs/default-useragent.diff
new file mode 100644
index 000000000..76b92aef8
--- /dev/null
+++ b/opensuse/tdelibs/default-useragent.diff
@@ -0,0 +1,13 @@
+Index: kio/kio/kprotocolmanager.cpp
+===================================================================
+--- kio/kio/kprotocolmanager.cpp.orig
++++ kio/kio/kprotocolmanager.cpp
+@@ -72,7 +72,7 @@ KProtocolManagerPrivate::~KProtocolManag
+
+ // DEFAULT USERAGENT STRING
+ #define CFG_DEFAULT_UAGENT(X) \
+-QString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko)") \
++QString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko) SUSE") \
+ .arg(KDE_VERSION_MAJOR).arg(KDE_VERSION_MINOR).arg(X).arg(KDE_VERSION_MAJOR).arg(KDE_VERSION_MINOR).arg(KDE_VERSION_RELEASE)
+
+ void KProtocolManager::reparseConfiguration()
diff --git a/opensuse/tdelibs/desktop-translations.diff b/opensuse/tdelibs/desktop-translations.diff
new file mode 100644
index 000000000..6bf878469
--- /dev/null
+++ b/opensuse/tdelibs/desktop-translations.diff
@@ -0,0 +1,209 @@
+Index: kdecore/kconfigbase.h
+===================================================================
+--- kdecore/kconfigbase.h.orig
++++ kdecore/kconfigbase.h
+@@ -1985,6 +1985,7 @@ public:
+
+ protected:
+ QCString readEntryUtf8( const char *pKey) const;
++ bool hasTranslatedKey( const char *pKey ) const;
+
+ /**
+ * The currently selected group. */
+Index: kdecore/kconfigbase.cpp
+===================================================================
+--- kdecore/kconfigbase.cpp.orig
++++ kdecore/kconfigbase.cpp
+@@ -131,6 +131,24 @@ bool KConfigBase::hasKey(const char *pKe
+ return !entry.mValue.isNull();
+ }
+
++bool KConfigBase::hasTranslatedKey(const char* pKey) const
++{
++ KEntryKey aEntryKey(mGroup, 0);
++ aEntryKey.c_key = pKey;
++ aEntryKey.bDefault = readDefaults();
++
++ if (!locale().isNull()) {
++ // try the localized key first
++ aEntryKey.bLocal = true;
++ KEntry entry = lookupData(aEntryKey);
++ if (!entry.mValue.isNull())
++ return true;
++ aEntryKey.bLocal = false;
++ }
++
++ return false;
++}
++
+ bool KConfigBase::hasGroup(const QString &group) const
+ {
+ return internalHasGroup( group.utf8());
+Index: kdecore/kdesktopfile.h
+===================================================================
+--- kdecore/kdesktopfile.h.orig
++++ kdecore/kdesktopfile.h
+@@ -236,6 +236,8 @@ private:
+
+ private:
+
++ QString translatedEntry(const char*) const;
++
+ // copy-construction and assignment are not allowed
+ KDesktopFile( const KDesktopFile& );
+ KDesktopFile& operator= ( const KDesktopFile& );
+Index: kdecore/kdesktopfile.cpp
+===================================================================
+--- kdecore/kdesktopfile.cpp.orig
++++ kdecore/kdesktopfile.cpp
+@@ -34,6 +34,8 @@
+ #include "kapplication.h"
+ #include "kstandarddirs.h"
+ #include "kmountpoint.h"
++#include "kcatalogue.h"
++#include "klocale.h"
+
+ #include "kdesktopfile.h"
+ #include "kdesktopfile.moc"
+@@ -145,6 +147,27 @@ bool KDesktopFile::isAuthorizedDesktopFi
+ return false;
+ }
+
++QString KDesktopFile::translatedEntry(const char* key) const
++{
++ if (hasTranslatedKey(key))
++ return readEntry(key);
++
++ if (hasKey(key)) {
++ QString value = readEntryUntranslated(key);
++ QString fName = fileName();
++ fName = fName.mid(fName.findRev('/')+1);
++ QString po_lookup_key = QString::fromLatin1(key) + "(" + fName + "): " + value;
++ QString po_value = KGlobal::locale()->translate(po_lookup_key.utf8().data());
++
++ if (po_value == po_lookup_key)
++ return value;
++
++ return po_value;
++ }
++
++ return QString::null;
++}
++
+ QString KDesktopFile::readType() const
+ {
+ return readEntry("Type");
+@@ -157,17 +180,17 @@ QString KDesktopFile::readIcon() const
+
+ QString KDesktopFile::readName() const
+ {
+- return readEntry("Name");
++ return translatedEntry("Name");
+ }
+
+ QString KDesktopFile::readComment() const
+ {
+- return readEntry("Comment");
++ return translatedEntry("Comment");
+ }
+
+ QString KDesktopFile::readGenericName() const
+ {
+- return readEntry("GenericName");
++ return translatedEntry("GenericName");
+ }
+
+ QString KDesktopFile::readPath() const
+@@ -342,5 +365,3 @@ KDesktopFile* KDesktopFile::copyTo(const
+ config->setDesktopGroup();
+ return config;
+ }
+-
+-
+Index: kio/kio/kservice.cpp
+===================================================================
+--- kio/kio/kservice.cpp.orig
++++ kio/kio/kservice.cpp
+@@ -114,7 +114,7 @@ KService::init( KDesktopFile *config )
+ return;
+ }
+
+- m_strName = config->readEntry( "Name" );
++ m_strName = config->readName();
+ entryMap.remove("Name");
+ if ( m_strName.isEmpty() )
+ {
+@@ -134,7 +134,7 @@ KService::init( KDesktopFile *config )
+ m_strName = m_strName.left(i);
+ }
+
+- m_strType = config->readEntry( "Type" );
++ m_strType = config->readType();
+ entryMap.remove("Type");
+ if ( m_strType.isEmpty() )
+ {
+@@ -204,11 +204,11 @@ KService::init( KDesktopFile *config )
+ entryMap.remove("Terminal");
+ m_strTerminalOptions = config->readEntry( "TerminalOptions" ); // should be a property IMHO
+ entryMap.remove("TerminalOptions");
+- m_strPath = config->readPathEntry( "Path" );
++ m_strPath = config->readPath();
+ entryMap.remove("Path");
+- m_strComment = config->readEntry( "Comment" );
++ m_strComment = config->readComment();
+ entryMap.remove("Comment");
+- m_strGenName = config->readEntry( "GenericName" );
++ m_strGenName = config->readGenericName();
+ entryMap.remove("GenericName");
+ QString untranslatedGenericName = config->readEntryUntranslated( "GenericName" );
+ if (!untranslatedGenericName.isEmpty())
+Index: kio/kio/kservicegroup.cpp
+===================================================================
+--- kio/kio/kservicegroup.cpp.orig
++++ kio/kio/kservicegroup.cpp
+@@ -66,13 +66,11 @@ KServiceGroup::KServiceGroup( const QStr
+
+ d->directoryEntryPath = cfg;
+
+- KConfig config( cfg, true, false, "apps" );
++ KDesktopFile config( cfg, true, "apps" );
+
+- config.setDesktopGroup();
+-
+- m_strCaption = config.readEntry( "Name" );
+- m_strIcon = config.readEntry( "Icon" );
+- m_strComment = config.readEntry( "Comment" );
++ m_strCaption = config.readName();
++ m_strIcon = config.readIcon();
++ m_strComment = config.readComment();
+ m_bDeleted = config.readBoolEntry( "Hidden", false );
+ d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false );
+ if (d->directoryEntryPath.startsWith(QDir::homeDirPath()))
+Index: kio/kio/kmimetype.cpp
+===================================================================
+--- kio/kio/kmimetype.cpp.orig
++++ kio/kio/kmimetype.cpp
+@@ -677,9 +677,8 @@ QString KFolderType::comment( const KURL
+ KURL u( _url );
+ u.addPath( ".directory" );
+
+- KSimpleConfig cfg( u.path(), true );
+- cfg.setDesktopGroup();
+- QString comment = cfg.readEntry( "Comment" );
++ KDesktopFile cfg( u.path(), true );
++ QString comment = cfg.readComment();
+ if ( comment.isEmpty() )
+ return KMimeType::comment( _url, _is_local );
+
+@@ -772,9 +771,8 @@ QString KDEDesktopMimeType::comment( con
+ if ( !_is_local )
+ return KMimeType::comment( _url, _is_local );
+
+- KSimpleConfig cfg( _url.path(), true );
+- cfg.setDesktopGroup();
+- QString comment = cfg.readEntry( "Comment" );
++ KDesktopFile cfg( _url.path(), true );
++ QString comment = cfg.readComment();
+ if ( comment.isEmpty() )
+ return KMimeType::comment( _url, _is_local );
+
diff --git a/opensuse/tdelibs/disable-idn-support.diff b/opensuse/tdelibs/disable-idn-support.diff
new file mode 100644
index 000000000..37c59bc91
--- /dev/null
+++ b/opensuse/tdelibs/disable-idn-support.diff
@@ -0,0 +1,34 @@
+Index: kdecore/network/kresolver.cpp
+===================================================================
+--- kdecore/network/kresolver.cpp.orig
++++ kdecore/network/kresolver.cpp
+@@ -50,6 +50,7 @@
+
+ // IDN
+ #ifdef HAVE_IDNA_H
++# include <stdlib.h>
+ # include <idna.h>
+ #endif
+
+@@ -1084,6 +1085,10 @@ static QStringList splitLabels(const QSt
+ static QCString ToASCII(const QString& label)
+ {
+ #ifdef HAVE_IDNA_H
++ // We do disable it by default for security reasons for now.
++ if ( getenv("KDE_NO_IPV6") && strcmp( getenv("KDE_NO_IPV6"), "no" ) )
++ return label.latin1();
++
+ // We have idna.h, so we can use the idna_to_ascii
+ // function :)
+
+@@ -1118,6 +1123,10 @@ static QCString ToASCII(const QString& l
+ static QString ToUnicode(const QString& label)
+ {
+ #ifdef HAVE_IDNA_H
++ // We do disable it by default for security reasons for now.
++ if ( getenv("KDE_NO_IPV6") && strcmp( getenv("KDE_NO_IPV6"), "no" ) )
++ return label;
++
+ // We have idna.h, so we can use the idna_to_unicode
+ // function :)
+
diff --git a/opensuse/tdelibs/disable-samba-dialog-without-smb.diff b/opensuse/tdelibs/disable-samba-dialog-without-smb.diff
new file mode 100644
index 000000000..cd0c29927
--- /dev/null
+++ b/opensuse/tdelibs/disable-samba-dialog-without-smb.diff
@@ -0,0 +1,66 @@
+Index: kio/kio/kfileshare.cpp
+===================================================================
+--- kio/kio/kfileshare.cpp.orig
++++ kio/kio/kfileshare.cpp
+@@ -291,4 +291,24 @@ bool KFileShare::setShared( const QStrin
+ return ok;
+ }
+
++bool KFileShare::sambaActive()
++{
++ // rcsmb is not executable by users, try ourselves
++ int status = system( "/sbin/checkproc -p /var/run/samba/smbd.pid /usr/sbin/smbd" );
++ return status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0;
++}
++
++bool KFileShare::nfsActive()
++{
++ // rcnfsserver is not executable by users, try ourselves
++ int status = system( "/sbin/checkproc /usr/sbin/rpc.mountd" );
++ if( status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0 )
++ {
++ status = system( "/sbin/checkproc -n nfsd" );
++ if( status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0 )
++ return true;
++ }
++ return false;
++}
++
+ #include "kfileshare.moc"
+Index: kio/kio/kfileshare.h
+===================================================================
+--- kio/kio/kfileshare.h.orig
++++ kio/kio/kfileshare.h
+@@ -131,6 +131,18 @@ public:
+ * Returns whether NFS is enabled
+ */
+ static bool nfsEnabled();
++
++ /**
++ * Returns whether Samba is active (service is running)
++ * @internal
++ */
++ static bool sambaActive();
++
++ /**
++ * Returns whether NFS is active (service is running)
++ * @internal
++ */
++ static bool nfsActive();
+
+ private:
+ static Authorization s_authorization;
+Index: kio/kfile/kfilesharedlg.cpp
+===================================================================
+--- kio/kfile/kfilesharedlg.cpp.orig
++++ kio/kfile/kfilesharedlg.cpp
+@@ -167,6 +167,9 @@ void KFileSharePropsPlugin::init()
+ vbox->addWidget( m_pbConfig, 0, Qt::AlignHCenter );
+
+ vbox->addStretch( 10 );
++
++ if( !KFileShare::sambaActive() && !KFileShare::nfsActive())
++ m_widget->setEnabled( false );
+ }
+ }
+ break;
diff --git a/opensuse/tdelibs/do_make b/opensuse/tdelibs/do_make
new file mode 100644
index 000000000..b317494db
--- /dev/null
+++ b/opensuse/tdelibs/do_make
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+# this is a script around make which basicly checks
+# if it's in srcdir or in builddir and changes to
+# the right directory for calling /usr/bin/make
+# (C) Stephan Kulow
+
+# You may need to set OBJ_REPLACEMENT variable to get it to work.
+# In the variable use the sed syntax to switch directories, for example
+# export OBJ_REPLACEMENT="s:/home/zack/cvs/kde:/home/zack/build:"
+# will assure that the builds are performed under /home/zack/build
+# directory, when the cvs is held under /home/zack/cvs/kde.
+
+file=Makefile
+dir=.
+args=()
+jobs=
+
+while test $# -gt 0 ; do
+ case "${1}" in
+ -f)
+ shift
+ file="${1}"
+ shift
+ args=("${args[@]}" -f $file)
+ ;;
+ -C)
+ shift
+ dir="${1}"
+ shift ;;
+ -j)
+ shift
+ jobs="${1}"
+ shift ;;
+ -j*)
+ jobs="${1/-j/}"
+ shift ;;
+ *)
+ args=("${args[@]}" "$1")
+ shift
+ ;;
+ esac
+done
+
+if test ! -f $dir/$file; then
+ if test -n "$OBJ_SUBDIR"; then
+ dir=$PWD
+ subdir=.
+ while test ! -f $dir/$OBJ_SUBDIR/$file; do
+ subdir=`basename $dir`"/$subdir"
+ dir=`dirname $dir`
+ if test "$dir" = "/"; then
+ # the case that someone puts the compile dir in /
+ # is very unlikely, so we better skip here ;)
+ echo "can't find $OBJ_SUBDIR above current dir"
+ exit 1
+ fi
+ done
+ cd $dir/$OBJ_SUBDIR/$subdir
+ else
+ if test -n "$OBJ_REPLACEMENT"; then
+ pwd=`echo $PWD | sed -e "$OBJ_REPLACEMENT"`
+ if test ! -f $pwd/$dir/$file; then
+ echo "no objdir found. Tried $pwd"
+ exit 1
+ fi
+ cd $pwd/$dir
+ fi
+ fi
+else
+ cd $dir
+fi
+
+echo "makeobj[0]: Entering directory \`$PWD'"
+if test -z "$MAKE"; then
+ if head -n 1 $file | grep unsermake >/dev/null; then
+ MAKE=`type -p unsermake`
+ if test ! -x "$MAKE"; then
+ echo 'Makefile was created with unsermake, but there'
+ echo 'is no unsermake in $PATH'
+ exit 1
+ fi
+ MAKE="$MAKE --no-real-compare VERBOSE=1"
+ if test -n "$jobs"; then args=("${args[@]}" --compile-jobs=$jobs); fi
+ else
+ MAKE=/usr/bin/make
+ if test -n "$jobs"; then args=("${args[@]}" -j $jobs); fi
+ fi
+fi
+
+echo "Calling $MAKE ${args[@]}"
+LANGUAGE=C $MAKE "${args[@]}"
+retval=$?
+echo "makeobj[0]: Leaving directory \`$PWD'"
+exit $retval
+
diff --git a/opensuse/tdelibs/fileshare.diff b/opensuse/tdelibs/fileshare.diff
new file mode 100644
index 000000000..86f7d0941
--- /dev/null
+++ b/opensuse/tdelibs/fileshare.diff
@@ -0,0 +1,296 @@
+--- kio/kfile/kfilesharedlg.cpp
++++ kio/kfile/kfilesharedlg.cpp 2004/08/06 08:38:31
+@@ -24,6 +24,7 @@
+ #include <qradiobutton.h>
+ #include <qbuttongroup.h>
+ #include <qlayout.h>
++#include <qlineedit.h>
+ #include <kprocess.h>
+ #include <kprocio.h>
+ #include <klocale.h>
+@@ -93,8 +94,10 @@
+ delete m_widget;
+ m_rbShare = 0L;
+ m_rbUnShare = 0L;
++ m_rbSharerw = 0L;
+ m_widget = new QWidget( d->m_vBox );
+ QVBoxLayout * vbox = new QVBoxLayout( m_widget );
++ //QHBoxLayout * hbox = new QHBoxLayout( vbox );
+
+ switch ( KFileShare::authorization() ) {
+ case KFileShare::Authorized:
+@@ -105,18 +108,31 @@
+ home += '/';
+ bool ok = true;
+ KFileItemList items = properties->items();
+- // We have 3 possibilities: all shared, all unshared, or mixed.
++ // We have some possibilities: all shared, all unshared (ro,rw), or mixed.
+ bool allShared = true;
+ bool allUnshared = true;
++ bool allreadonly = true;
+ KFileItemListIterator it( items );
+ for ( ; it.current() && ok; ++it ) {
+ QString path = (*it)->url().path();
++
++ // 0 => not shared
++ // 1 => shared read only
++ // 3 => shared writeable
++ int dirStatus = KFileShare::isDirectoryShared( path );
+ if ( !path.startsWith( home ) )
+ ok = false;
+- if ( KFileShare::isDirectoryShared( path ) )
++ if ( dirStatus == 1 ) {
+ allUnshared = false;
+- else
++ }
++ else if ( dirStatus == 3 ) {
++ allUnshared = false;
++ allreadonly = false;
++ }
++ else {
+ allShared = false;
++ allreadonly = false;
++ }
+ }
+ if ( !ok )
+ {
+@@ -136,16 +152,31 @@
+ vbox->addWidget( m_rbUnShare, 0 );
+ rbGroup->insert( m_rbUnShare );
+
+- m_rbShare = new QRadioButton( i18n("Shared"), m_widget );
++ m_rbShare = new QRadioButton( i18n("Shared - read only for others"), m_widget );
+ connect( m_rbShare, SIGNAL( toggled(bool) ), SIGNAL( changed() ) );
+ vbox->addWidget( m_rbShare, 0 );
+ rbGroup->insert( m_rbShare );
+
++ m_rbSharerw = new QRadioButton( i18n("Shared - writeable for others"), m_widget );
++ connect( m_rbSharerw, SIGNAL( toggled(bool) ), SIGNAL( changed() ) );
++ vbox->addWidget( m_rbSharerw, 0 );
++ rbGroup->insert( m_rbSharerw );
++
++ //QLabel *testlabel1 = new QLabel(i18n("Enter Samba Share Name here"),m_widget);
++ //m_leSmbShareName = new QLineEdit(m_widget);
++ //m_leSmbShareName->setMaxLength(12);
++
++ //hbox->addWidget( testlabel1, 0 );
++ //hbox->addWidget( m_leSmbShareName );
++ //vbox->addLayout( hbox );
++
+ // Activate depending on status
+ if ( allShared )
+- m_rbShare->setChecked(true);
++ m_rbSharerw->setChecked(true);
+ if ( allUnshared )
+ m_rbUnShare->setChecked(true);
++ if ( allreadonly )
++ m_rbShare->setChecked(true);
+
+ // Some help text
+ QLabel *label = new QLabel( i18n("Sharing this folder makes it available under Linux/UNIX (NFS) and Windows (Samba).") , m_widget );
+@@ -204,7 +235,7 @@
+ void KFileSharePropsPlugin::applyChanges()
+ {
+ kdDebug() << "KFileSharePropsPlugin::applyChanges" << endl;
+- if ( m_rbShare && m_rbUnShare )
++ if ( m_rbShare && m_rbUnShare && m_rbSharerw )
+ {
+ bool share = m_rbShare->isChecked();
+ KFileItemList items = properties->items();
+@@ -212,7 +243,7 @@
+ bool ok = true;
+ for ( ; it.current() && ok; ++it ) {
+ QString path = (*it)->url().path();
+- ok = setShared( path, share );
++ ok = SuSEsetShared( path, share, m_rbSharerw->isChecked() );
+ if (!ok) {
+ if (share)
+ KMessageBox::detailedError(properties,
+@@ -239,8 +270,14 @@
+
+ bool KFileSharePropsPlugin::setShared( const QString& path, bool shared )
+ {
+- kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," << shared << endl;
+- return KFileShare::setShared( path, shared );
++ return SuSEsetShared( path, shared, true );
++}
++
++bool KFileSharePropsPlugin::SuSEsetShared( const QString& path, bool shared, bool readonly )
++{
++ kdDebug() << "KFileSharePropsPlugin::setShared " << path << ","
++ << shared << readonly << endl;
++ return KFileShare::SuSEsetShared( path, shared, readonly );
+ }
+
+ QWidget* KFileSharePropsPlugin::page() const
+--- kio/kfile/kfilesharedlg.h
++++ kio/kfile/kfilesharedlg.h 2004/08/06 08:38:31
+@@ -54,10 +54,13 @@
+ private:
+ void init();
+ bool setShared( const QString&path, bool shared );
++ bool SuSEsetShared( const QString&path, bool shared, bool readonly );
+
+ QWidget *m_widget;
+ QRadioButton *m_rbShare;
++ QRadioButton *m_rbSharerw;
+ QRadioButton *m_rbUnShare;
++ //QLineEdit *m_leSmbShareName;
+ QPushButton *m_pbConfig;
+ class Private;
+ Private *d;
+--- kio/kio/kfileshare.cpp
++++ kio/kio/kfileshare.cpp 2004/08/06 08:38:51
+@@ -20,6 +20,7 @@
+ #include "kfileshare.h"
+ #include <qdir.h>
+ #include <qfile.h>
++#include <qregexp.h>
+ #include <kprocess.h>
+ #include <kprocio.h>
+ #include <klocale.h>
+@@ -35,8 +36,10 @@
+ #include <kuser.h>
+
+ KFileShare::Authorization KFileShare::s_authorization = NotInitialized;
+-QStringList* KFileShare::s_shareList = 0L;
+-static KStaticDeleter<QStringList> sdShareList;
++//QStringList* KFileShare::s_shareList = 0L;
++//static KStaticDeleter<QStringList> sdShareList;
++QMap<QString,QString>* KFileShare::s_shareMap = 0L;
++static KStaticDeleter<QMap<QString,QString> > sdShareMap;
+
+ KFileShare::ShareMode KFileShare::s_shareMode;
+ bool KFileShare::s_sambaEnabled;
+@@ -164,10 +167,10 @@
+ void KFileShare::readShareList()
+ {
+ KFileSharePrivate::self();
+- if ( !s_shareList )
+- sdShareList.setObject( s_shareList, new QStringList );
++ if ( !s_shareMap )
++ sdShareMap.setObject( s_shareMap, new QMap<QString,QString> );
+ else
+- s_shareList->clear();
++ s_shareMap->clear();
+
+ // /usr/sbin on Mandrake, $PATH allows flexibility for other distributions
+ QString exe = findExe( "filesharelist" );
+@@ -185,29 +188,45 @@
+
+ // Reading code shamelessly stolen from khostname.cpp ;)
+ QString line;
++ QString options;
++ QString path;
+ int length;
++ QRegExp rx_line("([^\\s]+)\\s+(.*)");
+ do {
+ length = proc.readln(line, true);
+ if ( length > 0 )
+ {
+ if ( line[length-1] != '/' )
+ line += '/';
+- s_shareList->append(line);
++ if( rx_line.search( line ) != -1 ) {
++ options = rx_line.cap(1);
++ path = rx_line.cap(2);
++ (*s_shareMap)[path] = options;
++ }
+ kdDebug(7000) << "Shared dir:" << line << endl;
+ }
+ } while (length > -1);
+ }
+
+
+-bool KFileShare::isDirectoryShared( const QString& _path )
++int KFileShare::isDirectoryShared( const QString& _path )
+ {
+- if ( ! s_shareList )
++ int ret(0);
++
++ if ( ! s_shareMap )
+ readShareList();
+
+ QString path( _path );
+ if ( path[path.length()-1] != '/' )
+ path += '/';
+- return s_shareList && s_shareList->contains( path );
++ //return s_shareList && s_shareList->contains( path );
++ if( (*s_shareMap).contains(path) && !((*s_shareMap)[path].isEmpty()) ) {
++ ret+=1;
++ if( (*s_shareMap)[path].find("readwrite") != -1 )
++ ret+=2;
++ }
++
++ return ret;
+ }
+
+ KFileShare::Authorization KFileShare::authorization()
+@@ -230,17 +249,30 @@
+
+ bool KFileShare::setShared( const QString& path, bool shared )
+ {
++ return SuSEsetShared( path, shared, false );
++}
++
++bool KFileShare::SuSEsetShared( const QString& path, bool shared, bool rw )
++{
+ if (! KFileShare::sharingEnabled() ||
+ KFileShare::shareMode() == Advanced)
+ return false;
+
+- kdDebug(7000) << "KFileShare::setShared " << path << "," << shared << endl;
+ QString exe = KFileShare::findExe( "fileshareset" );
+ if (exe.isEmpty())
+ return false;
+-
++
++ // we want to share, so we kick it first - just to be sure
+ KProcess proc;
+ proc << exe;
++ proc << "--remove";
++ proc << path;
++ proc.start( KProcess::Block );
++ proc.clearArguments();
++
++ proc << exe;
++ if( rw )
++ proc << "--rw";
+ if ( shared )
+ proc << "--add";
+ else
+--- kio/kio/kfileshare.h
++++ kio/kio/kfileshare.h 2004/08/06 08:38:31
+@@ -65,7 +65,7 @@
+ /**
+ * Call this to know if a directory is currently shared
+ */
+- static bool isDirectoryShared( const QString& path );
++ static int isDirectoryShared( const QString& path );
+
+ enum Authorization { NotInitialized, ErrorNotFound, Authorized, UserNotAllowed };
+ /**
+@@ -83,7 +83,12 @@
+ * @returns wether the perl script was successful
+ */
+ static bool setShared( const QString& path, bool shared );
+-
++
++ /*
++ * SuSE only enhancement for now
++ */
++ static bool SuSEsetShared( const QString& path, bool shared, bool ro );
++
+ /**
+ * The used share mode.
+ * Simple means that the simple sharing dialog is used and
+@@ -132,7 +137,8 @@
+
+ private:
+ static Authorization s_authorization;
+- static QStringList* s_shareList;
++// static QStringList* s_shareList;
++ static QMap<QString,QString>* s_shareMap;
+ static ShareMode s_shareMode;
+ static bool s_sambaEnabled;
+ static bool s_nfsEnabled;
diff --git a/opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff b/opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff
new file mode 100644
index 000000000..bac35d2b4
--- /dev/null
+++ b/opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff
@@ -0,0 +1,16 @@
+Index: dcop/dcopidlng/dcopidlng
+===================================================================
+--- dcop/dcopidlng/dcopidlng.orig
++++ dcop/dcopidlng/dcopidlng
+@@ -5,7 +5,11 @@ trap "rm -f dcopidlng.stderr.$$" 0 1 2 1
+ if test -z "$KDECONFIG"; then
+ KDECONFIG=kde-config
+ fi
++if type kde-config > /dev/null; then
+ LIBDIR="`$KDECONFIG --install data --expandvars`/dcopidlng"
++else
++LIBDIR="${0%/*}"
++fi
+ perl -I"$LIBDIR" "$LIBDIR/kalyptus" --allow_k_dcop_accessors -f dcopidl $1 2> dcopidlng.stderr.$$
+ RET=$?
+ if [ $RET -ne 0 ]
diff --git a/opensuse/tdelibs/fix-gnome-help-support.diff b/opensuse/tdelibs/fix-gnome-help-support.diff
new file mode 100644
index 000000000..c9778f9bf
--- /dev/null
+++ b/opensuse/tdelibs/fix-gnome-help-support.diff
@@ -0,0 +1,130 @@
+Index: kdoctools/kio_help.cpp
+===================================================================
+--- kdoctools/kio_help.cpp.orig
++++ kdoctools/kio_help.cpp
+@@ -44,7 +44,27 @@ QString HelpProtocol::langLookup(const Q
+ // assemble the local search paths
+ const QStringList localDoc = KGlobal::dirs()->resourceDirs("html");
+
++ kdDebug( 7119 ) << "Looking up help for: " << fname << endl;
++ QString _fname = fname;
++
++ QString path;
++ int slash = _fname.findRev ('/');
++ if (slash == -1 || slash == 0) {
++ path = _fname;
++ _fname = "";
++ } else {
++ path = _fname.left (slash);
++ _fname = _fname.right (_fname.length() - slash);
++ }
++
+ QStringList langs = KGlobal::locale()->languageList();
++ QStringList::ConstIterator lang;
++ for (lang = langs.begin(); lang != langs.end(); ++lang)
++ if ((*lang).left(2) == "en")
++ search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(_fname));
++ else
++ search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname));
++
+ langs.append( "en" );
+ langs.remove( "C" );
+
+@@ -60,7 +80,7 @@ QString HelpProtocol::langLookup(const Q
+ {
+ QStringList::ConstIterator lang;
+ for (lang = langs.begin(); lang != langs.end(); ++lang)
+- search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname));
++ search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname));
+ }
+
+ // try to locate the file
+@@ -81,6 +101,15 @@ QString HelpProtocol::langLookup(const Q
+ if (info.exists() && info.isFile() && info.isReadable())
+ return *it;
+ }
++
++ if ( ( *it ).right( 5 ) == ".html" )
++ {
++ QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml";
++ kdDebug( 7119 ) << "Looking for help in: " << file << endl;
++ info.setFile(file);
++ if (info.exists() && info.isFile() && info.isReadable())
++ return *it;
++ }
+ }
+
+
+@@ -100,7 +129,7 @@ QString HelpProtocol::lookupFile(const Q
+ result = langLookup(path);
+ if (result.isEmpty())
+ {
+- result = langLookup(path+"/index.html");
++ result = langLookup(path + "/index.html");
+ if (!result.isEmpty())
+ {
+ KURL red( "help:/" );
+@@ -190,12 +219,26 @@ void HelpProtocol::get( const KURL& url
+ }
+ } else {
+ QString docbook_file = file.left(file.findRev('/')) + "/index.docbook";
++ int last_slash = file.findRev('/');
++ if (last_slash != -1 && last_slash != 0) {
++ int slash2 = file.findRev('/', last_slash -1);
++ if (slash2 != -1 && slash2 != 0) {
++ int slash3 = file.findRev('/', slash2 - 1);
++ if (slash3 != -1) {
++ QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml";
++ kdDebug( 7119 ) << "xml_file " << xml_file << endl;
++ QFileInfo fi(xml_file);
++ if (fi.exists())
++ docbook_file = xml_file;
++ }
++ }
++ }
+ if (!KStandardDirs::exists(file)) {
+ file = docbook_file;
+ } else {
+ QFileInfo fi(file);
+ if (fi.isDir()) {
+- file = file + "/index.docbook";
++ file = docbook_file;
+ } else {
+ if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) {
+ get_file( target );
+@@ -238,7 +281,11 @@ void HelpProtocol::get( const KURL& url
+ mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl"));
+ if ( !mParsed.isEmpty() ) {
+ infoMessage( i18n( "Saving to cache" ) );
+- QString cache = file.left( file.length() - 7 );
++ QString cache;
++ if (file.endsWith(".xml"))
++ cache = file.left( file.length() - strlen ("xml") );
++ else
++ cache = file.left( file.length() - strlen ("docbook") );
+ saveToCache( mParsed, locateLocal( "cache",
+ "kio_help" + cache +
+ "cache.bz2" ) );
+Index: kdoctools/xslt.cpp
+===================================================================
+--- kdoctools/xslt.cpp.orig
++++ kdoctools/xslt.cpp
+@@ -278,10 +278,16 @@ static bool readCache( const QString &fi
+ QString lookForCache( const QString &filename )
+ {
+ kdDebug() << "lookForCache " << filename << endl;
+- assert( filename.endsWith( ".docbook" ) );
++ assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) );
+ assert( filename.at( 0 ) == '/' );
+
+- QString cache = filename.left( filename.length() - 7 );
++ QString cache;
++
++ if (filename.endsWith( ".xml" ))
++ cache = filename.left( filename.length() - strlen ("xml") );
++ else
++ cache = filename.left( filename.length() - strlen ("docbook") );
++
+ QString output;
+ if ( readCache( filename, cache + "cache.bz2", output) )
+ return output;
diff --git a/opensuse/tdelibs/fix-gnome-help-support_legacy.diff b/opensuse/tdelibs/fix-gnome-help-support_legacy.diff
new file mode 100644
index 000000000..0e2922e41
--- /dev/null
+++ b/opensuse/tdelibs/fix-gnome-help-support_legacy.diff
@@ -0,0 +1,126 @@
+--- kdoctools/kio_help.cpp
++++ kdoctools/kio_help.cpp
+@@ -44,7 +44,27 @@
+ // assemble the local search paths
+ const QStringList localDoc = KGlobal::dirs()->resourceDirs("html");
+
++ kdDebug( 7119 ) << "Looking up help for: " << fname << endl;
++ QString _fname = fname;
++
++ QString path;
++ int slash = _fname.findRev ('/');
++ if (slash == -1 || slash == 0) {
++ path = _fname;
++ _fname = "";
++ } else {
++ path = _fname.left (slash);
++ _fname = _fname.right (_fname.length() - slash);
++ }
++
+ QStringList langs = KGlobal::locale()->languageList();
++ QStringList::ConstIterator lang;
++ for (lang = langs.begin(); lang != langs.end(); ++lang)
++ if ((*lang).left(2) == "en")
++ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(_fname));
++ else
++ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname));
++
+ langs.append( "en" );
+ langs.remove( "C" );
+
+@@ -60,7 +80,7 @@
+ {
+ QStringList::ConstIterator lang;
+ for (lang = langs.begin(); lang != langs.end(); ++lang)
+- search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname));
++ search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname));
+ }
+
+ // try to locate the file
+@@ -81,6 +101,15 @@
+ if (info.exists() && info.isFile() && info.isReadable())
+ return *it;
+ }
++
++ if ( ( *it ).right( 5 ) == ".html" )
++ {
++ QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml";
++ kdDebug( 7119 ) << "Looking for help in: " << file << endl;
++ info.setFile(file);
++ if (info.exists() && info.isFile() && info.isReadable())
++ return *it;
++ }
+ }
+
+
+@@ -100,7 +129,7 @@
+ result = langLookup(path);
+ if (result.isEmpty())
+ {
+- result = langLookup(path+"/index.html");
++ result = langLookup(path + "/index.html");
+ if (!result.isEmpty())
+ {
+ KURL red( "help:/" );
+@@ -190,12 +219,26 @@
+ }
+ } else {
+ QString docbook_file = file.left(file.findRev('/')) + "/index.docbook";
++ int last_slash = file.findRev('/');
++ if (last_slash != -1 && last_slash != 0) {
++ int slash2 = file.findRev('/', last_slash -1);
++ if (slash2 != -1 && slash2 != 0) {
++ int slash3 = file.findRev('/', slash2 - 1);
++ if (slash3 != -1) {
++ QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml";
++ kdDebug( 7119 ) << "xml_file " << xml_file << endl;
++ QFileInfo fi(xml_file);
++ if (fi.exists())
++ docbook_file = xml_file;
++ }
++ }
++ }
+ if (!KStandardDirs::exists(file)) {
+ file = docbook_file;
+ } else {
+ QFileInfo fi(file);
+ if (fi.isDir()) {
+- file = file + "/index.docbook";
++ file = docbook_file;
+ } else {
+ if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) {
+ get_file( target );
+@@ -238,7 +281,11 @@
+ mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl"));
+ if ( !mParsed.isEmpty() ) {
+ infoMessage( i18n( "Saving to cache" ) );
+- QString cache = file.left( file.length() - 7 );
++ QString cache;
++ if (file.endsWith(".xml"))
++ cache = file.left( file.length() - strlen ("xml") );
++ else
++ cache = file.left( file.length() - strlen ("docbook") );
+ saveToCache( mParsed, locateLocal( "cache",
+ "kio_help" + cache +
+ "cache.bz2" ) );
+--- kdoctools/xslt.cpp
++++ kdoctools/xslt.cpp
+@@ -274,10 +274,16 @@
+ QString lookForCache( const QString &filename )
+ {
+ kdDebug() << "lookForCache " << filename << endl;
+- assert( filename.endsWith( ".docbook" ) );
++ assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) );
+ assert( filename.at( 0 ) == '/' );
+
+- QString cache = filename.left( filename.length() - 7 );
++ QString cache;
++
++ if (filename.endsWith( ".xml" ))
++ cache = filename.left( filename.length() - strlen ("xml") );
++ else
++ cache = filename.left( filename.length() - strlen ("docbook") );
++
+ QString output;
+ if ( readCache( filename, cache + "cache.bz2", output) )
+ return output;
diff --git a/opensuse/tdelibs/fix-kdemm-build.diff b/opensuse/tdelibs/fix-kdemm-build.diff
new file mode 100644
index 000000000..befe5e324
--- /dev/null
+++ b/opensuse/tdelibs/fix-kdemm-build.diff
@@ -0,0 +1,88 @@
+Index: kdemm/backend.h
+===================================================================
+--- kdemm/backend.h.orig
++++ kdemm/backend.h
+@@ -41,7 +41,7 @@ namespace Multimedia
+ * \author Matthias Kretz <kretz@kde.org>
+ * \since 4.0
+ */
+- class Backend : public QObject
++ class KDE_EXPORT Backend : public QObject
+ {
+ Q_OBJECT
+ public:
+Index: kdemm/channel.h
+===================================================================
+--- kdemm/channel.h.orig
++++ kdemm/channel.h
+@@ -34,7 +34,7 @@ namespace Multimedia
+ * \author Matthias Kretz <kretz@kde.org>
+ * \since 4.0
+ */
+- class Channel : public QObject, virtual public MixerIface
++ class KDE_EXPORT Channel : public QObject, virtual public MixerIface
+ {
+ Q_OBJECT
+ public:
+Index: kdemm/factory.h
+===================================================================
+--- kdemm/factory.h.orig
++++ kdemm/factory.h
+@@ -64,7 +64,7 @@ class VideoPlayer;
+ * \author Matthias Kretz <kretz@kde.org>
+ * \since 4.0
+ */
+-class Factory : public QObject, public DCOPObject
++class KDE_EXPORT Factory : public QObject, public DCOPObject
+ {
+ Q_OBJECT
+ public:
+Index: kdemm/player.h
+===================================================================
+--- kdemm/player.h.orig
++++ kdemm/player.h
+@@ -20,6 +20,7 @@
+ #ifndef PLAYOBJECT_H
+ #define PLAYOBJECT_H
+
++#include <kdelibs_export.h>
+ #include <qobject.h>
+
+ class KURL;
+@@ -35,7 +36,7 @@ namespace Multimedia
+ * \author Matthias Kretz <kretz@kde.org>
+ * \since 4.0
+ */
+- class Player : public QObject
++ class KDE_EXPORT Player : public QObject
+ {
+ Q_OBJECT
+ public:
+Index: kdemm/simpleplayer.h
+===================================================================
+--- kdemm/simpleplayer.h.orig
++++ kdemm/simpleplayer.h
+@@ -32,7 +32,7 @@ namespace KDE
+ namespace Multimedia
+ {
+
+-class SimplePlayer : public QObject
++class KDE_EXPORT SimplePlayer : public QObject
+ {
+ Q_OBJECT
+ public:
+Index: kdemm/mixeriface.h
+===================================================================
+--- kdemm/mixeriface.h.orig
++++ kdemm/mixeriface.h
+@@ -21,8 +21,9 @@
+ #define MIXERIFACE_H
+
+ #include <dcopobject.h>
++#include <kdelibs_export.h>
+
+-class MixerIface : public DCOPObject
++class KDE_EXPORT MixerIface : public DCOPObject
+ {
+ K_DCOP
+ k_dcop:
diff --git a/opensuse/tdelibs/fix-kerberos-printing.diff b/opensuse/tdelibs/fix-kerberos-printing.diff
new file mode 100644
index 000000000..0276cdd06
--- /dev/null
+++ b/opensuse/tdelibs/fix-kerberos-printing.diff
@@ -0,0 +1,37 @@
+Index: kdeprint/management/smbview.cpp
+===================================================================
+--- kdeprint/management/smbview.cpp.orig
++++ kdeprint/management/smbview.cpp
+@@ -187,13 +187,26 @@ void SmbView::setOpen(QListViewItem *ite
+ }
+ else if (item->depth() == 1)
+ { // opening server
++ char *krb5ccname = getenv ("KRB5CCNAME");
+ m_current = item;
+- *m_proc << "smbclient -N -L ";
+- *m_proc << KProcess::quote(item->text(0));
+- *m_proc << " -W ";
+- *m_proc << KProcess::quote(item->parent()->text(0));
+- *m_proc << " -A ";
+- *m_proc << KProcess::quote(m_passwdFile->name());
++ if (krb5ccname)
++ {
++ *m_proc << "smbclient -k -N -L ";
++ }
++ else
++ {
++ *m_proc << "smbclient -N -L ";
++ }
++ *m_proc << KProcess::quote (item->text (0));
++ *m_proc << " -W ";
++ *m_proc << KProcess::quote (item->parent ()->
++ text (0));
++ if (!krb5ccname)
++ {
++ *m_proc << " -A ";
++ *m_proc << KProcess::
++ quote (m_passwdFile->name ());
++ }
+ startProcess(ShareListing);
+ }
+ }
diff --git a/opensuse/tdelibs/fix-macmenu.patch b/opensuse/tdelibs/fix-macmenu.patch
new file mode 100644
index 000000000..4b8f6b1cf
--- /dev/null
+++ b/opensuse/tdelibs/fix-macmenu.patch
@@ -0,0 +1,11 @@
+--- kdeui/kmenubar.cpp.sav 2008-03-08 17:32:38.000000000 +0100
++++ kdeui/kmenubar.cpp 2009-08-30 09:27:29.000000000 +0200
+@@ -308,7 +308,7 @@ void KMenuBar::updateFallbackSize()
+ if( d->fallback_mode )
+ {
+ d->fallback_mode = false;
+-// KWin::setStrut( winId(), 0, 0, 0, 0 ); KWin will set strut as it will see fit
++ KWin::setStrut( winId(), 0, 0, 0, 0 );
+ setMinimumSize( 0, 0 );
+ setMaximumSize( QWIDGETSIZE_MAX, QWIDGETSIZE_MAX );
+ updateMenuBarSize();
diff --git a/opensuse/tdelibs/fix-qxembed.diff b/opensuse/tdelibs/fix-qxembed.diff
new file mode 100644
index 000000000..8ea18d69d
--- /dev/null
+++ b/opensuse/tdelibs/fix-qxembed.diff
@@ -0,0 +1,80 @@
+Index: kdeui/qxembed.h
+===================================================================
+--- kdeui/qxembed.h.orig
++++ kdeui/qxembed.h
+@@ -191,6 +191,11 @@ public:
+ void enterWhatsThisMode(); // temporary, fix in Qt (Matthias, Mon Jul 17 15:20:55 CEST 2000 )
+ virtual void reparent( QWidget * parent, WFlags f, const QPoint & p, bool showIt = false );
+
++ /**
++ * @internal
++ */
++ void updateEmbeddedFocus( bool hasfocus );
++
+ signals:
+ /**
+ * This signal is emitted when the embedded window has been lost (destroyed or reparented away)
+Index: kdeui/qxembed.cpp
+===================================================================
+--- kdeui/qxembed.cpp.orig
++++ kdeui/qxembed.cpp
+@@ -314,8 +314,8 @@ bool QXEmbedAppFilter::eventFilter( QObj
+ if ( qApp->focusWidget() == o &&
+ ((QPublicWidget*)qApp->focusWidget()->topLevelWidget())->topData()->embedded ) {
+ QFocusEvent* fe = (QFocusEvent*) e;
+- if ( obeyFocus || fe->reason() == QFocusEvent::Mouse ||
+- fe->reason() == QFocusEvent::Shortcut ) {
++ if ( obeyFocus || fe->reason() != QFocusEvent::ActiveWindow /*|| fe->reason() == QFocusEvent::Mouse ||
++ fe->reason() == QFocusEvent::Shortcut*/ ) {
+ // L0614: A widget in the embedded client was just given the Qt focus.
+ // Variable `obeyFocus' suggests that this is the result of mouse
+ // activity in the client. The XEMBED_REQUEST_FOCUS message causes
+@@ -478,8 +478,11 @@ static int qxembed_x11_event_filter( XEv
+ switch ( detail ) {
+ case XEMBED_FOCUS_CURRENT:
+ // L0683: Set focus on saved focus widget
+- if ( focusCurrent )
++ if ( focusCurrent ) {
+ focusCurrent->setFocus();
++ if( QXEmbed* emb = dynamic_cast< QXEmbed* >( focusCurrent ))
++ emb->updateEmbeddedFocus( true );
++ }
+ else if ( !w->topLevelWidget()->focusWidget() )
+ w->topLevelWidget()->setFocus();
+ break;
+@@ -511,6 +514,8 @@ static int qxembed_x11_event_filter( XEv
+ // We first record what the focus widget was
+ // and clear the Qt focus.
+ if ( w->topLevelWidget()->focusWidget() ) {
++ if( QXEmbed* emb = dynamic_cast< QXEmbed* >( w->topLevelWidget()->focusWidget()))
++ emb->updateEmbeddedFocus( false );
+ focusMap->insert( w->topLevelWidget(),
+ new QGuardedPtr<QWidget>(w->topLevelWidget()->focusWidget() ) );
+ w->topLevelWidget()->focusWidget()->clearFocus();
+@@ -919,6 +924,17 @@ void QXEmbed::focusOutEvent( QFocusEvent
+ }
+
+
++// When QXEmbed has Qt focus and gets/loses X focus, make sure the client knows
++// about the state of the focus.
++void QXEmbed::updateEmbeddedFocus( bool hasfocus ){
++ if (!window || d->xplain)
++ return;
++ if( hasfocus )
++ sendXEmbedMessage( window, XEMBED_FOCUS_IN, XEMBED_FOCUS_CURRENT);
++ else
++ sendXEmbedMessage( window, XEMBED_FOCUS_OUT);
++}
++
+ // L1600: Helper for QXEmbed::embed()
+ // Check whether a window is in withdrawn state.
+ static bool wstate_withdrawn( WId winid )
+@@ -1161,6 +1177,8 @@ bool QXEmbed::x11Event( XEvent* e)
+ // L2085: The client asks for the focus.
+ case XEMBED_REQUEST_FOCUS:
+ if( ((QPublicWidget*)topLevelWidget())->topData()->embedded ) {
++ focusMap->remove( topLevelWidget() );
++ focusMap->insert( topLevelWidget(), new QGuardedPtr<QWidget>( this ));
+ WId window = ((QPublicWidget*)topLevelWidget())->topData()->parentWinId;
+ sendXEmbedMessage( window, XEMBED_REQUEST_FOCUS );
+ } else {
diff --git a/opensuse/tdelibs/flash-player-non-oss.diff b/opensuse/tdelibs/flash-player-non-oss.diff
new file mode 100644
index 000000000..e3bcdc3e4
--- /dev/null
+++ b/opensuse/tdelibs/flash-player-non-oss.diff
@@ -0,0 +1,44 @@
+Index: khtml/rendering/render_frames.cpp
+===================================================================
+--- khtml/rendering/render_frames.cpp.orig
++++ khtml/rendering/render_frames.cpp
+@@ -940,14 +940,33 @@ void RenderPartObject::slotPartLoadingEr
+ // Prepare the URL to show in the question (host only if http, to make it short)
+ KURL pluginPageURL( embed->pluginPage );
+ QString shortURL = pluginPageURL.protocol() == "http" ? pluginPageURL.host() : pluginPageURL.prettyURL();
+- int res = KMessageBox::questionYesNo( m_view,
+- i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg(shortURL),
++
++ int res;
++ if (mimeName.startsWith("Shockwave Flash",false))
++ {
++ res = KMessageBox::questionYesNo( m_view,
++ i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg("openSUSE"),
+ i18n("Missing Plugin"), i18n("Download"), i18n("Do Not Download"), QString("plugin-")+serviceType);
+- if ( res == KMessageBox::Yes )
++
++ if ( res == KMessageBox::Yes )
++ {
++ // Open YMP file
++ KURL ymp_flash ("http://download.opensuse.org/YaST/flash-player.ymp");
++ ext->openURLRequest( ymp_flash );
++ return;
++ }
++ }
++ else
+ {
+- // Display vendor download page
+- ext->createNewWindow( pluginPageURL );
+- return;
++ res = KMessageBox::questionYesNo( m_view,
++ i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg(shortURL),
++ i18n("Missing Plugin"), i18n("Download"), i18n("Do Not Download"), QString("plugin-")+serviceType);
++ if ( res == KMessageBox::Yes )
++ {
++ // Display vendor download page
++ ext->createNewWindow( pluginPageURL );
++ return;
++ }
+ }
+ }
+ }
diff --git a/opensuse/tdelibs/fontconfig-reverse-lookup.diff b/opensuse/tdelibs/fontconfig-reverse-lookup.diff
new file mode 100644
index 000000000..af32e5600
--- /dev/null
+++ b/opensuse/tdelibs/fontconfig-reverse-lookup.diff
@@ -0,0 +1,137 @@
+Index: kdeui/Makefile.am
+===================================================================
+--- kdeui/Makefile.am.orig
++++ kdeui/Makefile.am
+@@ -20,7 +20,7 @@
+
+ SUBDIRS = . kdetrayproxy tests about
+
+-INCLUDES= -I$(top_srcdir)/kdefx -I$(top_srcdir)/interfaces $(all_includes)
++INCLUDES= -I/usr/include/freetype2/ -I$(top_srcdir)/kdefx -I$(top_srcdir)/interfaces $(all_includes)
+
+ # For the future: examine if condensing the tons of *_LDFLAGS variables
+ # into $(all_libraries) isn't better
+Index: kdeui/kaction.cpp
+===================================================================
+--- kdeui/kaction.cpp.orig
++++ kdeui/kaction.cpp
+@@ -42,6 +42,17 @@
+ #include <ktoolbar.h>
+ #include <ktoolbarbutton.h>
+
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <X11/Xdefs.h>
++#include <X11/Xlib.h>
++#include <X11/Xatom.h>
++#include <X11/Intrinsic.h>
++#include <X11/StringDefs.h>
++#include <X11/Shell.h>
++
++#include <X11/Xft/Xft.h>
++
+ /**
+ * How it works.
+ * KActionCollection is an organizing container for KActions.
+Index: kdeui/kactionclasses.cpp
+===================================================================
+--- kdeui/kactionclasses.cpp.orig
++++ kdeui/kactionclasses.cpp
+@@ -27,6 +27,9 @@
+ #include "kactionclasses.h"
+
+ #include <assert.h>
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <fontconfig/fontconfig.h>
+
+ #include <qcursor.h>
+ #include <qclipboard.h>
+@@ -35,6 +38,7 @@
+ #include <qwhatsthis.h>
+ #include <qtimer.h>
+ #include <qfile.h>
++#include <qregexp.h>
+
+ #include <dcopclient.h>
+ #include <dcopref.h>
+@@ -1498,7 +1502,24 @@ void KFontAction::setFont( const QString
+ return;
+ }
+ }
+- kdDebug(129) << "Font not found " << family.lower() << endl;
++
++ // nothing matched yet, try a fontconfig reverse lookup and
++ // check again to solve an alias
++ FcPattern *pattern = NULL;
++ FcConfig *config = NULL;
++ QString realFamily;
++ QRegExp regExp("[-:]");
++ pattern = FcNameParse( (unsigned char*) family.ascii() );
++ FcDefaultSubstitute(pattern);
++ FcConfigSubstitute (config, pattern, FcMatchPattern);
++ pattern = FcFontMatch(NULL, pattern, NULL);
++ realFamily = (char*)FcNameUnparse(pattern);
++ realFamily.remove(realFamily.find(regExp), realFamily.length());
++
++ if ( !realFamily.isEmpty() && realFamily != family )
++ setFont( realFamily );
++ else
++ kdDebug(129) << "Font not found " << family.lower() << endl;
+ }
+
+ int KFontAction::plug( QWidget *w, int index )
+Index: kdeui/kfontcombo.cpp
+===================================================================
+--- kdeui/kfontcombo.cpp.orig
++++ kdeui/kfontcombo.cpp
+@@ -20,6 +20,7 @@
+ #include <qfontdatabase.h>
+ #include <qlistbox.h>
+ #include <qpainter.h>
++#include <qregexp.h>
+
+ #include <kcharsets.h>
+ #include <kconfig.h>
+@@ -29,6 +30,18 @@
+ #include "kfontcombo.h"
+ #include "kfontcombo.moc"
+
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <fontconfig/fontconfig.h>
++#include <X11/Xlib.h>
++#include <X11/Xatom.h>
++#include <X11/Intrinsic.h>
++#include <X11/StringDefs.h>
++#include <X11/Shell.h>
++
++#include <X11/Xft/Xft.h>
++
++
+ struct KFontComboPrivate
+ {
+ KFontComboPrivate()
+@@ -227,6 +240,22 @@ void KFontCombo::setCurrentFont(const QS
+ return;
+ }
+ }
++
++ // nothing matched yet, try a fontconfig reverse lookup and
++ // check again to solve an alias
++ FcPattern *pattern = NULL;
++ FcConfig *config = NULL;
++ QString realFamily;
++ QRegExp regExp("[-:]");
++ pattern = FcNameParse( (unsigned char*) family.ascii() );
++ FcDefaultSubstitute(pattern);
++ FcConfigSubstitute (config, pattern, FcMatchPattern);
++ pattern = FcFontMatch(NULL, pattern, NULL);
++ realFamily = (char*)FcNameUnparse(pattern);
++ realFamily.remove(realFamily.find(regExp), realFamily.length());
++
++ if ( !realFamily.isEmpty() && realFamily != family )
++ setCurrentFont( realFamily );
+ }
+
+ void KFontCombo::slotModified( int )
diff --git a/opensuse/tdelibs/gcc44.diff b/opensuse/tdelibs/gcc44.diff
new file mode 100644
index 000000000..f191e1202
--- /dev/null
+++ b/opensuse/tdelibs/gcc44.diff
@@ -0,0 +1,20 @@
+--- kioslave/ftp/ftp.cc.sav 2009-05-29 13:38:11.000000000 +0200
++++ kioslave/ftp/ftp.cc 2009-05-29 13:38:38.000000000 +0200
+@@ -876,7 +876,7 @@ int Ftp::ftpOpenPASVDataConnection()
+ // The usual answer is '227 Entering Passive Mode. (160,39,200,55,6,245)'
+ // but anonftpd gives '227 =160,39,200,55,6,245'
+ int i[6];
+- char *start = strchr(ftpResponse(3), '(');
++ const char *start = strchr(ftpResponse(3), '(');
+ if ( !start )
+ start = strchr(ftpResponse(3), '=');
+ if ( !start ||
+@@ -931,7 +931,7 @@ int Ftp::ftpOpenEPSVDataConnection()
+ return ERR_INTERNAL;
+ }
+
+- char *start = strchr(ftpResponse(3), '|');
++ const char *start = strchr(ftpResponse(3), '|');
+ if ( !start || sscanf(start, "|||%d|", &portnum) != 1)
+ return ERR_INTERNAL;
+
diff --git a/opensuse/tdelibs/gcc45.diff b/opensuse/tdelibs/gcc45.diff
new file mode 100644
index 000000000..a4b8679bf
--- /dev/null
+++ b/opensuse/tdelibs/gcc45.diff
@@ -0,0 +1,31 @@
+------------------------------------------------------------------------
+r1074156 | mueller | 2010-01-13 16:02:53 +0100 (Mi, 13. Jan 2010) | 2 Zeilen
+
+fix build with gcc 4.5
+
+------------------------------------------------------------------------
+Index: kate/part/katehighlight.cpp
+===================================================================
+--- kate/part/katehighlight.cpp (Revision 1074155)
++++ kate/part/katehighlight.cpp (Revision 1074156)
+@@ -3225,7 +3225,7 @@ void KateHlManager::getDefaults(uint sch
+ list.append(charAttribute);
+
+ KateAttribute* string = new KateAttribute();
+- string->setTextColor(QColor::QColor("#D00"));
++ string->setTextColor(QColor("#D00"));
+ string->setSelectedTextColor(Qt::red);
+ list.append(string);
+
+@@ -3242,9 +3242,9 @@ void KateHlManager::getDefaults(uint sch
+
+ KateAttribute* alert = new KateAttribute();
+ alert->setTextColor(Qt::black);
+- alert->setSelectedTextColor( QColor::QColor("#FCC") );
++ alert->setSelectedTextColor( QColor("#FCC") );
+ alert->setBold(true);
+- alert->setBGColor( QColor::QColor("#FCC") );
++ alert->setBGColor( QColor("#FCC") );
+ list.append(alert);
+
+ KateAttribute* functionAttribute = new KateAttribute();
diff --git a/opensuse/tdelibs/google-mail.diff b/opensuse/tdelibs/google-mail.diff
new file mode 100644
index 000000000..59b132529
--- /dev/null
+++ b/opensuse/tdelibs/google-mail.diff
@@ -0,0 +1,18 @@
+Index: khtml/html/html_elementimpl.cpp
+===================================================================
+--- khtml/html/html_elementimpl.cpp.orig
++++ khtml/html/html_elementimpl.cpp
+@@ -565,6 +565,13 @@ DocumentFragment HTMLElementImpl::create
+
+ void HTMLElementImpl::setInnerHTML( const DOMString &html, int &exceptioncode )
+ {
++ // Works line innerText in Gecko
++ // ### test if needed for ID_SCRIPT as well.
++ if ( id() == ID_STYLE ) {
++ setInnerText(html, exceptioncode);
++ return;
++ }
++
+ DocumentFragment fragment = createContextualFragment( html );
+ if ( fragment.isNull() ) {
+ exceptioncode = DOMException::NO_MODIFICATION_ALLOWED_ERR;
diff --git a/opensuse/tdelibs/ignore-inline-menu.diff b/opensuse/tdelibs/ignore-inline-menu.diff
new file mode 100644
index 000000000..106bc5284
--- /dev/null
+++ b/opensuse/tdelibs/ignore-inline-menu.diff
@@ -0,0 +1,18 @@
+--- kded/vfolder_menu.cpp 2009/11/07 07:01:12 1.1
++++ kded/vfolder_menu.cpp 2009/11/07 07:01:42
+@@ -1496,6 +1496,7 @@
+ else
+ kdDebug()<<" Error in parsing show_empty attribute :"<<str<<endl;
+ }
++#if 0
+ if ( e.hasAttribute( "inline" ) )
+ {
+ QString str = e.attribute( "inline" );
+@@ -1534,6 +1535,7 @@
+ else
+ kdDebug()<<" Error in parsing inline_alias attribute :"<<str<<endl;
+ }
++#endif
+ if( !option.isEmpty())
+ {
+ option = option.prepend(":O");
diff --git a/opensuse/tdelibs/integrate-global-pixmaps-10.1.diff b/opensuse/tdelibs/integrate-global-pixmaps-10.1.diff
new file mode 100644
index 000000000..552716400
--- /dev/null
+++ b/opensuse/tdelibs/integrate-global-pixmaps-10.1.diff
@@ -0,0 +1,26 @@
+Index: pics/crystalsvg/index.theme
+===================================================================
+--- pics/crystalsvg/index.theme (Revision 505161)
++++ pics/crystalsvg/index.theme (Arbeitskopie)
+@@ -78,7 +78,7 @@
+ Comment[zh_HK]=由 Everaldo.com 提供的圖示主題
+ DisplayDepth=32
+
+-Inherits=hicolor
++Inherits=suseadds,hicolor
+
+ Example=folder
+ LinkOverlay=link_overlay
+Index: kdecore/kicontheme.cpp
+===================================================================
+--- kdecore/kicontheme.cpp (Revision 458165)
++++ kdecore/kicontheme.cpp (Arbeitskopie)
+@@ -146,6 +146,8 @@
+ if ( name != "crystalsvg" )
+ for ( QStringList::Iterator it = mInherits.begin(); it != mInherits.end(); ++it )
+ if ( *it == "default" || *it == "hicolor" ) *it="crystalsvg";
++ if ( name == "hicolor" )
++ mInherits = "crystalsuse";
+
+ d->hidden = cfg.readBoolEntry("Hidden", false);
+ d->example = cfg.readPathEntry("Example");
diff --git a/opensuse/tdelibs/integrate-global-pixmaps-new.diff b/opensuse/tdelibs/integrate-global-pixmaps-new.diff
new file mode 100644
index 000000000..2d3a831b7
--- /dev/null
+++ b/opensuse/tdelibs/integrate-global-pixmaps-new.diff
@@ -0,0 +1,13 @@
+Index: kdecore/kicontheme.cpp
+===================================================================
+--- kdecore/kicontheme.cpp.orig
++++ kdecore/kicontheme.cpp
+@@ -150,6 +150,8 @@ KIconTheme::KIconTheme(const QString& na
+ if ( name != "crystalsvg" )
+ for ( QStringList::Iterator it = mInherits.begin(); it != mInherits.end(); ++it )
+ if ( *it == "default" || *it == "hicolor" ) *it="crystalsvg";
++ if ( name == "hicolor" )
++ mInherits = "crystalsuse";
+
+ d->hidden = cfg.readBoolEntry("Hidden", false);
+ d->example = cfg.readPathEntry("Example");
diff --git a/opensuse/tdelibs/kcontrol_crash_patch.diff b/opensuse/tdelibs/kcontrol_crash_patch.diff
new file mode 100644
index 000000000..22b3749f6
--- /dev/null
+++ b/opensuse/tdelibs/kcontrol_crash_patch.diff
@@ -0,0 +1,11 @@
+--- kdecore/svgicons/ksvgiconengine.cpp.orig 2011-03-15 01:29:21.172970849 +0300
++++ kdecore/svgicons/ksvgiconengine.cpp 2011-03-15 01:42:09.904779795 +0300
+@@ -538,6 +538,8 @@
+
+ bool KSVGIconEngine::load(int width, int height, const QString &path)
+ {
++ if(path.isNull()) return false;
++
+ QDomDocument svgDocument("svg");
+ QFile file(path);
+
diff --git a/opensuse/tdelibs/kde3rc b/opensuse/tdelibs/kde3rc
new file mode 100644
index 000000000..3a5af96d9
--- /dev/null
+++ b/opensuse/tdelibs/kde3rc
@@ -0,0 +1,11 @@
+[Directories]
+prefixes=/etc/opt/kde3/
+userProfileMapFile=/etc/kde-user-profile
+profileDirsPrefix=/var/lib/kde-profiles/
+dir_wallpaper=/usr/share/wallpapers
+
+[Directories-default]
+ProfileDescription=Default Profile
+ProfileInstallUser=root
+prefixes=/var/lib/kde-profiles/default/
+
diff --git a/opensuse/tdelibs/kde3rc.dif b/opensuse/tdelibs/kde3rc.dif
new file mode 100644
index 000000000..2a33aaf1e
--- /dev/null
+++ b/opensuse/tdelibs/kde3rc.dif
@@ -0,0 +1,17 @@
+Index: kdecore/kconfigbackend.cpp
+===================================================================
+--- kdecore/kconfigbackend.cpp.orig
++++ kdecore/kconfigbackend.cpp
+@@ -352,7 +352,11 @@ bool KConfigINIBackEnd::parseConfigFiles
+ #ifdef Q_WS_WIN
+ QString etc_kderc = QFile::decodeName( QCString(getenv("WINDIR")) + "\\kderc" );
+ #else
+- QString etc_kderc = QString::fromLatin1("/etc/kderc");
++ QString etc_kderc;
++ if (checkAccess(QString::fromLatin1("/etc/kde3rc"), R_OK))
++ etc_kderc = QString::fromLatin1("/etc/kde3rc");
++ else
++ etc_kderc = QString::fromLatin1("/etc/kderc");
+ #endif
+
+ if (checkAccess(etc_kderc, R_OK))
diff --git a/opensuse/tdelibs/kde4-applications.diff b/opensuse/tdelibs/kde4-applications.diff
new file mode 100644
index 000000000..78f223d46
--- /dev/null
+++ b/opensuse/tdelibs/kde4-applications.diff
@@ -0,0 +1,70 @@
+Index: kio/kio/kservice.cpp
+===================================================================
+--- kio/kio/kservice.cpp.orig
++++ kio/kio/kservice.cpp
+@@ -97,6 +97,7 @@ KService::init( KDesktopFile *config )
+ m_bValid = true;
+
+ bool absPath = !QDir::isRelativePath(entryPath());
++ bool kde4application = config->fileName().startsWith("/usr/share/applications/kde4/");
+
+ config->setDesktopGroup();
+
+@@ -133,6 +134,8 @@ KService::init( KDesktopFile *config )
+ if (i != -1)
+ m_strName = m_strName.left(i);
+ }
++ if (kde4application)
++ m_strName += "/KDE4";
+
+ m_strType = config->readType();
+ entryMap.remove("Type");
+@@ -196,6 +199,18 @@ KService::init( KDesktopFile *config )
+ name = name.left(pos);
+
+ m_strExec = config->readPathEntry( "Exec" );
++ if (kde4application && !m_strExec.startsWith("/"))
++ m_strExec = "/usr/bin/"+m_strExec;
++ else if (config->readBoolEntry("X-KDE-SubstituteUID")) {
++ int space = m_strExec.find(" ");
++ if (space==-1)
++ m_strExec = KStandardDirs::findExe(m_strExec);
++ else {
++ const QString command = m_strExec.left(space);
++ m_strExec.replace(command,KStandardDirs::findExe(command));
++ }
++ }
++
+ entryMap.remove("Exec");
+
+ m_strIcon = config->readEntry( "Icon", "unknown" );
+@@ -245,6 +260,8 @@ KService::init( KDesktopFile *config )
+ m_DCOPServiceType = DCOP_None;
+
+ m_strDesktopEntryName = name.lower();
++ if (kde4application)
++ m_strDesktopEntryName = "kde4-" + m_strDesktopEntryName;
+
+ m_bAllowAsDefault = config->readBoolEntry( "AllowDefault", true );
+ entryMap.remove("AllowDefault");
+@@ -254,6 +271,8 @@ KService::init( KDesktopFile *config )
+ if ( m_initialPreference == 1 )
+ m_initialPreference = config->readNumEntry( "InitialPreference", 1 );
+ entryMap.remove("InitialPreference");
++ if (kde4application)
++ m_initialPreference = 1;
+
+ // Store all additional entries in the property map.
+ // A QMap<QString,QString> would be easier for this but we can't
+@@ -263,7 +282,10 @@ KService::init( KDesktopFile *config )
+ for( ; it != entryMap.end();++it)
+ {
+ //qDebug(" Key = %s Data = %s", it.key().latin1(), it.data().latin1());
+- m_mapProps.insert( it.key(), QVariant( it.data()));
++ QString key = it.key();
++ if (kde4application && key=="OnlyShowIn" && it.data()=="KDE;")
++ key = "NotShowIn";
++ m_mapProps.insert( key, QVariant( it.data()));
+ }
+ }
+
diff --git a/opensuse/tdelibs/kdecode_fakes_include.diff b/opensuse/tdelibs/kdecode_fakes_include.diff
new file mode 100644
index 000000000..a00585286
--- /dev/null
+++ b/opensuse/tdelibs/kdecode_fakes_include.diff
@@ -0,0 +1,18 @@
+--- kdecore/fakes.c
++++ kdecore/fakes.c 2010/01/10 14:00:22
+@@ -323,6 +323,7 @@
+ #endif
+
+ #ifndef HAVE_STRLCPY
++#include <string.h>
+ KDECORE_EXPORT unsigned long strlcpy(char* d, const char* s, unsigned long bufsize)
+ {
+ unsigned long len, ret = strlen(s);
+@@ -341,6 +342,7 @@
+ #endif
+
+ #ifndef HAVE_STRLCAT
++#include <string.h>
+ KDECORE_EXPORT unsigned long strlcat(char* d, const char* s, unsigned long bufsize)
+ {
+ char *cp;
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch b/opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch
new file mode 100644
index 000000000..e6f06a779
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch
@@ -0,0 +1,62 @@
+diff -pruN kdelibs-3.5.4.orig/kio/kssl/kopenssl.cc kdelibs-3.5.4/kio/kssl/kopenssl.cc
+--- kdelibs-3.5.4.orig/kio/kssl/kopenssl.cc 2009-08-31 20:50:12.000000000 +0200
++++ kdelibs-3.5.4/kio/kssl/kopenssl.cc 2009-08-31 21:46:47.000000000 +0200
+@@ -196,6 +196,7 @@ static int (*K_X509_NAME_add_entry_by_tx
+ static X509_NAME *(*K_X509_NAME_new)() = 0L;
+ static int (*K_X509_REQ_set_subject_name)(X509_REQ*,X509_NAME*) = 0L;
+ static unsigned char *(*K_ASN1_STRING_data)(ASN1_STRING*) = 0L;
++static int (*K_ASN1_STRING_length)(ASN1_STRING*) = 0L;
+ static STACK_OF(SSL_CIPHER) *(*K_SSL_get_ciphers)(const SSL *ssl) = 0L;
+
+ #endif
+@@ -498,6 +499,7 @@ KConfig *cfg;
+ K_X509_NAME_new = (X509_NAME *(*)()) _cryptoLib->symbol("X509_NAME_new");
+ K_X509_REQ_set_subject_name = (int (*)(X509_REQ*,X509_NAME*)) _cryptoLib->symbol("X509_REQ_set_subject_name");
+ K_ASN1_STRING_data = (unsigned char *(*)(ASN1_STRING*)) _cryptoLib->symbol("ASN1_STRING_data");
++ K_ASN1_STRING_length = (int (*)(ASN1_STRING*)) _cryptoLib->symbol("ASN1_STRING_length");
+ #endif
+ }
+
+@@ -1549,6 +1551,13 @@ unsigned char *KOpenSSLProxy::ASN1_STRIN
+ return 0L;
+ }
+
++
++int KOpenSSLProxy::ASN1_STRING_length(ASN1_STRING *x) {
++ if (K_ASN1_STRING_length) return (K_ASN1_STRING_length)(x);
++ return 0L;
++}
++
++
+ STACK_OF(SSL_CIPHER) *KOpenSSLProxy::SSL_get_ciphers(const SSL* ssl) {
+ if (K_SSL_get_ciphers) return (K_SSL_get_ciphers)(ssl);
+ return 0L;
+diff -pruN kdelibs-3.5.4.orig/kio/kssl/kopenssl.h kdelibs-3.5.4/kio/kssl/kopenssl.h
+--- kdelibs-3.5.4.orig/kio/kssl/kopenssl.h 2006-07-22 10:16:39.000000000 +0200
++++ kdelibs-3.5.4/kio/kssl/kopenssl.h 2009-08-31 21:46:47.000000000 +0200
+@@ -622,6 +622,11 @@ public:
+ unsigned char *ASN1_STRING_data(ASN1_STRING *x);
+
+ /*
++ * ASN1_STRING_length
++ */
++ int ASN1_STRING_length(ASN1_STRING *x);
++
++ /*
+ *
+ */
+ int OBJ_obj2nid(ASN1_OBJECT *o);
+diff -pruN kdelibs-3.5.4.orig/kio/kssl/ksslcertificate.cc kdelibs-3.5.4/kio/kssl/ksslcertificate.cc
+--- kdelibs-3.5.4.orig/kio/kssl/ksslcertificate.cc 2006-01-19 18:06:12.000000000 +0100
++++ kdelibs-3.5.4/kio/kssl/ksslcertificate.cc 2009-08-31 21:54:38.000000000 +0200
+@@ -1099,7 +1099,9 @@ QStringList KSSLCertificate::subjAltName
+ }
+
+ QString s = (const char *)d->kossl->ASN1_STRING_data(val->d.ia5);
+- if (!s.isEmpty()) {
++ if (!s.isEmpty() &&
++ /* skip subjectAltNames with embedded NULs */
++ s.length() == d->kossl->ASN1_STRING_length(val->d.ia5)) {
+ rc += s;
+ }
+ }
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch
new file mode 100644
index 000000000..ab9fea5c2
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch
@@ -0,0 +1,42 @@
+diff -ur kdelibs-3.5.10/khtml/css/cssparser.cpp kdelibs-3.5.10-cve-2009-1698/khtml/css/cssparser.cpp
+--- kdelibs-3.5.10/khtml/css/cssparser.cpp 2007-01-15 12:34:04.000000000 +0100
++++ kdelibs-3.5.10-cve-2009-1698/khtml/css/cssparser.cpp 2009-07-26 05:46:39.000000000 +0200
+@@ -1344,6 +1344,14 @@
+ if ( args->size() != 1)
+ return false;
+ Value *a = args->current();
++ if (a->unit != CSSPrimitiveValue::CSS_IDENT) {
++ isValid=false;
++ break;
++ }
++ if (qString(a->string)[0] == '-') {
++ isValid=false;
++ break;
++ }
+ parsedValue = new CSSPrimitiveValueImpl(domString(a->string), CSSPrimitiveValue::CSS_ATTR);
+ }
+ else
+@@ -1396,7 +1404,8 @@
+
+ CounterImpl *counter = new CounterImpl;
+ Value *i = args->current();
+-// if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid;
++ if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid;
++ if (qString(i->string)[0] == '-') goto invalid;
+ counter->m_identifier = domString(i->string);
+ if (counters) {
+ i = args->next();
+diff -ur kdelibs-3.5.10/khtml/css/css_valueimpl.cpp kdelibs-3.5.10-cve-2009-1698/khtml/css/css_valueimpl.cpp
+--- kdelibs-3.5.10/khtml/css/css_valueimpl.cpp 2006-07-22 10:16:49.000000000 +0200
++++ kdelibs-3.5.10-cve-2009-1698/khtml/css/css_valueimpl.cpp 2009-07-26 05:45:36.000000000 +0200
+@@ -736,7 +736,9 @@
+ text = getValueName(m_value.ident);
+ break;
+ case CSSPrimitiveValue::CSS_ATTR:
+- // ###
++ text = "attr(";
++ text += DOMString( m_value.string );
++ text += ")";
+ break;
+ case CSSPrimitiveValue::CSS_COUNTER:
+ text = "counter(";
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch
new file mode 100644
index 000000000..ee8fdbc3f
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch
@@ -0,0 +1,13 @@
+Index: khtml/html/htmltokenizer.cpp
+===================================================================
+--- khtml/html/htmltokenizer.cpp (revision 1002163)
++++ khtml/html/htmltokenizer.cpp (revision 1002164)
+@@ -736,7 +736,7 @@
+ #ifdef TOKEN_DEBUG
+ kdDebug( 6036 ) << "unknown entity!" << endl;
+ #endif
+- checkBuffer(10);
++ checkBuffer(11);
+ // ignore the sequence, add it to the buffer as plaintext
+ *dest++ = '&';
+ for(unsigned int i = 0; i < cBufferPos; i++)
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch
new file mode 100644
index 000000000..5972b0a38
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch
@@ -0,0 +1,30 @@
+diff -ur kdelibs-3.5.10/khtml/ecma/kjs_html.cpp kdelibs-3.5.10-cve-2009-2537-select-length/khtml/ecma/kjs_html.cpp
+--- kdelibs-3.5.10/khtml/ecma/kjs_html.cpp 2008-02-13 10:41:09.000000000 +0100
++++ kdelibs-3.5.10-cve-2009-2537-select-length/khtml/ecma/kjs_html.cpp 2009-07-26 04:54:52.000000000 +0200
+@@ -62,6 +62,9 @@
+
+ #include <kdebug.h>
+
++// CVE-2009-2537 (vendors agreed on max 10000 elements)
++#define MAX_SELECT_LENGTH 10000
++
+ namespace KJS {
+
+ KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE(HTMLDocumentProto, DOMDocumentProto)
+@@ -2550,8 +2553,14 @@
+ case SelectValue: { select.setValue(str); return; }
+ case SelectLength: { // read-only according to the NS spec, but webpages need it writeable
+ Object coll = Object::dynamicCast( getSelectHTMLCollection(exec, select.options(), select) );
+- if ( coll.isValid() )
+- coll.put(exec,"length",value);
++
++ if ( coll.isValid() ) {
++ if (value.toInteger(exec) >= MAX_SELECT_LENGTH) {
++ Object err = Error::create(exec, RangeError);
++ exec->setException(err);
++ } else
++ coll.put(exec, "length", value);
++ }
+ return;
+ }
+ // read-only: form
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-kio.patch b/opensuse/tdelibs/kdelibs-3.5.10-kio.patch
new file mode 100644
index 000000000..9fb299d4a
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-kio.patch
@@ -0,0 +1,47 @@
+--- kdelibs-3.5.10/kio/kio/kzip.cpp.orig 2009-12-09 18:42:47.000000000 +0100
++++ kdelibs-3.5.10/kio/kio/kzip.cpp 2009-12-09 18:45:43.000000000 +0100
+@@ -1051,6 +1051,20 @@
+ return true;
+ }
+
++bool KZip::writeDir(const QString& name, const QString& user, const QString& group)
++{
++ // Zip files have no explicit directories, they are implicitly created during extraction time
++ // when file entries have paths in them.
++ // However, to support empty directories, we must create a dummy file entry which ends with '/'.
++ QString dirName = name;
++ if (!name.endsWith("/"))
++ dirName = dirName.append('/');
++
++ mode_t perm = 040755;
++ time_t the_time = time(0);
++ return writeFile(dirName, user, group, 0, perm, the_time, the_time, the_time, 0);
++}
++
+ // Doesn't need to be reimplemented anymore. Remove for KDE-4.0
+ bool KZip::writeFile( const QString& name, const QString& user, const QString& group, uint size, const char* data )
+ {
+@@ -1114,7 +1128,7 @@
+ }
+
+ // delete entries in the filelist with the same filename as the one we want
+- // to save, so that we dont have duplicate file entries when viewing the zip
++ // to save, so that we don�t have duplicate file entries when viewing the zip
+ // with konqi...
+ // CAUTION: the old file itself is still in the zip and won't be removed !!!
+ QPtrListIterator<KZipFileEntry> it( d->m_fileList );
+diff -up kdelibs-3.5.10/kio/kio/kzip.h.orig kdelibs-3.5.10/kio/kio/kzip.h
+--- kdelibs-3.5.10/kio/kio/kzip.h.orig 2009-12-09 19:35:42.000000000 +0100
++++ kdelibs-3.5.10/kio/kio/kzip.h 2009-12-09 19:35:48.000000000 +0100
+@@ -191,10 +191,7 @@ protected:
+ /// Closes the archive
+ virtual bool closeArchive();
+
+- /**
+- * @internal Not needed for zip
+- */
+- virtual bool writeDir( const QString& name, const QString& user, const QString& group) { Q_UNUSED(name); Q_UNUSED(user); Q_UNUSED(group); return true; }
++ virtual bool writeDir(const QString& name, const QString& user, const QString& group);
+ // TODO(BIC) uncomment and make virtual for KDE 4.
+ // bool writeDir( const QString& name, const QString& user, const QString& group,
+ // mode_t perm, time_t atime, time_t mtime, time_t ctime );
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch b/opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch
new file mode 100644
index 000000000..450dd1fe8
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch
@@ -0,0 +1,143 @@
+diff -ur kdelibs-3.5.10/kate/data/latex.xml kdelibs-3.5.10-latex-syntax-kile-2.0.3/kate/data/latex.xml
+--- kdelibs-3.5.10/kate/data/latex.xml 2007-05-14 09:52:27.000000000 +0200
++++ kdelibs-3.5.10-latex-syntax-kile-2.0.3/kate/data/latex.xml 2008-12-05 14:08:28.000000000 +0100
+@@ -1,16 +1,18 @@
+ <?xml version="1.01" encoding="UTF-8"?>
+ <!DOCTYPE language SYSTEM "language.dtd">
+-<language name="LaTeX" version="1.25" section="Markup" kateversion="2.3" extensions="*.tex; *.ltx; *.dtx; *.sty; *.cls;" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)" license="LGPL" >
++<language name="LaTeX" version="1.29" section="Markup" kateversion="2.3" extensions="*.tex; *.ltx; *.dtx; *.sty; *.cls;" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (braun@physik.fu-berlin.de)" license="LGPL" >
+ <highlighting>
+ <contexts>
+ <!-- Normal text -->
+ <context name="Normal Text" attribute="Normal Text" lineEndContext="#stay">
+ <RegExpr String="\\begin(?=[^a-zA-Z])" attribute="Structure" context="FindEnvironment" beginRegion="block" />
+ <RegExpr String="\\end(?=[^a-zA-Z])" attribute="Structure" context="FindEnvironment" endRegion="block" />
+- <RegExpr String="\\(label|pageref|ref|vpageref|vref|cite)(?=[^a-zA-Z])" attribute="Structure" context="Label"/>
++ <RegExpr String="\\(label|pageref|autoref|ref|vpageref|vref|cite)(?=[^a-zA-Z])" attribute="Structure" context="Label"/>
+ <RegExpr String="\\(part|chapter|section|subsection|subsubsection|paragraph|subparagraph)\*?\s*(?=[\{\[])" attribute="Structure" context="Sectioning"/>
++ <RegExpr String="\\(footnote)\*?\s*(?=[\{\[])" attribute="Footnote" context="Footnoting"/>
+ <RegExpr String="\\(re)?newcommand(?=[^a-zA-Z])" attribute="Keyword" context="NewCommand"/>
+ <RegExpr String="\\(e|g|x)?def(?=[^a-zA-Z])" attribute="Keyword" context="DefCommand"/>
++ <RegExpr String="&lt;&lt;.*&gt;&gt;=" attribute="Normal Text" context="NoWeb" />
+ <StringDetect String="\(" attribute="Math" context="MathMode" beginRegion="mathMode" />
+ <StringDetect String="\[" attribute="Math" context="MathModeEquation" beginRegion="mathMode" />
+ <DetectChar char="\" attribute="Keyword" context="ContrSeq"/>
+@@ -22,6 +24,11 @@
+ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
+ </context>
+
++ <!-- NoWeb -->
++ <context name="NoWeb" attribute="Normal Text" lineEndContext="#stay" >
++ <RegExpr String="^\s*@\s*" attribute="Normal Text" context="#pop" />
++ </context>
++
+ <!-- LaTeX sectioning commands -->
+ <context name="Sectioning" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
+ <RegExpr String="\[[^\]]*\]" attribute="Normal Text" context="#stay"/>
+@@ -59,9 +66,46 @@
+ <RegExpr String="[^a-zA-Z]" attribute="Structure Keyword Mathmode" context="#pop" />
+ </context>
+
++ <!-- LaTeX Footnote commands -->
++ <context name="Footnoting" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
++ <RegExpr String="\[[^\]]*\]" attribute="Normal Text" context="#stay"/>
++ <DetectChar char=" " attribute="Normal Text" context="#stay"/>
++ <DetectChar char="{" attribute="Normal Text" context="FootnotingInside"/>
++ <DetectChar char="}" attribute="Normal Text" context="#pop"/>
++ <DetectChar char="%" attribute="Comment" context="Comment"/>
++ </context>
++ <context name="FootnotingInside" attribute="Footnote Text" lineEndContext="#stay">
++ <DetectChar char="{" attribute="Normal Text" context="FootnotingInside"/>
++ <DetectChar char="}" attribute="Normal Text" context="#pop"/>
++ <StringDetect String="\(" attribute="Footnote Math" context="FootnotingMathMode" beginRegion="mathMode" />
++ <DetectChar char="\" attribute="Footnote Keyword" context="FootnotingContrSeq"/>
++ <DetectChar char="$" attribute="Footnote Math" context="FootnotingMathMode" beginRegion="mathMode" />
++ <DetectChar char="%" attribute="Comment" context="Comment"/>
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ </context>
++ <context name="FootnotingContrSeq" attribute="Keyword" lineEndContext="#pop">
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ <RegExpr String="[a-zA-Z]+(\+?|\*{0,3})" attribute="Footnote Keyword" context="#pop"/>
++ <RegExpr String="[^a-zA-Z]" attribute="Footnote Keyword" context="#pop" />
++ </context>
++ <context name="FootnotingMathMode" attribute="Footnote Math" lineEndContext="#stay">
++ <StringDetect String="$$" attribute="Error" context="#stay" />
++ <DetectChar char="$" attribute="Footnote Math" context="#pop" endRegion="mathMode" />
++ <Detect2Chars char="\" char1=")" attribute="Footnote Math" context="#pop" endRegion="mathMode" />
++ <Detect2Chars char="\" char1="]" attribute="Error" context="#stay" />
++ <DetectChar char="\" attribute="Footnote Keyword Mathmode" context="FootnotingMathContrSeq"/>
++ <DetectChar char="%" attribute="Comment" context="Comment"/>
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ </context>
++ <context name="FootnotingMathContrSeq" attribute="Footnote Keyword Mathmode" lineEndContext="#pop">
++ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
++ <RegExpr String="[a-zA-Z]+\*?" attribute="Footnote Keyword Mathmode" context="#pop"/>
++ <RegExpr String="[^a-zA-Z]" attribute="Footnote Keyword Mathmode" context="#pop" />
++ </context>
++
+ <!-- LaTeX commands \newcommand and \renewcommand -->
+ <context name="NewCommand" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
+- <RegExpr String="\s*\{\s*\\[a-zA-Z]+\s*\}(\[\d\](\[[^\]]+\])?)?\{" attribute="Normal Text" context="CommandParameterStart"/>
++ <RegExpr String="\s*\{\s*\\[a-zA-Z]+\s*\}(\[\d\](\[[^\]]*\])?)?\{" attribute="Normal Text" context="CommandParameterStart"/>
+ <DetectChar char="}" attribute="Error" context="#pop"/>
+ </context>
+
+@@ -137,8 +181,9 @@
+ <context name="Environment" attribute="Environment" lineEndContext="#stay">
+ <RegExpr String="(lstlisting|(B|L)?Verbatim)" attribute="Environment" context="VerbatimEnvParam"/>
+ <RegExpr String="(verbatim|boxedverbatim)" attribute="Environment" context="VerbatimEnv"/>
+- <RegExpr String="(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|flalign)" attribute="Environment" context="MathEnv"/>
+ <RegExpr String="(alignat|xalignat|xxalignat)" attribute="Environment" context="MathEnvParam"/>
++ <RegExpr String="(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|flalign)" attribute="Environment" context="MathEnv"/>
++ <RegExpr String="(tabular|supertabular|mpsupertabular|xtabular|mpxtabular|longtable)" attribute="Environment" context="TabEnv"/>
+ <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
+ <RegExpr String="[a-zA-Z]" attribute="Environment" context="LatexEnv"/>
+ <RegExpr String="\s+" attribute="Error" context="#pop"/>
+@@ -228,6 +273,28 @@
+ <DetectChar char="}" attribute="Normal Text" context="#pop#pop#pop#pop#pop" endRegion="block"/>
+ </context>
+
++ <!-- environment type 9: tabular -->
++ <context name="TabEnv" attribute="Environment" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop#pop#pop">
++ <DetectChar char="}" attribute="Normal Text" context="Tab"/>
++ <RegExpr String="[a-zA-Z]" attribute="Environment" lookAhead="true" context="#pop"/>
++ <IncludeRules context="EnvCommon" />
++ </context>
++
++ <!-- parse tabular text -->
++ <context name="Tab" attribute="Tab" lineEndContext="#stay">
++ <DetectChar char="&amp;" attribute="Ampersand" context="#stay"/>
++ <RegExpr String="@\{.*\}" minimal="true" attribute="Column Separator" context="#stay"/>
++ <RegExpr String="\\end(?=\s*\{(tabular|supertabular|mpsupertabular|xtabular|mpxtabular|longtable)\*?\})" attribute="Structure" context="TabFindEnd"/>
++ <IncludeRules context="Normal Text" />
++ </context>
++
++ <!-- end of tabular environment -->
++ <context name="TabFindEnd" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
++ <RegExpr String="\s*\{" attribute="Normal Text" context="#stay"/>
++ <RegExpr String="(tabular|supertabular|mpsupertabular|xtabular|mpxtabular|longtable)\*?" attribute="Environment" context="#stay"/>
++ <DetectChar char="}" attribute="Normal Text" context="#pop#pop#pop#pop#pop" endRegion="block"/>
++ </context>
++
+ <!-- math mode: starting with $ or \( -->
+ <context name="MathMode" attribute="Math" lineEndContext="#stay">
+ <StringDetect String="$$" attribute="Error" context="#stay" />
+@@ -315,11 +382,18 @@
+ <itemData name="Verbatim" defStyleNum="dsNormal" color="#a08000" selColor="#80D0FF" bold="0" italic="0"/>
+ <itemData name="Region Marker" defStyleNum="dsRegionMarker" />
+ <itemData name="Bullet" defStyleNum="dsNormal" color="#FF00C4" bold="1" underline="1"/>
++ <itemData name="Ampersand" defStyleNum="dsNormal" color="#002793" bold="1" />
++ <itemData name="Column Separator" defStyleNum="dsNormal" color="#002793" />
+ <itemData name="Alert" defStyleNum="dsAlert" />
+ <itemData name="Structure Text" defStyleNum="dsNormal" color="#000000" selColor="#FFFFFF" bold="1" italic="0"/>
+ <itemData name="Structure Keyword" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="1" italic="0"/>
+ <itemData name="Structure Math" defStyleNum="dsNormal" color="#00A000" selColor="#FF40FF" bold="1" italic="0"/>
+ <itemData name="Structure Keyword Mathmode" defStyleNum="dsNormal" color="#606000" selColor="#FFD0FF" bold="1" italic="0"/>
++ <itemData name="Footnote" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="0" italic="0"/>
++ <itemData name="Footnote Text" defStyleNum="dsNormal" color="#000000" selColor="#FFFFFF" bold="0" italic="0"/>
++ <itemData name="Footnote Keyword" defStyleNum="dsNormal" color="#800000" selColor="#60FFFF" bold="0" italic="0"/>
++ <itemData name="Footnote Math" defStyleNum="dsNormal" color="#00A000" selColor="#FF40FF" bold="0" italic="0"/>
++ <itemData name="Footnote Keyword Mathmode" defStyleNum="dsNormal" color="#606000" selColor="#FFD0FF" bold="0" italic="0"/>
+ </itemDatas>
+ </highlighting>
+
diff --git a/opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch b/opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch
new file mode 100644
index 000000000..a948b884a
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch
@@ -0,0 +1,180 @@
+diff -up kdelibs-3.5.10/kio/kssl/kopenssl.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/kopenssl.cc
+--- kdelibs-3.5.10/kio/kssl/kopenssl.cc.ossl-1.x 2009-09-04 23:10:53.000000000 +0200
++++ kdelibs-3.5.10/kio/kssl/kopenssl.cc 2009-09-04 23:10:53.000000000 +0200
+@@ -96,9 +96,14 @@ static int (*K_BIO_write) (BIO *b, cons
+ static int (*K_PEM_ASN1_write_bio) (int (*)(),const char *,BIO *,char *,
+ const EVP_CIPHER *,unsigned char *,int ,
+ pem_password_cb *, void *) = 0L;
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++static int (*K_ASN1_item_i2d_fp)(ASN1_ITEM *,FILE *,unsigned char *) = 0L;
++static ASN1_ITEM *K_NETSCAPE_X509_it = 0L;
++#else
+ static ASN1_METHOD* (*K_X509_asn1_meth) (void) = 0L;
+ static int (*K_ASN1_i2d_fp)(int (*)(),FILE *,unsigned char *) = 0L;
+ static int (*K_i2d_ASN1_HEADER)(ASN1_HEADER *, unsigned char **) = 0L;
++#endif
+ static int (*K_X509_print_fp) (FILE *, X509*) = 0L;
+ static int (*K_i2d_PKCS12) (PKCS12*, unsigned char**) = 0L;
+ static int (*K_i2d_PKCS12_fp) (FILE *, PKCS12*) = 0L;
+@@ -430,9 +435,14 @@ KConfig *cfg;
+ K_BIO_ctrl = (long (*) (BIO *,int,long,void *)) _cryptoLib->symbol("BIO_ctrl");
+ K_BIO_write = (int (*) (BIO *b, const void *data, int len)) _cryptoLib->symbol("BIO_write");
+ K_PEM_ASN1_write_bio = (int (*)(int (*)(), const char *,BIO*, char*, const EVP_CIPHER *, unsigned char *, int, pem_password_cb *, void *)) _cryptoLib->symbol("PEM_ASN1_write_bio");
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ K_ASN1_item_i2d_fp = (int (*)(ASN1_ITEM *, FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_item_i2d_fp");
++ K_NETSCAPE_X509_it = (ASN1_ITEM *) _cryptoLib->symbol("NETSCAPE_X509_it");
++#else
+ K_X509_asn1_meth = (ASN1_METHOD* (*)(void)) _cryptoLib->symbol("X509_asn1_meth");
+ K_ASN1_i2d_fp = (int (*)(int (*)(), FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_i2d_fp");
+ K_i2d_ASN1_HEADER = (int (*)(ASN1_HEADER *, unsigned char **)) _cryptoLib->symbol("i2d_ASN1_HEADER");
++#endif
+ K_X509_print_fp = (int (*)(FILE*, X509*)) _cryptoLib->symbol("X509_print_fp");
+ K_i2d_PKCS12 = (int (*)(PKCS12*, unsigned char**)) _cryptoLib->symbol("i2d_PKCS12");
+ K_i2d_PKCS12_fp = (int (*)(FILE *, PKCS12*)) _cryptoLib->symbol("i2d_PKCS12_fp");
+@@ -594,7 +604,7 @@ KConfig *cfg;
+ K_SSL_set_session = (int (*)(SSL*,SSL_SESSION*)) _sslLib->symbol("SSL_set_session");
+ K_d2i_SSL_SESSION = (SSL_SESSION* (*)(SSL_SESSION**,unsigned char**, long)) _sslLib->symbol("d2i_SSL_SESSION");
+ K_i2d_SSL_SESSION = (int (*)(SSL_SESSION*,unsigned char**)) _sslLib->symbol("i2d_SSL_SESSION");
+- K_SSL_get_ciphers = (STACK *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers");
++ K_SSL_get_ciphers = (STACK_OF(SSL_CIPHER) *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers");
+ #endif
+
+
+@@ -982,7 +992,13 @@ int KOpenSSLProxy::PEM_write_bio_X509(BI
+ else return -1;
+ }
+
+-
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,unsigned char *x) {
++ if (K_ASN1_item_i2d_fp && K_NETSCAPE_X509_it)
++ return (K_ASN1_item_i2d_fp)(K_NETSCAPE_X509_it, out, x);
++ else return -1;
++}
++#else
+ ASN1_METHOD *KOpenSSLProxy::X509_asn1_meth(void) {
+ if (K_X509_asn1_meth) return (K_X509_asn1_meth)();
+ else return 0L;
+@@ -994,7 +1010,7 @@ int KOpenSSLProxy::ASN1_i2d_fp(FILE *out
+ return (K_ASN1_i2d_fp)((int (*)())K_i2d_ASN1_HEADER, out, x);
+ else return -1;
+ }
+-
++#endif
+
+ int KOpenSSLProxy::X509_print(FILE *fp, X509 *x) {
+ if (K_X509_print_fp) return (K_X509_print_fp)(fp, x);
+diff -up kdelibs-3.5.10/kio/kssl/kopenssl.h.ossl-1.x kdelibs-3.5.10/kio/kssl/kopenssl.h
+--- kdelibs-3.5.10/kio/kssl/kopenssl.h.ossl-1.x 2006-07-22 10:16:39.000000000 +0200
++++ kdelibs-3.5.10/kio/kssl/kopenssl.h 2009-09-04 23:10:53.000000000 +0200
+@@ -48,6 +48,9 @@ class KOpenSSLProxyPrivate;
+ #include <openssl/stack.h>
+ #include <openssl/bn.h>
+ #undef crypt
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++#define STACK _STACK
++#endif
+ #endif
+
+ #include <kstaticdeleter.h>
+@@ -446,12 +449,12 @@ public:
+ */
+ int PEM_write_bio_X509(BIO *bp, X509 *x);
+
+-
++#if OPENSSL_VERSION_NUMBER < 0x10000000L
+ /*
+ * X509_asn1_meth - used for netscape output
+ */
+ ASN1_METHOD *X509_asn1_meth();
+-
++#endif
+
+ /*
+ * ASN1_i2d_fp - used for netscape output
+@@ -531,6 +534,9 @@ public:
+ */
+ void sk_free(STACK *s);
+
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ void sk_free(void *s) { return sk_free(reinterpret_cast<STACK*>(s)); }
++#endif
+
+ /*
+ * Number of elements in the stack
+@@ -543,6 +549,9 @@ public:
+ */
+ char *sk_value(STACK *s, int n);
+
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ char *sk_value(void *s, int n) { return sk_value(reinterpret_cast<STACK*>(s), n); }
++#endif
+
+ /*
+ * Create a new stack
+@@ -555,6 +564,9 @@ public:
+ */
+ int sk_push(STACK *s, char *d);
+
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ int sk_push(void *s, void *d) { return sk_push(reinterpret_cast<STACK*>(s), reinterpret_cast<char*>(d)); }
++#endif
+
+ /*
+ * Duplicate the stack
+diff -up kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc
+--- kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc.ossl-1.x 2005-10-10 17:05:44.000000000 +0200
++++ kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc 2009-09-04 23:10:53.000000000 +0200
+@@ -87,7 +87,7 @@ KSMIMECryptoPrivate::KSMIMECryptoPrivate
+
+
+ STACK_OF(X509) *KSMIMECryptoPrivate::certsToX509(QPtrList<KSSLCertificate> &certs) {
+- STACK_OF(X509) *x509 = sk_new(NULL);
++ STACK_OF(X509) *x509 = reinterpret_cast<STACK_OF(X509)*>(sk_new(NULL));
+ KSSLCertificate *cert = certs.first();
+ while(cert) {
+ sk_X509_push(x509, cert->getCert());
+diff -up kdelibs-3.5.10/kio/kssl/ksslcertificate.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/ksslcertificate.cc
+--- kdelibs-3.5.10/kio/kssl/ksslcertificate.cc.ossl-1.x 2006-01-19 18:06:12.000000000 +0100
++++ kdelibs-3.5.10/kio/kssl/ksslcertificate.cc 2009-09-04 23:10:53.000000000 +0200
+@@ -1003,17 +1003,31 @@ return qba;
+ QByteArray KSSLCertificate::toNetscape() {
+ QByteArray qba;
+ #ifdef KSSL_HAVE_SSL
+-ASN1_HEADER ah;
+-ASN1_OCTET_STRING os;
+-KTempFile ktf;
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ NETSCAPE_X509 nx;
++ ASN1_OCTET_STRING hdr;
++#else
++ ASN1_HEADER ah;
++ ASN1_OCTET_STRING os;
++#endif
++ KTempFile ktf;
+
+- os.data = (unsigned char *)NETSCAPE_CERT_HDR;
+- os.length = strlen(NETSCAPE_CERT_HDR);
+- ah.header = &os;
+- ah.data = (char *)getCert();
+- ah.meth = d->kossl->X509_asn1_meth();
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++ hdr.data = (unsigned char *)NETSCAPE_CERT_HDR;
++ hdr.length = strlen(NETSCAPE_CERT_HDR);
++ nx.header = &hdr;
++ nx.cert = getCert();
++
++ d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&nx);
++#else
++ os.data = (unsigned char *)NETSCAPE_CERT_HDR;
++ os.length = strlen(NETSCAPE_CERT_HDR);
++ ah.header = &os;
++ ah.data = (char *)getCert();
++ ah.meth = d->kossl->X509_asn1_meth();
+
+- d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah);
++ d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah);
++#endif
+
+ ktf.close();
+
diff --git a/opensuse/tdelibs/kdelibs-3.5.10.tar.bz2 b/opensuse/tdelibs/kdelibs-3.5.10.tar.bz2
new file mode 100644
index 000000000..914cfc6a4
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.10.tar.bz2
Binary files differ
diff --git a/opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch b/opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch
new file mode 100644
index 000000000..2972d0ebf
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch
@@ -0,0 +1,545 @@
+--- kdelibs-3.5.4/khtml/html/RefPtr.h.CVE-2009-1690 2009-06-17 14:19:00.000000000 +0200
++++ kdelibs-3.5.4/khtml/html/RefPtr.h 2009-06-17 14:19:00.000000000 +0200
+@@ -0,0 +1,202 @@
++// -*- mode: c++; c-basic-offset: 4 -*-
++/*
++ * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
++ *
++ * 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 WTF_RefPtr_h
++#define WTF_RefPtr_h
++
++#include <algorithm>
++#include "AlwaysInline.h"
++
++namespace WTF {
++
++ enum PlacementNewAdoptType { PlacementNewAdopt };
++
++ template <typename T> class PassRefPtr;
++
++ enum HashTableDeletedValueType { HashTableDeletedValue };
++
++ template <typename T> class RefPtr {
++ public:
++ RefPtr() : m_ptr(0) { }
++ RefPtr(T* ptr) : m_ptr(ptr) { if (ptr) ptr->ref(); }
++ RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) ptr->ref(); }
++ // see comment in PassRefPtr.h for why this takes const reference
++ template <typename U> RefPtr(const PassRefPtr<U>&);
++
++ // Special constructor for cases where we overwrite an object in place.
++ RefPtr(PlacementNewAdoptType) { }
++
++ // Hash table deleted values, which are only constructed and never copied or destroyed.
++ RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
++ bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); }
++
++ ~RefPtr() { if (T* ptr = m_ptr) ptr->deref(); }
++
++ template <typename U> RefPtr(const RefPtr<U>& o) : m_ptr(o.get()) { if (T* ptr = m_ptr) ptr->ref(); }
++
++ T* get() const { return m_ptr; }
++
++ void clear() { if (T* ptr = m_ptr) ptr->deref(); m_ptr = 0; }
++ PassRefPtr<T> release() { PassRefPtr<T> tmp = adoptRef(m_ptr); m_ptr = 0; return tmp; }
++
++ T& operator*() const { return *m_ptr; }
++ ALWAYS_INLINE T* operator->() const { return m_ptr; }
++
++ bool operator!() const { return !m_ptr; }
++
++ // This conversion operator allows implicit conversion to bool but not to other integer types.
++ typedef T* RefPtr::*UnspecifiedBoolType;
++ operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0; }
++
++ RefPtr& operator=(const RefPtr&);
++ RefPtr& operator=(T*);
++ RefPtr& operator=(const PassRefPtr<T>&);
++ template <typename U> RefPtr& operator=(const RefPtr<U>&);
++ template <typename U> RefPtr& operator=(const PassRefPtr<U>&);
++
++ void swap(RefPtr&);
++
++ private:
++ static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
++
++ T* m_ptr;
++ };
++
++ template <typename T> template <typename U> inline RefPtr<T>::RefPtr(const PassRefPtr<U>& o)
++ : m_ptr(o.releaseRef())
++ {
++ }
++
++ template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<T>& o)
++ {
++ T* optr = o.get();
++ if (optr)
++ optr->ref();
++ T* ptr = m_ptr;
++ m_ptr = optr;
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> template <typename U> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<U>& o)
++ {
++ T* optr = o.get();
++ if (optr)
++ optr->ref();
++ T* ptr = m_ptr;
++ m_ptr = optr;
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(T* optr)
++ {
++ if (optr)
++ optr->ref();
++ T* ptr = m_ptr;
++ m_ptr = optr;
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr<T>& o)
++ {
++ T* ptr = m_ptr;
++ m_ptr = o.releaseRef();
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <typename T> template <typename U> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr<U>& o)
++ {
++ T* ptr = m_ptr;
++ m_ptr = o.releaseRef();
++ if (ptr)
++ ptr->deref();
++ return *this;
++ }
++
++ template <class T> inline void RefPtr<T>::swap(RefPtr<T>& o)
++ {
++ std::swap(m_ptr, o.m_ptr);
++ }
++
++ template <class T> inline void swap(RefPtr<T>& a, RefPtr<T>& b)
++ {
++ a.swap(b);
++ }
++
++ template <typename T, typename U> inline bool operator==(const RefPtr<T>& a, const RefPtr<U>& b)
++ {
++ return a.get() == b.get();
++ }
++
++ template <typename T, typename U> inline bool operator==(const RefPtr<T>& a, U* b)
++ {
++ return a.get() == b;
++ }
++
++ template <typename T, typename U> inline bool operator==(T* a, const RefPtr<U>& b)
++ {
++ return a == b.get();
++ }
++
++ template <typename T, typename U> inline bool operator!=(const RefPtr<T>& a, const RefPtr<U>& b)
++ {
++ return a.get() != b.get();
++ }
++
++ template <typename T, typename U> inline bool operator!=(const RefPtr<T>& a, U* b)
++ {
++ return a.get() != b;
++ }
++
++ template <typename T, typename U> inline bool operator!=(T* a, const RefPtr<U>& b)
++ {
++ return a != b.get();
++ }
++
++ template <typename T, typename U> inline RefPtr<T> static_pointer_cast(const RefPtr<U>& p)
++ {
++ return RefPtr<T>(static_cast<T*>(p.get()));
++ }
++
++ template <typename T, typename U> inline RefPtr<T> const_pointer_cast(const RefPtr<U>& p)
++ {
++ return RefPtr<T>(const_cast<T*>(p.get()));
++ }
++
++ template <typename T> inline T* getPtr(const RefPtr<T>& p)
++ {
++ return p.get();
++ }
++
++} // namespace WTF
++
++using WTF::RefPtr;
++using WTF::static_pointer_cast;
++using WTF::const_pointer_cast;
++
++#endif // WTF_RefPtr_h
+--- kdelibs-3.5.4/khtml/html/htmlparser.cpp.CVE-2009-1690 2006-07-22 10:16:43.000000000 +0200
++++ kdelibs-3.5.4/khtml/html/htmlparser.cpp 2009-06-17 11:51:15.000000000 +0200
+@@ -199,7 +199,6 @@
+
+ form = 0;
+ map = 0;
+- head = 0;
+ end = false;
+ isindex = 0;
+
+@@ -616,8 +615,7 @@
+ case ID_BASE:
+ if(!head) {
+ head = new HTMLHeadElementImpl(document);
+- e = head;
+- insertNode(e);
++ insertNode(head.get());
+ handled = true;
+ }
+ break;
+@@ -839,7 +837,7 @@
+ case ID_HEAD:
+ if(!head && current->id() == ID_HTML) {
+ head = new HTMLHeadElementImpl(document);
+- n = head;
++ n = head.get();
+ }
+ break;
+ case ID_BODY:
+@@ -1679,12 +1677,12 @@
+ head = new HTMLHeadElementImpl(document);
+ HTMLElementImpl *body = doc()->body();
+ int exceptioncode = 0;
+- doc()->firstChild()->insertBefore(head, body, exceptioncode);
++ doc()->firstChild()->insertBefore(head.get(), body, exceptioncode);
+ if ( exceptioncode ) {
+ #ifdef PARSER_DEBUG
+ kdDebug( 6035 ) << "creation of head failed!!!!" << endl;
+ #endif
+- delete head;
++ delete head.get();
+ head = 0;
+ }
+ }
+--- kdelibs-3.5.4/khtml/html/Platform.h.CVE-2009-1690 2009-06-17 14:19:07.000000000 +0200
++++ kdelibs-3.5.4/khtml/html/Platform.h 2009-06-17 14:19:07.000000000 +0200
+@@ -0,0 +1,218 @@
++/* -*- mode: c++; c-basic-offset: 4 -*- */
++/*
++ * Copyright (C) 2006 Apple Computer, Inc. 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.
++ *
++ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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.
++ */
++
++#ifndef WTF_Platform_h
++#define WTF_Platform_h
++
++/* Force KDE build here in our tree... */
++#ifndef BUILDING_KDE__
++#define BUILDING_KDE__ 1
++#endif
++
++/* PLATFORM handles OS, operating environment, graphics API, and CPU */
++#define PLATFORM(WTF_FEATURE) (defined( WTF_PLATFORM_##WTF_FEATURE ) && WTF_PLATFORM_##WTF_FEATURE)
++#define COMPILER(WTF_FEATURE) (defined( WTF_COMPILER_##WTF_FEATURE ) && WTF_COMPILER_##WTF_FEATURE)
++#define HAVE(WTF_FEATURE) (defined( HAVE_##WTF_FEATURE ) && HAVE_##WTF_FEATURE)
++#define USE(WTF_FEATURE) (defined( WTF_USE_##WTF_FEATURE ) && WTF_USE_##WTF_FEATURE)
++#define ENABLE(WTF_FEATURE) (defined( ENABLE_##WTF_FEATURE ) && ENABLE_##WTF_FEATURE)
++
++/* Operating systems - low-level dependencies */
++
++/* PLATFORM(DARWIN) */
++/* Operating system level dependencies for Mac OS X / Darwin that should */
++/* be used regardless of operating environment */
++#ifdef __APPLE__
++#define WTF_PLATFORM_DARWIN 1
++#endif
++
++/* PLATFORM(WIN_OS) */
++/* Operating system level dependencies for Windows that should be used */
++/* regardless of operating environment */
++#if defined(WIN32) || defined(_WIN32)
++#define WTF_PLATFORM_WIN_OS 1
++#endif
++
++/* PLATFORM(UNIX) */
++/* Operating system level dependencies for Unix-like systems that */
++/* should be used regardless of operating environment */
++/* (includes PLATFORM(DARWIN)) */
++#if defined(__APPLE__) \
++ || defined(unix) \
++ || defined(__unix) \
++ || defined(__unix__) \
++ || defined (__NetBSD__) \
++ || defined(_AIX)
++#define WTF_PLATFORM_UNIX 1
++#endif
++
++/* PLATFORM(SOLARIS_OS) */
++/* Operating system level dependencies for Sun (Open)Solaris 10. */
++/* Studio 12 on Solaris defines __SunOS; gcc defines __sun__; */
++/* Both compilers define __sun and sun. */
++#if defined(__sun) || defined(sun)
++#define WTF_PLATFORM_SOLARIS_OS 1
++#endif
++
++/* Operating environments */
++
++/* I made the BUILDING_KDE__ macro up for the KDE build system to define */
++
++/* PLATFORM(KDE) */
++/* PLATFORM(MAC) */
++/* PLATFORM(WIN) */
++#if BUILDING_KDE__
++#define WTF_PLATFORM_KDE 1
++#elif PLATFORM(DARWIN)
++#define WTF_PLATFORM_MAC 1
++#elif PLATFORM(WIN_OS)
++#define WTF_PLATFORM_WIN 1
++#endif
++#if defined(BUILDING_GDK__)
++#define WTF_PLATFORM_GDK 1
++#endif
++
++
++/* CPU */
++
++/* PLATFORM(PPC) */
++#if defined(__ppc__) \
++ || defined(__PPC__) \
++ || defined(__powerpc__) \
++ || defined(__powerpc) \
++ || defined(__POWERPC__) \
++ || defined(_M_PPC) \
++ || defined(__PPC)
++#define WTF_PLATFORM_PPC 1
++#define WTF_PLATFORM_BIG_ENDIAN 1
++#endif
++
++/* PLATFORM(PPC64) */
++#if defined(__ppc64__) \
++ || defined(__PPC64__)
++#define WTF_PLATFORM_PPC64 1
++#define WTF_PLATFORM_BIG_ENDIAN 1
++#endif
++
++#if defined(arm)
++#define WTF_PLATFORM_ARM 1
++#if defined(__ARMEB__)
++#define WTF_PLATFORM_BIG_ENDIAN 1
++#elif !defined(__ARM_EABI__) && !defined(__ARMEB__)
++#define WTF_PLATFORM_MIDDLE_ENDIAN 1
++#endif
++#if !defined(__ARM_EABI__)
++#define WTF_PLATFORM_FORCE_PACK 1
++#endif
++#endif
++
++/* PLATFORM(X86) */
++#if defined(__i386__) \
++ || defined(i386) \
++ || defined(_M_IX86) \
++ || defined(_X86_) \
++ || defined(__THW_INTEL)
++#define WTF_PLATFORM_X86 1
++#endif
++
++/* PLATFORM(X86_64) */
++#if defined(__x86_64__) \
++ || defined(__ia64__)
++#define WTF_PLATFORM_X86_64 1
++#endif
++
++/* PLATFORM(SPARC) */
++#if defined(sparc)
++#define WTF_PLATFORM_SPARC 1
++#endif
++
++/* Compiler */
++
++/* COMPILER(CWP) */
++#if defined(__MWERKS__)
++#define WTF_COMPILER_CWP 1
++#endif
++
++/* COMPILER(MSVC) */
++#if defined(_MSC_VER)
++#define WTF_COMPILER_MSVC 1
++#endif
++
++/* COMPILER(GCC) */
++#if defined(__GNUC__)
++#define WTF_COMPILER_GCC 1
++#endif
++
++/* COMPILER(SUNPRO) */
++#if defined(__SUNPRO_CC)
++#define WTF_COMPILER_SUNPRO 1
++#endif
++
++/* COMPILER(BORLAND) */
++/* not really fully supported - is this relevant any more? */
++#if defined(__BORLANDC__)
++#define WTF_COMPILER_BORLAND 1
++#endif
++
++/* COMPILER(CYGWIN) */
++/* not really fully supported - is this relevant any more? */
++#if defined(__CYGWIN__)
++#define WTF_COMPILER_CYGWIN 1
++#endif
++
++/* multiple threads only supported on Mac for now */
++#if PLATFORM(MAC)
++#ifndef WTF_USE_MULTIPLE_THREADS
++#define WTF_USE_MULTIPLE_THREADS 1
++#endif
++#ifndef WTF_USE_BINDINGS
++#define WTF_USE_BINDINGS 1
++#endif
++#endif
++
++/* for Unicode, KDE uses Qt, everything else uses ICU */
++#if PLATFORM(KDE) || PLATFORM(QT)
++#define WTF_USE_QT4_UNICODE 1
++#elif PLATFORM(SYMBIAN)
++#define WTF_USE_SYMBIAN_UNICODE 1
++#else
++#define WTF_USE_ICU_UNICODE 1
++#endif
++
++#if PLATFORM(MAC)
++#define WTF_PLATFORM_CF 1
++#endif
++
++#if PLATFORM(WIN)
++#define WTF_USE_WININET 1
++#endif
++
++#if PLATFORM(GDK)
++#define WTF_USE_CURL 1
++#endif
++
++/* ENABLE macro defaults */
++
++#endif /* WTF_Platform_h */
+--- kdelibs-3.5.4/khtml/html/AlwaysInline.h.CVE-2009-1690 2009-06-17 14:18:52.000000000 +0200
++++ kdelibs-3.5.4/khtml/html/AlwaysInline.h 2009-06-17 13:56:36.000000000 +0200
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
++ *
++ * 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 "html/Platform.h"
++
++
++#ifndef ALWAYS_INLINE
++#if COMPILER(GCC) && defined(NDEBUG) && __GNUC__ > 3
++#define ALWAYS_INLINE inline __attribute__ ((__always_inline__))
++#elif COMPILER(MSVC) && defined(NDEBUG)
++#define ALWAYS_INLINE __forceinline
++#else
++#define ALWAYS_INLINE inline
++#endif
++#endif
++
++#ifndef ALWAYS_INLINE_INTO
++#if COMPILER(GCC) && defined(NDEBUG) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || __GNUC__ > 4)
++#define ALWAYS_INLINE_INTO __attribute__ ((__flatten__))
++#else
++#define ALWAYS_INLINE_INTO
++#endif
++#endif
++
++
++#ifndef NEVER_INLINE
++#if COMPILER(GCC) && __GNUC__ > 3
++#define NEVER_INLINE __attribute__ ((__noinline__))
++#else
++#define NEVER_INLINE
++#endif
++#endif
+--- kdelibs-3.5.4/khtml/html/htmlparser.h.CVE-2009-1690 2005-10-10 17:06:04.000000000 +0200
++++ kdelibs-3.5.4/khtml/html/htmlparser.h 2009-06-17 14:42:27.000000000 +0200
+@@ -38,10 +38,10 @@
+ #include <qdatetime.h>
+ #endif
+
+-
+ #include "dom/dom_string.h"
+ #include "xml/dom_nodeimpl.h"
+ #include "html/html_documentimpl.h"
++#include "html/RefPtr.h"
+
+ class KHTMLView;
+ class HTMLStackElem;
+@@ -148,7 +148,7 @@
+ /*
+ * the head element. Needed for crappy html which defines <base> after </head>
+ */
+- DOM::HTMLHeadElementImpl *head;
++ RefPtr<DOM::HTMLHeadElementImpl> head;
+
+ /*
+ * a possible <isindex> element in the head. Compatibility hack for
diff --git a/opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff b/opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff
new file mode 100644
index 000000000..cad4ceedd
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff
@@ -0,0 +1,15 @@
+Index: kdecore/kwinmodule.cpp
+===================================================================
+--- kdecore/kwinmodule.cpp.orig
++++ kdecore/kwinmodule.cpp
+@@ -436,7 +436,9 @@ QRect KWinModule::workArea( const QValue
+ if ( strut.bottom > 0 )
+ r.setBottom( r.bottom() - (int) strut.bottom );
+
+- a = a.intersect(r);
++ QRect tmp;
++ tmp = a.intersect(r);
++ a = tmp;
+ }
+ return a;
+ }
diff --git a/opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch b/opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch
new file mode 100644
index 000000000..9f06adc93
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch
@@ -0,0 +1,50 @@
+diff -uNr kdelibs-3.5.1.old/pics/hicolor/index.theme kdelibs-3.5.1/pics/hicolor/index.theme
+--- kdelibs-3.5.1.old/pics/hicolor/index.theme 2006-01-20 07:53:04.000000000 +0100
++++ kdelibs-3.5.1/pics/hicolor/index.theme 2006-04-12 20:18:31.907163700 +0200
+@@ -314,36 +314,36 @@
+ Type=Threshold
+
+ [scalable/actions]
+-MinSize=1
+-Size=128
++MinSize=32
++Size=48
+ MaxSize=256
+ Context=Actions
+ Type=Scalable
+
+ [scalable/apps]
+-MinSize=1
+-Size=128
++MinSize=32
++Size=48
+ MaxSize=256
+ Context=Applications
+ Type=Scalable
+
+ [scalable/devices]
+-MinSize=1
+-Size=128
++MinSize=32
++Size=48
+ MaxSize=256
+ Context=Devices
+ Type=Scalable
+
+ [scalable/filesystems]
+-MinSize=1
+-Size=128
++MinSize=32
++Size=48
+ MaxSize=256
+ Context=FileSystems
+ Type=Scalable
+
+ [scalable/mimetypes]
+-MinSize=1
+-Size=128
++MinSize=32
++Size=48
+ MaxSize=256
+ Context=MimeTypes
+ Type=Scalable
diff --git a/opensuse/tdelibs/kdelibs_networkstatus_branch2.diff b/opensuse/tdelibs/kdelibs_networkstatus_branch2.diff
new file mode 100644
index 000000000..069dffbea
--- /dev/null
+++ b/opensuse/tdelibs/kdelibs_networkstatus_branch2.diff
@@ -0,0 +1,69 @@
+Index: kioslave/http/http.cc
+===================================================================
+--- kioslave/http/http.cc.orig
++++ kioslave/http/http.cc
+@@ -1804,9 +1804,11 @@ bool HTTPProtocol::isOffline(const KURL
+ QByteArray reply;
+
+ QDataStream stream(params, IO_WriteOnly);
+- stream << url.url();
+
+- if ( dcopClient()->call( "kded", "networkstatus", "status(QString)",
++ if ( url.host() == QString::fromLatin1("localhost") || url.host() == QString::fromLatin1("127.0.0.1") || url.host() == QString::fromLatin1("::") ) {
++ return false;
++ }
++ if ( dcopClient()->call( "kded", "networkstatus", "status()",
+ params, replyType, reply ) && (replyType == "int") )
+ {
+ int result;
+@@ -2210,6 +2212,11 @@ bool HTTPProtocol::httpOpen()
+ // Conditional cache hit. (Validate)
+ }
+
++ if (bCacheOnly && bOffline)
++ {
++ error( ERR_OFFLINE_MODE, m_request.url.url() );
++ return false;
++ }
+ if (bCacheOnly)
+ {
+ error( ERR_DOES_NOT_EXIST, m_request.url.url() );
+@@ -2217,7 +2224,7 @@ bool HTTPProtocol::httpOpen()
+ }
+ if (bOffline)
+ {
+- error( ERR_COULD_NOT_CONNECT, m_request.url.url() );
++ error( ERR_OFFLINE_MODE, m_request.url.url() );
+ return false;
+ }
+ }
+Index: kio/kio/global.cpp
+===================================================================
+--- kio/kio/global.cpp.orig
++++ kio/kio/global.cpp
+@@ -408,6 +408,9 @@ KIO_EXPORT QString KIO::buildErrorString
+ case KIO::ERR_POST_DENIED:
+ result = i18n( "Access to restricted port in POST denied.");
+ break;
++ case KIO::ERR_OFFLINE_MODE:
++ result = i18n( "Could not access %1.\nOffline mode active.").arg( errorText );
++ break;
+ default:
+ result = i18n( "Unknown error code %1\n%2\nPlease send a full bug report at http://bugs.kde.org." ).arg( errorCode ).arg( errorText );
+ break;
+Index: kio/kio/global.h
+===================================================================
+--- kio/kio/global.h.orig
++++ kio/kio/global.h
+@@ -244,8 +244,10 @@ namespace KIO
+ ERR_UPGRADE_REQUIRED = 64, // A transport upgrade is required to access this
+ // object. For instance, TLS is demanded by
+ // the server in order to continue.
+- ERR_POST_DENIED = 65 // Issued when trying to POST data to a certain Ports
++ ERR_POST_DENIED = 65, // Issued when trying to POST data to a certain Ports
+ // see job.cpp
++ ERR_OFFLINE_MODE = 66 // Used when an app is in offline mode and a
++ // requested document is unavailable.
+ };
+
+ /**
diff --git a/opensuse/tdelibs/kdemm-20050330.tar.bz2 b/opensuse/tdelibs/kdemm-20050330.tar.bz2
new file mode 100644
index 000000000..e71e379e4
--- /dev/null
+++ b/opensuse/tdelibs/kdemm-20050330.tar.bz2
Binary files differ
diff --git a/opensuse/tdelibs/kdemm-filepreview.diff b/opensuse/tdelibs/kdemm-filepreview.diff
new file mode 100644
index 000000000..227dc39ec
--- /dev/null
+++ b/opensuse/tdelibs/kdemm-filepreview.diff
@@ -0,0 +1,40 @@
+Index: interfaces/kmediaplayer/kfileaudiopreview/Makefile.am
+===================================================================
+--- interfaces/kmediaplayer/kfileaudiopreview/Makefile.am.orig
++++ interfaces/kmediaplayer/kfileaudiopreview/Makefile.am
+@@ -1,11 +1,11 @@
+-INCLUDES = -I$(top_srcdir)/interfaces/ -I$(top_srcdir)/arts/kde -I$(includedir)/arts $(all_includes)
++INCLUDES = -I$(top_srcdir)/interfaces/ $(all_includes)
+ METASOURCES = AUTO
+
+ kde_module_LTLIBRARIES = kfileaudiopreview.la
+
+ kfileaudiopreview_la_SOURCES = kfileaudiopreview.cpp
+ kfileaudiopreview_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version -no-undefined
+-kfileaudiopreview_la_LIBADD = $(top_builddir)/interfaces/kmediaplayer/libkmediaplayer.la $(top_builddir)/arts/kde/libartskde.la $(LIB_KIO)
++kfileaudiopreview_la_LIBADD = $(top_builddir)/interfaces/kmediaplayer/libkmediaplayer.la $(top_builddir)/kdemm/libkdemm.la $(LIB_KIO)
+
+ noinst_HEADERS = kfileaudiopreview.h
+
+Index: interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp
+===================================================================
+--- interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp.orig
++++ interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp
+@@ -13,7 +13,7 @@
+ #include <kmimetype.h>
+ #include <kparts/componentfactory.h>
+
+-#include <kplayobjectfactory.h>
++#include <kdemm/factory.h>
+
+ #include <config-kfile.h>
+
+@@ -58,7 +58,7 @@ KFileAudioPreview::KFileAudioPreview( QW
+ {
+ KGlobal::locale()->insertCatalogue("kfileaudiopreview");
+
+- QStringList formats = KDE::PlayObjectFactory::mimeTypes();
++ QStringList formats = KDE::Multimedia::Factory::self()->playableMimeTypes();
+ // ###
+ QStringList::ConstIterator it = formats.begin();
+ for ( ; it != formats.end(); ++it )
diff --git a/opensuse/tdelibs/kdemm.diff b/opensuse/tdelibs/kdemm.diff
new file mode 100644
index 000000000..3d1e3d925
--- /dev/null
+++ b/opensuse/tdelibs/kdemm.diff
@@ -0,0 +1,669 @@
+Index: arts/knotify/knotify.cpp
+===================================================================
+--- arts/knotify/knotify.cpp.orig
++++ arts/knotify/knotify.cpp
+@@ -5,6 +5,7 @@
+ 2000 Matthias Ettrich (ettrich@kde.org)
+ 2000 Waldo Bastian <bastian@kde.org>
+ 2000-2003 Carsten Pfeiffer <pfeiffer@kde.org>
++ 2004 Allan Sandfeld Jensen <kde@carewolf.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+@@ -26,21 +27,12 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
+-#include <config.h>
+-#ifndef WITHOUT_ARTS
+-// aRts headers
+-#include <connect.h>
+-#include <dispatcher.h>
+-#include <flowsystem.h>
+-#include <qiomanager.h>
+-#include <soundserver.h>
+-#endif
+-
+ // QT headers
+ #include <qfile.h>
+ #include <qfileinfo.h>
+ #include <qstringlist.h>
+ #include <qtextstream.h>
++#include <qtimer.h>
+
+ // KDE headers
+ #include <dcopclient.h>
+@@ -80,15 +72,11 @@ public:
+ QString externalPlayer;
+ KProcess *externalPlayerProc;
+
+-#ifndef WITHOUT_ARTS
+- QPtrList<KDE::PlayObject> playObjects;
+- QMap<KDE::PlayObject*,int> playObjectEventMap;
+- KAudioManagerPlay *audioManager;
+-#endif
++ QMap<KDE::Multimedia::SimplePlayer*,int> playObjectEventMap;
+ int externalPlayerEventId;
+
+ bool useExternal;
+- bool useArts;
++ bool useKDEMM;
+ int volume;
+ QTimer *playTimer;
+ bool inStartup;
+@@ -106,12 +94,13 @@ extern "C"{
+ KDE_EXPORT int kdemain(int argc, char **argv)
+ {
+ KAboutData aboutdata("knotify", I18N_NOOP("KNotify"),
+- "3.0", I18N_NOOP("KDE Notification Server"),
++ "4.0", I18N_NOOP("KDE Notification Server"),
+ KAboutData::License_GPL, "(C) 1997-2003, KDE Developers");
+ aboutdata.addAuthor("Carsten Pfeiffer",I18N_NOOP("Current Maintainer"),"pfeiffer@kde.org");
+ aboutdata.addAuthor("Christian Esken",0,"esken@kde.org");
+ aboutdata.addAuthor("Stefan Westerfeld",I18N_NOOP("Sound support"),"stefan@space.twc.de");
+ aboutdata.addAuthor("Charles Samuels",I18N_NOOP("Previous Maintainer"),"charles@kde.org");
++ aboutdata.addAuthor("Allan Sandfeld Jensen",I18N_NOOP("Conversion to KDEMM"),"kde@carewolf.com");
+
+ KCmdLineArgs::init( argc, argv, &aboutdata );
+ KUniqueApplication::addCmdLineOptions();
+@@ -126,145 +115,36 @@ KDE_EXPORT int kdemain(int argc, char **
+ KUniqueApplication app;
+ app.disableSessionManagement();
+
+- // KNotify is started on KDE startup and on demand (using
+- // KNotifClient::startDaemon()) whenever a KNotify event occurs. Especially
+- // KWin may fire many events (e.g. when a window pops up). When we have
+- // problems with aRts or the installation, we might get an infinite loop
+- // of knotify crashing, popping up the crashhandler window and kwin firing
+- // another event, starting knotify again...
+- // We try to prevent this by tracking our startup and offer options to
+- // abort this.
+-
+-#ifndef WITHOUT_ARTS
+- KConfigGroup config( KGlobal::config(), "StartProgress" );
+- KConfig artsKCMConfig( "kcmartsrc" );
+- artsKCMConfig.setGroup( "Arts" );
+- bool useArts = artsKCMConfig.readBoolEntry( "StartServer", true );
+- if (useArts)
+- useArts = config.readBoolEntry( "Use Arts", useArts );
+- bool ok = config.readBoolEntry( "Arts Init", true );
+-
+- if ( useArts && !ok )
+- {
+- if ( KMessageBox::questionYesNo(
+- 0L,
+- i18n("During the previous startup, KNotify crashed while creating "
+- "Arts::Dispatcher. Do you want to try again or disable "
+- "aRts sound output?\n\n"
+- "If you choose to disable aRts output now, you can re-enable "
+- "it later or select an alternate sound player "
+- "in the System Notifications control panel."),
+- i18n("KNotify Problem"),
+- i18n("&Try Again"),
+- i18n("D&isable aRts Output"),
+- "KNotifyStartProgress",
+- 0 /* don't call KNotify :) */
+- )
+- == KMessageBox::No )
+- {
+- useArts = false;
+- }
+- }
+-
+- // when ArtsDispatcher crashes, we know it the next start.
+- config.writeEntry( "Arts Init", false );
+- config.writeEntry( "Use Arts", useArts );
+- config.sync();
+-
+- KArtsDispatcher *dispatcher = 0;
+- if ( useArts )
+- {
+- dispatcher = new KArtsDispatcher;
+- soundServer = new KArtsServer;
+- }
+-
+- // ok, seemed to work.
+- config.writeEntry("Arts Init", useArts );
+- config.sync();
+-
+- ok = config.readBoolEntry( "KNotify Init", true );
+- if ( useArts && !ok )
+- {
+- if ( KMessageBox::questionYesNo(
+- 0L,
+- i18n("During the previous startup, KNotify crashed while instantiating "
+- "KNotify. Do you want to try again or disable "
+- "aRts sound output?\n\n"
+- "If you choose to disable aRts output now, you can re-enable "
+- "it later or select an alternate sound player "
+- "in the System Notifications control panel."),
+- i18n("KNotify Problem"),
+- i18n("&Try Again"),
+- i18n("D&isable aRts Output"),
+- "KNotifyStartProgress",
+- 0 /* don't call KNotify :) */
+- )
+- == KMessageBox::No )
+- {
+- useArts = false;
+- delete soundServer;
+- soundServer = 0L;
+- delete dispatcher;
+- dispatcher = 0L;
+- }
+- }
+-
+- // when KNotify instantiation crashes, we know it the next start.
+- config.writeEntry( "KNotify Init", false );
+- config.writeEntry( "Use Arts", useArts );
+- config.sync();
+-
+ // start notify service
+- KNotify *notify = new KNotify( useArts );
+-
+- config.writeEntry( "KNotify Init", true );
+- config.sync();
+-
+-#else
+-
+- // start notify service, without aRts
+- KNotify *notify = new KNotify( false );
+-
+-#endif
++ KNotify notify( true );
+
+ app.dcopClient()->setDefaultObject( "Notify" );
+ app.dcopClient()->setDaemonMode( true );
+ // kdDebug() << "knotify starting" << endl;
+
+ int ret = app.exec();
+- delete notify;
+-#ifndef WITHOUT_ARTS
+- delete soundServer;
+- delete dispatcher;
+-#endif
+ return ret;
+ }
+ }// end extern "C"
+
+-KNotify::KNotify( bool useArts )
++KNotify::KNotify( bool useKDEMM )
+ : QObject(), DCOPObject("Notify")
+ {
+ d = new KNotifyPrivate;
+ d->globalEvents = new KConfig("knotify/eventsrc", true, false, "data");
+ d->globalConfig = new KConfig("knotify.eventsrc", true, false);
+ d->externalPlayerProc = 0;
+- d->useArts = useArts;
+- d->inStartup = true;
+-#ifndef WITHOUT_ARTS
+- d->playObjects.setAutoDelete(true);
+- d->audioManager = 0;
+- if( useArts )
+- {
+- connect( soundServer, SIGNAL( restartedServer() ), this, SLOT( restartedArtsd() ) );
+- restartedArtsd(); //started allready need to initialize d->audioManager
+- }
+-#endif
++ d->useKDEMM = useKDEMM;
+
+- d->volume = 100;
++ d->inStartup = 0;
++ d->volume = 100;
+
+ d->playTimer = 0;
+
+ loadConfig();
++
++ connect ( this, SIGNAL(deletePlayObject(KDE::Multimedia::SimplePlayer*)),
++ SLOT(objectDeleter(KDE::Multimedia::SimplePlayer*)) );
+ }
+
+ KNotify::~KNotify()
+@@ -272,12 +152,9 @@ KNotify::~KNotify()
+ reconfigure();
+
+ #ifndef WITHOUT_ARTS
+- d->playObjects.clear();
+-
+ delete d->globalEvents;
+ delete d->globalConfig;
+ delete d->externalPlayerProc;
+- delete d->audioManager;
+ #endif
+ delete d;
+ }
+@@ -293,7 +170,7 @@ void KNotify::loadConfig() {
+ // try to locate a suitable player if none is configured
+ if ( d->externalPlayer.isEmpty() ) {
+ QStringList players;
+- players << "wavplay" << "aplay" << "auplay";
++ players << "wavplay" << "aplay" << "auplay" << "artsplay" << "akodeplay";
+ QStringList::Iterator it = players.begin();
+ while ( d->externalPlayer.isEmpty() && it != players.end() ) {
+ d->externalPlayer = KStandardDirs::findExe( *it );
+@@ -456,9 +333,9 @@ bool KNotify::notifyBySound( const QStri
+ if ( soundFile.isEmpty() )
+ soundFile = locate( "sound", sound );
+ }
+- if ( soundFile.isEmpty() || isPlaying( soundFile ) )
++ if ( soundFile.isEmpty() )
+ {
+- soundFinished( eventId, soundFile.isEmpty() ? NoSoundFile : FileAlreadyPlaying );
++ soundFinished( eventId, NoSoundFile );
+ return false;
+ }
+
+@@ -466,64 +343,18 @@ bool KNotify::notifyBySound( const QStri
+ // kdDebug() << "KNotify::notifyBySound - trying to play file " << soundFile << endl;
+
+ if (!external) {
+- //If we disabled using aRts, just return,
+- //(If we don't, we'll blow up accessing the null soundServer)
+- if (!d->useArts)
++ //If we disabled audio, just return,
++ if (!d->useKDEMM)
+ {
+ soundFinished( eventId, NoSoundSupport );
+ return false;
+ }
+
+-#ifndef WITHOUT_ARTS
+- // play sound finally
+- while( d->playObjects.count()>5 )
+- abortFirstPlayObject();
+-
+- KDE::PlayObjectFactory factory(soundServer->server());
+- if( d->audioManager )
+- factory.setAudioManagerPlay( d->audioManager );
+ KURL soundURL;
+ soundURL.setPath(soundFile);
+- KDE::PlayObject *playObject = factory.createPlayObject(soundURL, false);
+-
+- if (playObject->isNull())
+- {
+- soundFinished( eventId, NoSoundSupport );
+- delete playObject;
+- return false;
+- }
+-
+- if ( d->volume != 100 )
+- {
+- // It works to access the playObject immediately because we don't allow
+- // non-file URLs for sounds.
+- Arts::StereoVolumeControl volumeControl = Arts::DynamicCast(soundServer->server().createObject("Arts::StereoVolumeControl"));
+- Arts::PlayObject player = playObject->object();
+- Arts::Synth_AMAN_PLAY ap = d->audioManager->amanPlay();
+- if( ! volumeControl.isNull() && ! player.isNull() && ! ap.isNull() )
+- {
+- volumeControl.scaleFactor( d->volume/100.0 );
+-
+- ap.stop();
+- Arts::disconnect( player, "left", ap, "left" );
+- Arts::disconnect( player, "right", ap, "right" );
+-
+- ap.start();
+- volumeControl.start();
+-
+- Arts::connect(player,"left",volumeControl,"inleft");
+- Arts::connect(player,"right",volumeControl,"inright");
+-
+- Arts::connect(volumeControl,"outleft",ap,"left");
+- Arts::connect(volumeControl,"outright",ap,"right");
+-
+- player._addChild( volumeControl, "volume" );
+- }
+- }
+-
+- playObject->play();
+- d->playObjects.append( playObject );
++ KDE::Multimedia::SimplePlayer* playObject = new KDE::Multimedia::SimplePlayer( this );
+ d->playObjectEventMap.insert( playObject, eventId );
++ playObject->play( soundURL );
+
+ if ( !d->playTimer )
+ {
+@@ -532,8 +363,7 @@ bool KNotify::notifyBySound( const QStri
+ }
+ if ( !d->playTimer->isActive() )
+ d->playTimer->start( 1000 );
+-#endif
+- return true;
++ return playObject->isPlaying();
+
+ } else if(!d->externalPlayer.isEmpty()) {
+ // use an external player to play the sound
+@@ -686,58 +516,39 @@ void KNotify::setVolume( int volume )
+ d->volume = volume;
+ }
+
++void KNotify::slotPlayerProcessExited( KProcess *proc )
++{
++ soundFinished( d->externalPlayerEventId,
++ (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown );
++}
++
++
+ void KNotify::playTimeout()
+ {
+-#ifndef WITHOUT_ARTS
+- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it;)
++qDebug("KNotify::playTimeout");
++ for( QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator it = d->playObjectEventMap.begin();
++ it != d->playObjectEventMap.end();
++ )
+ {
+- QPtrListIterator< KDE::PlayObject > current = it;
++ QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator current = it;
+ ++it;
+- if ( (*current)->state() != Arts::posPlaying )
++ KDE::Multimedia::SimplePlayer* playObject = current.key();
++ if ( !playObject->isPlaying() || playObject->totalTime() <= 0 ) // may be "playing" even if there's an error
+ {
+- QMap<KDE::PlayObject*,int>::Iterator eit = d->playObjectEventMap.find( *current );
+- if ( eit != d->playObjectEventMap.end() )
+- {
+- soundFinished( *eit, PlayedOK );
+- d->playObjectEventMap.remove( eit );
+- }
+- d->playObjects.remove( current );
++ soundFinished( *current, PlayedOK );
++ d->playObjectEventMap.remove( current );
++ disconnect( playObject, SIGNAL( finished() ) );
++ playObject->stop();
++ emit deletePlayObject(playObject);
+ }
+ }
+- if ( !d->playObjects.count() )
++ if ( !d->playObjectEventMap.count() )
+ d->playTimer->stop();
+-#endif
+ }
+
+-bool KNotify::isPlaying( const QString& soundFile ) const
++void KNotify::objectDeleter( KDE::Multimedia::SimplePlayer *playObject )
+ {
+-#ifndef WITHOUT_ARTS
+- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it; ++it)
+- {
+- if ( (*it)->mediaName() == soundFile )
+- return true;
+- }
+-#endif
+- return false;
+-}
+-
+-void KNotify::slotPlayerProcessExited( KProcess *proc )
+-{
+- soundFinished( d->externalPlayerEventId,
+- (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown );
+-}
+-
+-void KNotify::abortFirstPlayObject()
+-{
+-#ifndef WITHOUT_ARTS
+- QMap<KDE::PlayObject*,int>::Iterator it = d->playObjectEventMap.find( d->playObjects.getFirst() );
+- if ( it != d->playObjectEventMap.end() )
+- {
+- soundFinished( it.data(), Aborted );
+- d->playObjectEventMap.remove( it );
+- }
+- d->playObjects.removeFirst();
+-#endif
++ delete playObject;
+ }
+
+ void KNotify::soundFinished( int eventId, PlayingFinishedStatus reason )
+@@ -780,16 +591,6 @@ WId KNotify::checkWinId( const QString &
+ return senderWinId;
+ }
+
+-void KNotify::restartedArtsd()
+-{
+-#ifndef WITHOUT_ARTS
+- delete d->audioManager;
+- d->audioManager = new KAudioManagerPlay( soundServer );
+- d->audioManager->setTitle( i18n( "KDE System Notifications" ) );
+- d->audioManager->setAutoRestoreID( "KNotify Aman Play" );
+-#endif
+-}
+-
+ void KNotify::sessionReady()
+ {
+ if( d->inStartup && !d->startupEvents.isEmpty())
+Index: arts/knotify/knotify.h
+===================================================================
+--- arts/knotify/knotify.h.orig
++++ arts/knotify/knotify.h
+@@ -24,9 +24,10 @@
+ #include <knotifyclient.h>
+ #include <dcopobject.h>
+
++#include <kdemm/simpleplayer.h>
++
+ class KNotifyPrivate;
+ class KProcess;
+-class KConfig;
+
+ class KNotify : public QObject, public DCOPObject
+ {
+@@ -76,19 +77,16 @@ private:
+ bool notifyByStderr(const QString &text);
+ bool notifyByPassivePopup(const QString &text, const QString &appName,
+ KConfig* eventsFile, WId winId );
+- bool notifyByExecute(const QString &command,
+- const QString& event,
+- const QString& fromApp,
++ bool notifyByExecute(const QString &command,
++ const QString& event,
++ const QString& fromApp,
+ const QString& text,
+ int winId,
+ int eventId );
+- bool notifyByTaskbar( WId winId );
+-
+- bool isPlaying( const QString& soundFile ) const;
+-
+- void soundFinished( int eventId, PlayingFinishedStatus reason );
+- void abortFirstPlayObject();
+-
++ bool notifyByTaskbar( WId winId );
++
++ void soundFinished( int eventId, PlayingFinishedStatus reason );
++
+ WId checkWinId( const QString& appName, WId senderWinId );
+
+ /**
+@@ -97,9 +95,13 @@ private:
+ bool isGlobal(const QString &eventname);
+
+ private slots:
+- void playTimeout();
+- void slotPlayerProcessExited( KProcess *proc );
+- void restartedArtsd();
++ void playTimeout();
++ void slotPlayerProcessExited( KProcess *proc );
++ void objectDeleter( KDE::Multimedia::SimplePlayer* );
++
++signals:
++ void deletePlayObject( KDE::Multimedia::SimplePlayer* );
++
+
+ private:
+ KNotifyPrivate* d;
+Index: arts/knotify/Makefile.am
+===================================================================
+--- arts/knotify/Makefile.am.orig
++++ arts/knotify/Makefile.am
+@@ -3,12 +3,13 @@ INCLUDES= -I$(top_srcdir)/arts/kde -I$(i
+
+ ####### Files
+
+-kde_module_LTLIBRARIES = knotify.la
++#kde_module_LTLIBRARIES = knotify.la
++bin_PROGRAMS =
++lib_LTLIBRARIES =
++kdeinit_LTLIBRARIES = knotify.la
+
+ knotify_la_SOURCES = knotify.cpp knotify.skel
+-if include_ARTS
+-knotify_la_LIBADD = -lsoundserver_idl -lqtmcop $(LIB_KDEUI) $(top_builddir)/arts/kde/libartskde.la
+-endif
++knotify_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kdemm/libkdemm.la
+ knotify_la_LDFLAGS = $(all_libraries) -module -avoid-version
+ knotify_la_METASOURCES = AUTO
+
+Index: kdemm/channel.h
+===================================================================
+--- kdemm/channel.h.orig
++++ kdemm/channel.h
+@@ -83,7 +83,7 @@ namespace Multimedia
+ * You can not instantiate channels yourself, use the Factory to
+ * create them.
+ */
+- Channel( const QString & name, const QString & type, Direction direction,
++ Channel( const QString & channelName, const QString & type, Direction direction,
+ QObject * parent = 0, const char * name = 0 );
+
+ private:
+Index: kdemm/factory.cpp
+===================================================================
+--- kdemm/factory.cpp.orig
++++ kdemm/factory.cpp
+@@ -80,6 +80,7 @@ class Factory::Private
+ ":\n" << e << endl;
+ }
+ }
++#if 0
+ if( 0 == backend )
+ {
+ if( offers.size() == 0 )
+@@ -100,6 +101,7 @@ class Factory::Private
+ i18n( "Unable to use any of the available Multimedia Backends" ), details );
+ }
+ }
++#endif
+ }
+
+ Backend * backend;
+Index: kdemm/simpleplayer.cpp
+===================================================================
+--- kdemm/simpleplayer.cpp.orig
++++ kdemm/simpleplayer.cpp
+@@ -50,10 +50,12 @@ SimplePlayer::SimplePlayer( QObject * pa
+ connect( Factory::self(), SIGNAL( recreateObjects() ), SLOT( recreateObjects() ) );
+ d->channel = Factory::self()->createChannel( KGlobal::instance()->aboutData()->programName() );
+ d->player = Factory::self()->createPlayer();
+- d->player->setOutputChannel( d->channel );
+- connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ),
++ if ( d->player ) {
++ d->player->setOutputChannel( d->channel );
++ connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ),
+ SLOT( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ) );
+- connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) );
++ connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) );
++ };
+ }
+
+ SimplePlayer::~SimplePlayer()
+@@ -64,6 +66,8 @@ SimplePlayer::~SimplePlayer()
+
+ void SimplePlayer::play( const KURL & url )
+ {
++ if( ! d->player )
++ return;
+ if( isPaused() && url == d->url )
+ {
+ d->player->play();
+@@ -78,51 +82,71 @@ void SimplePlayer::play( const KURL & ur
+
+ void SimplePlayer::pause()
+ {
++ if( ! d->player )
++ return;
+ d->player->pause();
+ }
+
+ void SimplePlayer::stop()
+ {
++ if( ! d->player )
++ return;
+ d->player->stop();
+ }
+
+ long SimplePlayer::totalTime() const
+ {
++ if( ! d->player )
++ return 0;
+ return d->player->totalTime();
+ }
+
+ long SimplePlayer::currentTime() const
+ {
++ if( ! d->player )
++ return 0;
+ return d->player->currentTime();
+ }
+
+ void SimplePlayer::seek( long ms )
+ {
++ if( ! d->player )
++ return;
+ d->player->seek( ms );
+ }
+
+ float SimplePlayer::volume() const
+ {
++ if( ! d->player )
++ return 0;
+ return d->channel->volume();
+ }
+
+ void SimplePlayer::setVolume( float v )
+ {
++ if( ! d->player )
++ return;
+ d->channel->setVolume( v );
+ }
+
+ bool SimplePlayer::isPlaying() const
+ {
++ if( ! d->player )
++ return false;
+ return ( d->player->state() == Player::Playing );
+ }
+
+ bool SimplePlayer::isPaused() const
+ {
++ if( ! d->player )
++ return false;
+ return ( d->player->state() == Player::Paused );
+ }
+
+ void SimplePlayer::stateChanged( Player::State ns, Player::State os )
+ {
++ if( ! d->player )
++ return;
+ if( os == Player::Loading && ns == Player::Stopped )
+ d->player->play();
+ }
+@@ -135,7 +159,8 @@ void SimplePlayer::deleteYourObjects()
+ d->title = d->channel->channelName();
+ d->type = d->channel->channelType();
+
+- d->player->stop();
++ if( d->player )
++ d->player->stop();
+
+ delete d->player;
+ delete d->channel;
+@@ -149,6 +174,9 @@ void SimplePlayer::recreateObjects()
+ d->channel->setVolume( d->channelvolume );
+
+ d->player = Factory::self()->createPlayer();
++ if( ! d->player )
++ return;
++
+ d->player->setOutputChannel( d->channel );
+
+ if( d->state != Player::NoMedia )
diff --git a/opensuse/tdelibs/kdeprint-restart-cupsd.diff b/opensuse/tdelibs/kdeprint-restart-cupsd.diff
new file mode 100644
index 000000000..d464098eb
--- /dev/null
+++ b/opensuse/tdelibs/kdeprint-restart-cupsd.diff
@@ -0,0 +1,32 @@
+Index: kdeprint/cups/cupsdconf2/cupsddialog.cpp
+===================================================================
+--- kdeprint/cups/cupsdconf2/cupsddialog.cpp.orig
++++ kdeprint/cups/cupsdconf2/cupsddialog.cpp
+@@ -45,6 +45,7 @@
+ #include <kguiitem.h>
+ #include <kprocess.h>
+
++#include <stdlib.h>
+ #include <signal.h>
+ #include <cups/cups.h>
+
+@@ -205,15 +206,13 @@ bool CupsdDialog::restartServer(QString&
+ }
+ else
+ {
++ KProcess proc;
+ bool success = false;
+ if (getuid() == 0 )
+- success = (::kill(serverPid, SIGHUP) == 0);
++ proc << "rccups" << "force-reload";
+ else
+- {
+- KProcess proc;
+- proc << "kdesu" << "-c" << "kill -SIGHUP " + QString::number( serverPid );
+- success = proc.start( KProcess::Block ) && proc.normalExit();
+- }
++ proc << "kdesu" << "-c" << "rccups" << "force-reload";
++ success = proc.start( KProcess::Block ) && proc.normalExit();
+ if( !success )
+ msg = i18n("Unable to restart CUPS server (pid = %1)").arg(serverPid);
+ }
diff --git a/opensuse/tdelibs/kdeprint-utf8.diff b/opensuse/tdelibs/kdeprint-utf8.diff
new file mode 100644
index 000000000..ed2ad79da
--- /dev/null
+++ b/opensuse/tdelibs/kdeprint-utf8.diff
@@ -0,0 +1,13 @@
+Index: kdeprint/cups/kmcupsmanager.cpp
+===================================================================
+--- kdeprint/cups/kmcupsmanager.cpp.orig
++++ kdeprint/cups/kmcupsmanager.cpp
+@@ -85,7 +85,7 @@ static int trials = 5;
+ // change LANG variable so that CUPS is always using
+ // english language: translation may only come from the PPD
+ // itself, or from KDE.
+- setenv("LANG", "en", 1);
++ setenv("LANG", "en_US.UTF-8", 1);
+ }
+
+ KMCupsManager::~KMCupsManager()
diff --git a/opensuse/tdelibs/kdesu-settings.diff b/opensuse/tdelibs/kdesu-settings.diff
new file mode 100644
index 000000000..fc24c09b6
--- /dev/null
+++ b/opensuse/tdelibs/kdesu-settings.diff
@@ -0,0 +1,50 @@
+Subject: Change kdesu settings
+From: Lubos Lunak
+Bug: 216796
+Relates: kdelibs4/kdesu-settings.diff
+Patch-upstream: never
+
+Change kdesu(d) password keeping timeout only to 5 minutes and enable
+it by default (to match kdesu using sudo in 10.3 behaviour).
+KDE3 needs a hack in KPasswordDialog for enabling it by default.
+
+Update: Change the timeout back to 2 hours (bnc#404521).
+
+Index: kdesu/defaults.h
+===================================================================
+--- kdesu/defaults.h.orig
++++ kdesu/defaults.h
+@@ -13,8 +13,9 @@
+ #ifndef __Defaults_h_included__
+ #define __Defaults_h_included__
+
++/*const int defTimeout = 120*60;*/
+ const int defTimeout = 120*60;
+ const int defEchoMode = 0;
+-const int defKeep = false;
++const int defKeep = true;
+
+ #endif
+Index: kdeui/kpassdlg.cpp
+===================================================================
+--- kdeui/kpassdlg.cpp.orig
++++ kdeui/kpassdlg.cpp
+@@ -49,6 +49,8 @@
+
+ #include "kpassdlg.h"
+
++#include "../kdesu/defaults.h"
++
+ /*
+ * Password line editor.
+ */
+@@ -337,7 +339,8 @@ void KPasswordDialog::init()
+
+ KConfig* const cfg = KGlobal::config();
+ const KConfigGroupSaver saver(cfg, "Passwords");
+- if (m_Keep && cfg->readBoolEntry("Keep", false))
++ bool def = ( qstrcmp( qAppName(), "kdesu" ) == 0 ? defKeep : false );
++ if (m_Keep && cfg->readBoolEntry("Keep", def))
+ ++m_Keep;
+
+ m_pMain = new QWidget(this);
diff --git a/opensuse/tdelibs/kdeversion.diff b/opensuse/tdelibs/kdeversion.diff
new file mode 100644
index 000000000..f9b4cc1c2
--- /dev/null
+++ b/opensuse/tdelibs/kdeversion.diff
@@ -0,0 +1,13 @@
+Index: kdecore/kdeversion.h
+===================================================================
+--- kdecore/kdeversion.h.orig
++++ kdecore/kdeversion.h
+@@ -33,6 +33,8 @@
+
+ #define KDE_IS_VERSION(a,b,c) ( KDE_VERSION >= KDE_MAKE_VERSION(a,b,c) )
+
++#define KDELIBS_SUSE
++
+ /**
+ * Namespace for general KDE functions.
+ */
diff --git a/opensuse/tdelibs/kfile-beagle.diff b/opensuse/tdelibs/kfile-beagle.diff
new file mode 100644
index 000000000..467e68ed4
--- /dev/null
+++ b/opensuse/tdelibs/kfile-beagle.diff
@@ -0,0 +1,42 @@
+Index: kio/kfile/kurlbar.cpp
+===================================================================
+--- kio/kfile/kurlbar.cpp.orig
++++ kio/kfile/kurlbar.cpp
+@@ -605,8 +605,19 @@ void KURLBar::readItem( int i, KConfig *
+ if ( !url.isValid() || !KProtocolInfo::isKnownProtocol( url ))
+ return; // nothing we could do.
+
++ QString description = config->readEntry( QString("Description_") + number );
++
++ if (description.isEmpty() && url.protocol()=="beagle") {
++ KIO::UDSEntry uds;
++ const KURL kurl("beagle:?beagled-status");
++ if (!KIO::NetAccess::stat(kurl, uds))
++ return;
++
++ description = i18n("Desktop Search");
++ }
++
+ insertItem( url,
+- config->readEntry( QString("Description_") + number ),
++ description,
+ applicationLocal,
+ config->readEntry( QString("Icon_") + number ),
+ static_cast<KIcon::Group>(
+Index: kio/kfile/kfiledialog.cpp
+===================================================================
+--- kio/kfile/kfiledialog.cpp.orig
++++ kio/kfile/kfiledialog.cpp
+@@ -1165,6 +1165,12 @@ void KFileDialog::urlEntered(const KURL&
+ d->pathCombo->setURL( url );
+ }
+
++ if (url.protocol()=="beagle" && url.path()=="/") {
++ d->pathCombo->setEditText("beagle:/<"+i18n("search term")+">");
++ d->pathCombo->lineEdit()->setSelection(8,255);
++ d->pathCombo->setFocus();
++ }
++
+ locationEdit->blockSignals( true );
+ locationEdit->setCurrentItem( 0 );
+ if ( d->keepLocation )
diff --git a/opensuse/tdelibs/kickoff-drop-shadow.diff b/opensuse/tdelibs/kickoff-drop-shadow.diff
new file mode 100644
index 000000000..e4c7befc2
--- /dev/null
+++ b/opensuse/tdelibs/kickoff-drop-shadow.diff
@@ -0,0 +1,177 @@
+Index: kdefx/kstyle.cpp
+===================================================================
+--- kdefx/kstyle.cpp.orig
++++ kdefx/kstyle.cpp
+@@ -31,6 +31,7 @@
+
+ #include <qapplication.h>
+ #include <qbitmap.h>
++#include <qmetaobject.h>
+ #include <qcleanuphandler.h>
+ #include <qmap.h>
+ #include <qimage.h>
+@@ -79,7 +80,7 @@ namespace
+ QWidget* w1;
+ QWidget* w2;
+ };
+- typedef QMap<const QPopupMenu*,ShadowElements> ShadowMap;
++ typedef QMap<const QWidget*,ShadowElements> ShadowMap;
+ static ShadowMap *_shadowMap = 0;
+ QSingleCleanupHandler<ShadowMap> cleanupShadowMap;
+ ShadowMap &shadowMap() {
+@@ -113,8 +114,13 @@ namespace
+
+ const double shadow_strip[4] =
+ { 0.565, 0.675, 0.835, 0.945 };
+-}
+
++ static bool useDropShadow(QWidget* w)
++ {
++ return w && w->metaObject() &&
++ w->metaObject()->findProperty("KStyleMenuDropShadow") != -1;
++ }
++}
+
+ namespace
+ {
+@@ -128,12 +134,12 @@ class TransparencyHandler : public QObje
+
+ protected:
+ void blendToColor(const QColor &col);
+- void blendToPixmap(const QColorGroup &cg, const QPopupMenu* p);
++ void blendToPixmap(const QColorGroup &cg, const QWidget* p);
+ #ifdef HAVE_XRENDER
+- void XRenderBlendToPixmap(const QPopupMenu* p);
++ void XRenderBlendToPixmap(const QWidget* p);
+ #endif
+- void createShadowWindows(const QPopupMenu* p);
+- void removeShadowWindows(const QPopupMenu* p);
++ void createShadowWindows(const QWidget* p);
++ void removeShadowWindows(const QWidget* p);
+ void rightShadow(QImage& dst);
+ void bottomShadow(QImage& dst);
+ private:
+@@ -256,8 +262,16 @@ void KStyle::polish( QWidget* widget )
+ widget->installEventFilter(this);
+ }
+ }
+-}
++ if (widget->isTopLevel())
++ {
++ if (!d->menuHandler && useDropShadow(widget))
++ d->menuHandler = new TransparencyHandler(this, Disabled, 1.0, false);
+
++ if (d->menuHandler && useDropShadow(widget))
++ widget->installEventFilter(d->menuHandler);
++ }
++}
++
+
+ void KStyle::unPolish( QWidget* widget )
+ {
+@@ -267,8 +281,10 @@ void KStyle::unPolish( QWidget* widget )
+ QFrame::Shape shape = frame->frameShape();
+ if (shape == QFrame::ToolBarPanel || shape == QFrame::MenuBarPanel)
+ widget->removeEventFilter(this);
+- }
++ }
+ }
++ if (widget->isTopLevel() && d->menuHandler && useDropShadow(widget))
++ widget->removeEventFilter(d->menuHandler);
+ }
+
+
+@@ -1997,7 +2013,7 @@ void TransparencyHandler::bottomShadow(Q
+ }
+
+ // Create a shadow of thickness 4.
+-void TransparencyHandler::createShadowWindows(const QPopupMenu* p)
++void TransparencyHandler::createShadowWindows(const QWidget* p)
+ {
+ #ifdef Q_WS_X11
+ int x2 = p->x()+p->width();
+@@ -2044,7 +2060,7 @@ void TransparencyHandler::createShadowWi
+ #endif
+ }
+
+-void TransparencyHandler::removeShadowWindows(const QPopupMenu* p)
++void TransparencyHandler::removeShadowWindows(const QWidget* p)
+ {
+ #ifdef Q_WS_X11
+ ShadowMap::iterator it = shadowMap().find(p);
+@@ -2070,7 +2086,7 @@ bool TransparencyHandler::eventFilter( Q
+ // Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org>
+
+ // Added 'fake' menu shadows <04-Jul-2002> -- Karol
+- QPopupMenu* p = (QPopupMenu*)object;
++ QWidget* p = (QWidget*)object;
+ QEvent::Type et = event->type();
+
+ if (et == QEvent::Show)
+@@ -2109,13 +2125,23 @@ bool TransparencyHandler::eventFilter( Q
+ // * shadows after duplicate show events.
+ // * TODO : determine real cause for duplicate events
+ // * till 20021005
+- if (dropShadow && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p ))
++ if ((dropShadow || useDropShadow(p))
++ && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p ))
+ createShadowWindows(p);
+ }
++ else if (et == QEvent::Resize && p->isShown() && p->isTopLevel())
++ {
++ // Handle drop shadow
++ if (dropShadow || useDropShadow(p))
++ {
++ removeShadowWindows(p);
++ createShadowWindows(p);
++ }
++ }
+ else if (et == QEvent::Hide)
+ {
+ // Handle drop shadow
+- if (dropShadow)
++ if (dropShadow || useDropShadow(p))
+ removeShadowWindows(p);
+
+ // Handle translucency
+@@ -2140,7 +2166,7 @@ void TransparencyHandler::blendToColor(c
+ }
+
+
+-void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QPopupMenu* p)
++void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QWidget* p)
+ {
+ if (opacity < 0.0 || opacity > 1.0)
+ return;
+@@ -2153,7 +2179,10 @@ void TransparencyHandler::blendToPixmap(
+ return;
+
+ // Allow styles to define the blend pixmap - allows for some interesting effects.
+- kstyle->renderMenuBlendPixmap( blendPix, cg, p );
++ if (::qt_cast<QPopupMenu*>(p))
++ kstyle->renderMenuBlendPixmap( blendPix, cg, ::qt_cast<QPopupMenu*>(p) );
++ else
++ blendPix.fill(cg.button()); // Just tint as the default behavior
+
+ QImage blendImg = blendPix.convertToImage();
+ QImage backImg = pix.convertToImage();
+@@ -2166,13 +2195,17 @@ void TransparencyHandler::blendToPixmap(
+ // Here we go, use XRender in all its glory.
+ // NOTE: This is actually a bit slower than the above routines
+ // on non-accelerated displays. -- Karol.
+-void TransparencyHandler::XRenderBlendToPixmap(const QPopupMenu* p)
++void TransparencyHandler::XRenderBlendToPixmap(const QWidget* p)
+ {
+ KPixmap renderPix;
+ renderPix.resize( pix.width(), pix.height() );
+
+ // Allow styles to define the blend pixmap - allows for some interesting effects.
+- kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), p );
++ if (::qt_cast<QPopupMenu*>(p))
++ kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(),
++ ::qt_cast<QPopupMenu*>(p) );
++ else
++ renderPix.fill(p->colorGroup().button()); // Just tint as the default behavior
+
+ Display* dpy = qt_xdisplay();
+ Pixmap alphaPixmap;
diff --git a/opensuse/tdelibs/kimproxy-warning.diff b/opensuse/tdelibs/kimproxy-warning.diff
new file mode 100644
index 000000000..0731ebf4b
--- /dev/null
+++ b/opensuse/tdelibs/kimproxy-warning.diff
@@ -0,0 +1,13 @@
+Index: interfaces/kimproxy/library/kimproxy.cpp
+===================================================================
+--- interfaces/kimproxy/library/kimproxy.cpp.orig
++++ interfaces/kimproxy/library/kimproxy.cpp
+@@ -204,7 +204,7 @@ KIMProxy::KIMProxy( DCOPClient* dc ) : D
+
+ // FIXME: make this work when the sender object id is set to KIMIFace
+ if ( !connectDCOPSignal( 0, 0, method, method, false ) )
+- KMessageBox::information( 0, QString( "Couldn't connect DCOP signal.\nWon't receive any status notifications!" ) );
++ kdWarning() << "Couldn't connect DCOP signal. Won't receive any status notifications!" << endl;
+ }
+
+ KIMProxy::~KIMProxy( )
diff --git a/opensuse/tdelibs/kmimelist.diff b/opensuse/tdelibs/kmimelist.diff
new file mode 100644
index 000000000..484523f25
--- /dev/null
+++ b/opensuse/tdelibs/kmimelist.diff
@@ -0,0 +1,81 @@
+Index: kded/Makefile.am
+===================================================================
+--- kded/Makefile.am.orig
++++ kded/Makefile.am
+@@ -36,12 +36,16 @@ kbuildsycoca_la_SOURCES = kbuildsycoca.c
+ kctimefactory.cpp \
+ vfolder_menu.cpp
+
+-bin_PROGRAMS = kdontchangethehostname kde-menu
++bin_PROGRAMS = kdontchangethehostname kde-menu kmimelist
+
+ kdontchangethehostname_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+ kdontchangethehostname_LDADD = $(LIB_KDECORE)
+ kdontchangethehostname_SOURCES = khostname.cpp
+
++kmimelist_LDFLAGS = $(all_libraries) $(KDE_RPATH)
++kmimelist_LDADD = ../kio/libkio.la
++kmimelist_SOURCES = kmimelist.cpp
++
+ kde_menu_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+ kde_menu_LDADD = $(LIB_KIO)
+ kde_menu_SOURCES = kde-menu.cpp
+Index: kded/kmimelist.cpp
+===================================================================
+--- /dev/null
++++ kded/kmimelist.cpp
+@@ -0,0 +1,54 @@
++#include <ktrader.h>
++#include <kservice.h>
++#include <kmimetype.h>
++#include <assert.h>
++#include <kstandarddirs.h>
++#include <kservicegroup.h>
++#include <kimageio.h>
++#include <kuserprofile.h>
++#include <kprotocolinfo.h>
++
++#include <kapplication.h>
++
++#include <stdio.h>
++
++int main(int argc, char *argv[])
++{
++ KApplication k(argc,argv,"blurb",false);
++
++ KMimeType::List mtl = KMimeType::allMimeTypes( );
++ assert( mtl.count() );
++ qDebug( "Found %d mime types.", mtl.count() );
++ QValueListIterator<KMimeType::Ptr> it(mtl.begin());
++ KServiceTypeProfile::OfferList ol;
++
++ for (; it != mtl.end(); ++it)
++ {
++ {
++ // Application
++ printf( "APP:%s:", (*it)->name().latin1() );
++ ol = KServiceTypeProfile::offers((*it)->name(), "Application");
++ QValueListIterator<KServiceOffer> it2(ol.begin());
++ for (; it2 != ol.end(); ++it2) {
++ if ((*it2).allowAsDefault())
++ printf( " %s", (*it2).service()->desktopEntryPath().ascii() );
++
++ }
++ printf( "\n" );
++ }
++
++ {
++ // Embedded
++ printf( "PART:%s:", (*it)->name().latin1() );
++ ol = KServiceTypeProfile::offers((*it)->name(), "KParts/ReadOnlyPart");
++ QValueListIterator<KServiceOffer> it2(ol.begin());
++ for (; it2 != ol.end(); ++it2) {
++ if ((*it2).allowAsDefault())
++ printf( " %s", (*it2).service()->desktopEntryPath().ascii() );
++
++ }
++ printf( "\n" );
++ }
++ }
++}
++
diff --git a/opensuse/tdelibs/kremoteencoding-utf8.diff b/opensuse/tdelibs/kremoteencoding-utf8.diff
new file mode 100644
index 000000000..74600a0f4
--- /dev/null
+++ b/opensuse/tdelibs/kremoteencoding-utf8.diff
@@ -0,0 +1,28 @@
+Index: kio/kio/kremoteencoding.cpp
+===================================================================
+--- kio/kio/kremoteencoding.cpp.orig
++++ kio/kio/kremoteencoding.cpp
+@@ -53,7 +53,7 @@ QCString KRemoteEncoding::encode(const Q
+ QCString result = codec->fromUnicode(name);
+ if (codec->toUnicode(result) != name)
+ return name.latin1();
+-
++
+ return result;
+ }
+
+@@ -80,11 +80,13 @@ void KRemoteEncoding::setEncoding(const
+
+ if (name)
+ codec = QTextCodec::codecForName(name);
++ else
++ codec = QTextCodec::codecForMib( 106 ); // fallback to UTF-8
+
+ if (codec == 0L)
+ codec = QTextCodec::codecForMib(1);
+
+- kdDebug() << k_funcinfo << "setting encoding " << codec->name()
++ kdDebug() << k_funcinfo << "setting encoding " << codec->name()
+ << " for name=" << name << endl;
+ }
+
diff --git a/opensuse/tdelibs/ktip-icon-hack.diff b/opensuse/tdelibs/ktip-icon-hack.diff
new file mode 100644
index 000000000..4812646d1
--- /dev/null
+++ b/opensuse/tdelibs/ktip-icon-hack.diff
@@ -0,0 +1,56 @@
+Index: kdeui/ktip.cpp
+===================================================================
+--- kdeui/ktip.cpp.orig
++++ kdeui/ktip.cpp
+@@ -367,24 +367,47 @@ void KTipDialog::showMultiTip(QWidget *p
+ mInstance->raise();
+ }
+
++static QString fixTip(QString tip)
++{
++ QRegExp iconRegExp("<img src=\"(.*)\">");
++ iconRegExp.setMinimal(true);
++ if (iconRegExp.search(tip)>-1) {
++ QString iconName = iconRegExp.cap(1);
++ if (!iconName.isEmpty())
++ if (KGlobal::dirs()->findResource("icon", iconName).isEmpty())
++ tip.replace("crystalsvg","hicolor");
++ }
++
++ return tip;
++}
++
+ void KTipDialog::prevTip()
+ {
+ mDatabase->prevTip();
+- mTipText->setText(QString::fromLatin1(
++ QString currentTip = QString::fromLatin1(
+ "<qt text=\"%1\" bgcolor=\"%2\">%3</qt>")
+ .arg(mTextColor.name())
+ .arg(mBaseColor.name())
+- .arg(i18n(mDatabase->tip().utf8())));
++ .arg(i18n(mDatabase->tip().utf8()));
++
++
++ currentTip = fixTip(currentTip);
++ mTipText->setText(currentTip);
+ mTipText->setContentsPos(0, 0);
+ }
+
+ void KTipDialog::nextTip()
+ {
+ mDatabase->nextTip();
+- mTipText->setText(QString::fromLatin1("<qt text=\"%1\" bgcolor=\"%2\">%3</qt>")
++ QString currentTip = QString::fromLatin1(
++ "<qt text=\"%1\" bgcolor=\"%2\">%3</qt>")
+ .arg(mTextColor.name())
+ .arg(mBaseColor.name())
+- .arg(i18n(mDatabase->tip().utf8())));
++ .arg(i18n(mDatabase->tip().utf8()));
++
++
++ currentTip = fixTip(currentTip);
++ mTipText->setText(currentTip);
+ mTipText->setContentsPos(0, 0);
+ }
+
diff --git a/opensuse/tdelibs/kwalletd-try-open.diff b/opensuse/tdelibs/kwalletd-try-open.diff
new file mode 100644
index 000000000..547f8192d
--- /dev/null
+++ b/opensuse/tdelibs/kwalletd-try-open.diff
@@ -0,0 +1,81 @@
+Index: kio/misc/kwalletd/kwalletd.cpp
+===================================================================
+--- kio/misc/kwalletd/kwalletd.cpp.orig
++++ kio/misc/kwalletd/kwalletd.cpp
+@@ -355,6 +355,44 @@ int KWalletD::doTransactionOpen(const QC
+ return rc;
+ }
+
++int KWalletD::tryOpen(const QString& wallet, const QCString& password)
++{
++ if (isOpen(wallet))
++ return 0;
++
++ if (_tryOpenBlocked.isActive()) {
++ kdDebug() << "tryOpen is active.." << endl;
++ return -1;
++ }
++
++ if (!KWallet::Backend::exists(wallet))
++ return -2;
++
++ KWallet::Backend *b = new KWallet::Backend(wallet, false /*isPath*/);
++ int rc = b->open(QByteArray().duplicate(password, strlen(password)));
++ if (rc == 0) {
++ _wallets.insert(rc = generateHandle(), b);
++ _passwords[wallet] = password;
++ b->ref();
++ _tryOpenBlocked.stop();
++ QByteArray data;
++ QDataStream ds(data, IO_WriteOnly);
++ ds << wallet;
++ emitDCOPSignal("walletOpened(QString)", data);
++ }
++ else {
++ delete b;
++ // make sure that we're not bombed with a dictionary attack
++ _tryOpenBlocked.start (30 * 1000, true /*single shot*/);
++ if (++_failed > 5) {
++ _failed = 0;
++ QTimer::singleShot(0, this, SLOT(notifyFailures()));
++ }
++
++ rc = -1;
++ }
++ return rc;
++}
+
+ int KWalletD::internalOpen(const QCString& appid, const QString& wallet, bool isPath, WId w, bool modal) {
+ int rc = -1;
+Index: kio/misc/kwalletd/kwalletd.h
+===================================================================
+--- kio/misc/kwalletd/kwalletd.h.orig
++++ kio/misc/kwalletd/kwalletd.h
+@@ -26,6 +26,7 @@
+ #include <qintdict.h>
+ #include <qstring.h>
+ #include <qwidget.h>
++#include <qtimer.h>
+ #include <qguardedptr.h>
+ #include "kwalletbackend.h"
+
+@@ -51,8 +52,10 @@ class KWalletD : public KDEDModule {
+
+ // Open and unlock the wallet
+ virtual int open(const QString& wallet, uint wId);
+-
++ // Open and unlock the wallet
++ virtual int tryOpen(const QString& wallet, const QCString& passwd);
+ // Open and unlock the wallet with this path
++
+ virtual int openPath(const QString& path, uint wId);
+
+ // Asynchronous open - must give the object to return the handle
+@@ -186,6 +189,7 @@ class KWalletD : public KDEDModule {
+ int _idleTime;
+ QMap<QString,QStringList> _implicitAllowMap, _implicitDenyMap;
+ KTimeout *_timeouts;
++ QTimer _tryOpenBlocked;
+
+ QPtrList<KWalletTransaction> _transactions;
+ QGuardedPtr< QWidget > activeDialog;
diff --git a/opensuse/tdelibs/light_v_2_scrollbar_patch.patch b/opensuse/tdelibs/light_v_2_scrollbar_patch.patch
new file mode 100644
index 000000000..e4ad1dd81
--- /dev/null
+++ b/opensuse/tdelibs/light_v_2_scrollbar_patch.patch
@@ -0,0 +1,34 @@
+diff -ur kdelibs-3.5.10.orig/kstyles/light/lightstyle-v2.cpp kdelibs-3.5.10/kstyles/light/lightstyle-v2.cpp
+--- kdelibs-3.5.10.orig/kstyles/light/lightstyle-v2.cpp 2006-03-17 13:19:10.000000000 +0300
++++ kdelibs-3.5.10/kstyles/light/lightstyle-v2.cpp 2011-05-07 23:30:18.000000000 +0400
+@@ -501,12 +501,14 @@
+ p->drawLine(r.topLeft(), r.topRight());
+ p->setPen(cg.background());
+ p->drawLine(r.left(), r.top() + 1, r.right(), r.top() + 1);
+- fr.addCoords(0, 2, 0, 0);
++ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom());
++ fr.addCoords(0, 2, 0, -1);
+ } else {
+ p->drawLine(r.topLeft(), r.bottomLeft());
+ p->setPen(cg.background());
+ p->drawLine(r.left() + 1, r.top(), r.left() + 1, r.bottom());
+- fr.addCoords(2, 0, 0, 0);
++ p->drawLine(r.right(), r.top(), r.right(), r.bottom());
++ fr.addCoords(2, 0, -1, 0);
+ }
+
+ p->fillRect(fr, cg.brush((flags & Style_Down) ?
+@@ -523,11 +525,13 @@
+ if (flags & Style_Horizontal) {
+ p->drawLine(r.topLeft(), r.topRight());
+ p->setPen(cg.background());
++ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom());
+ p->drawLine(r.left(), r.top() + 1, r.right(), r.top() + 1);
+ fr.addCoords(0, 2, 0, -1);
+ } else {
+ p->drawLine(r.topLeft(), r.bottomLeft());
+ p->setPen(cg.background());
++ p->drawLine(r.right(), r.top(), r.right(), r.bottom());
+ p->drawLine(r.left() + 1, r.top(), r.left() + 1, r.bottom());
+ fr.addCoords(2, 0, -1, 0);
+ }
diff --git a/opensuse/tdelibs/limit-max-image-size.diff b/opensuse/tdelibs/limit-max-image-size.diff
new file mode 100644
index 000000000..6a01bf063
--- /dev/null
+++ b/opensuse/tdelibs/limit-max-image-size.diff
@@ -0,0 +1,28 @@
+Index: kapplication.cpp
+===================================================================
+RCS file: /home/kde/kdelibs/kdecore/kapplication.cpp,v
+retrieving revision 1.670
+diff -u -p -r1.670 kapplication.cpp
+--- kdecore/kapplication.cpp 22 Jul 2004 16:50:04 -0000 1.670
++++ kdecore/kapplication.cpp 16 Aug 2004 20:31:02 -0000
+@@ -43,6 +43,7 @@
+ #include <qtooltip.h>
+ #include <qstylefactory.h>
+ #include <qmetaobject.h>
++#include <qimage.h>
+ #ifndef QT_NO_SQL
+ #include <qsqlpropertymap.h>
+ #endif
+@@ -1975,6 +1976,12 @@ void KApplication::propagateSettings(Set
+ KConfigBase* config = KGlobal::config();
+ KConfigGroupSaver saver( config, "KDE" );
+
++#ifdef QT_HAVE_MAX_IMAGE_SIZE
++ QSize maxImageSize(4096, 4096);
++ maxImageSize = config->readSizeEntry("MaxImageSize", &maxImageSize);
++ QImage::setMaxImageSize(maxImageSize);
++#endif
++
+ int num = config->readNumEntry("CursorBlinkRate", QApplication::cursorFlashTime());
+ if ((num != 0) && (num < 200))
+ num = 200;
diff --git a/opensuse/tdelibs/lpoptions-cups-1.2.diff b/opensuse/tdelibs/lpoptions-cups-1.2.diff
new file mode 100644
index 000000000..aa3f5d5b6
--- /dev/null
+++ b/opensuse/tdelibs/lpoptions-cups-1.2.diff
@@ -0,0 +1,28 @@
+Index: kdeprint/kmvirtualmanager.cpp
+===================================================================
+--- kdeprint/kmvirtualmanager.cpp.orig
++++ kdeprint/kmvirtualmanager.cpp
+@@ -179,7 +179,7 @@ void KMVirtualManager::setAsDefault(KMPr
+
+ void KMVirtualManager::refresh()
+ {
+- QFileInfo fi(QDir::homeDirPath() + QFile::decodeName("/.lpoptions"));
++ QFileInfo fi(QDir::homeDirPath() + QFile::decodeName("/.cups/lpoptions"));
+ QFileInfo fi2(QFile::decodeName("/etc/cups/lpoptions"));
+
+ // if root, then only use global file: trick -> use twice the same file
+@@ -301,7 +301,13 @@ void KMVirtualManager::triggerSave()
+ filename = QFile::decodeName("/etc/cups/lpoptions");
+ }
+ else
+- filename = QDir::homeDirPath() + QFile::decodeName("/.lpoptions");
++ {
++ QDir cupsDir(QDir::home().absPath()+"/.cups");
++ if (!cupsDir.exists())
++ cupsDir.mkdir(QDir::home().absPath()+"/.cups");
++ filename = QDir::homeDirPath() + QFile::decodeName("/.cups/lpoptions");
++ }
++
+ if (!filename.isEmpty())
+ {
+ saveFile(filename);
diff --git a/opensuse/tdelibs/mimetype-changes.diff b/opensuse/tdelibs/mimetype-changes.diff
new file mode 100644
index 000000000..ea47629b8
--- /dev/null
+++ b/opensuse/tdelibs/mimetype-changes.diff
@@ -0,0 +1,36 @@
+Index: mimetypes/application/x-rpm.desktop
+===================================================================
+--- mimetypes/application/x-rpm.desktop.orig
++++ mimetypes/application/x-rpm.desktop
+@@ -1,4 +1,5 @@
+ [Desktop Entry]
++X-KDE-AutoEmbed=true
+ Type=MimeType
+ MimeType=application/x-rpm
+ Icon=rpm
+Index: mimetypes/application/x-ogg.desktop
+===================================================================
+--- mimetypes/application/x-ogg.desktop.orig
++++ mimetypes/application/x-ogg.desktop
+@@ -4,7 +4,7 @@
+ # application/ogg "inherits" from it, so that apps associated with x-ogg can open ogg files.
+ Type=MimeType
+ MimeType=application/x-ogg
+-Icon=multimedia
++Icon=sound
+ Comment=Ogg Multimedia
+ Comment[ar]=وسائط Ogg متعددة
+ Comment[az]=Ogg Multimediya
+Index: mimetypes/application/ogg.desktop
+===================================================================
+--- mimetypes/application/ogg.desktop.orig
++++ mimetypes/application/ogg.desktop
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Type=MimeType
+ MimeType=application/ogg
+-Icon=multimedia
++Icon=sound
+ Patterns=*.ogg;*.OGG;
+ # Previous name of this mimetype
+ X-KDE-IsAlso=application/x-ogg
diff --git a/opensuse/tdelibs/mimetype-icons.tar.bz2 b/opensuse/tdelibs/mimetype-icons.tar.bz2
new file mode 100644
index 000000000..b37a35baa
--- /dev/null
+++ b/opensuse/tdelibs/mimetype-icons.tar.bz2
Binary files differ
diff --git a/opensuse/tdelibs/mozilla-sliders.patch b/opensuse/tdelibs/mozilla-sliders.patch
new file mode 100644
index 000000000..004b0fd36
--- /dev/null
+++ b/opensuse/tdelibs/mozilla-sliders.patch
@@ -0,0 +1,19 @@
+Index: kdefx/kstyle.cpp
+===================================================================
+--- kdefx/kstyle.cpp.orig
++++ kdefx/kstyle.cpp
+@@ -2210,6 +2210,14 @@ void TransparencyHandler::XRenderBlendTo
+ void KStyle::virtual_hook( int, void* )
+ { /*BASE::virtual_hook( id, data );*/ }
+
++// HACK for gtk-qt-engine
++
++KDE_EXPORT extern "C"
++void kde_kstyle_set_scrollbar_type_windows( void* style )
++{
++ ((KStyle*)style)->setScrollBarType( KStyle::WindowsStyleScrollBar );
++}
++
+ // vim: set noet ts=4 sw=4:
+ // kate: indent-width 4; replace-tabs off; tab-width 4; space-indent off;
+
diff --git a/opensuse/tdelibs/networkstatus.diff b/opensuse/tdelibs/networkstatus.diff
new file mode 100644
index 000000000..d7b4e8c89
--- /dev/null
+++ b/opensuse/tdelibs/networkstatus.diff
@@ -0,0 +1,6006 @@
+Index: networkstatus/connectionmanager.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/connectionmanager.cpp
+@@ -0,0 +1,171 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <kapplication.h>
++#include <kdebug.h>
++#include <kstaticdeleter.h>
++
++#include "connectionmanager.h"
++#include "connectionmanager_p.h"
++
++// Connection manager itself
++ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) )
++{
++ d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" );
++
++ connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false );
++
++ initialise();
++}
++
++ConnectionManager::~ConnectionManager()
++{
++ delete d;
++}
++
++ConnectionManager *ConnectionManager::s_self = 0L;
++
++ConnectionManager *ConnectionManager::self()
++{
++ static KStaticDeleter<ConnectionManager> deleter;
++ if(!s_self)
++ deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) );
++ return s_self;
++}
++
++void ConnectionManager::initialise()
++{
++ // determine initial state and set the state object accordingly.
++ d->status = ( NetworkStatus::Status )d->service->status();
++}
++
++NetworkStatus::Status ConnectionManager::status()
++{
++ return d->status;
++}
++
++void ConnectionManager::slotStatusChanged( int status )
++{
++ d->status = ( NetworkStatus::Status )status;
++ switch ( status ) {
++ case NetworkStatus::NoNetworks:
++ break;
++ case NetworkStatus::Unreachable:
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ case NetworkStatus::OfflineFailed:
++ case NetworkStatus::ShuttingDown:
++ case NetworkStatus::Offline:
++ case NetworkStatus::Establishing:
++ if ( d->disconnectPolicy == Managed ) {
++ emit d->disconnected();
++ } else if ( d->disconnectPolicy == OnNextChange ) {
++ setDisconnectPolicy( Manual );
++ emit d->disconnected();
++ }
++ break;
++ case NetworkStatus::Online:
++ if ( d->disconnectPolicy == Managed ) {
++ emit d->connected();
++ } else if ( d->disconnectPolicy == OnNextChange ) {
++ setConnectPolicy( Manual );
++ emit d->connected();
++ }
++ break;
++ default:
++ kdDebug() << k_funcinfo << "Unrecognised status code!" << endl;
++ }
++ emit statusChanged( d->status );
++}
++
++ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const
++{
++ return d->connectPolicy;
++}
++
++void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy )
++{
++ d->connectPolicy = policy;
++}
++
++ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const
++{
++ return d->disconnectPolicy;
++}
++
++void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy )
++{
++ d->disconnectPolicy = policy;
++}
++
++void ConnectionManager::setManualConnectionPolicies()
++{
++ d->connectPolicy = ConnectionManager::Manual;
++ d->disconnectPolicy = ConnectionManager::Manual;
++}
++
++void ConnectionManager::setManagedConnectionPolicies()
++{
++ d->connectPolicy = ConnectionManager::Managed;
++ d->disconnectPolicy = ConnectionManager::Managed;
++}
++
++void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member )
++{
++ d->connectReceiver = receiver;
++ d->connectSlot = member;
++ connect( d, SIGNAL( connected() ), receiver, member );
++}
++
++void ConnectionManager::forgetConnectSlot()
++{
++ disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot );
++ d->connectReceiver = 0;
++ d->connectSlot = 0;
++}
++
++bool ConnectionManager::isConnectSlotRegistered() const
++{
++ return ( d->connectSlot != 0 );
++}
++
++void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member )
++{
++ d->disconnectReceiver = receiver;
++ d->disconnectSlot = member;
++ connect( d, SIGNAL( disconnected() ), receiver, member );
++}
++
++void ConnectionManager::forgetDisconnectSlot()
++{
++ disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot );
++ d->disconnectReceiver = 0;
++ d->disconnectSlot = 0;
++}
++
++bool ConnectionManager::isDisconnectSlotRegistered() const
++{
++ return ( d->disconnectSlot != 0 );
++}
++
++#include "connectionmanager.moc"
++
+Index: networkstatus/connectionmanager.h
+===================================================================
+--- /dev/null
++++ networkstatus/connectionmanager.h
+@@ -0,0 +1,167 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDE_CONNECTION_MANAGER_H
++#define KDE_CONNECTION_MANAGER_H
++
++#include <dcopobject.h>
++#include <kdemacros.h>
++
++#include <networkstatuscommon.h>
++
++class ConnectionManagerPrivate;
++
++class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject
++{
++Q_OBJECT
++K_DCOP
++k_dcop:
++ void slotStatusChanged( int status );
++public:
++ /**
++ * This defines application policy in response to networking connect/disconnect events
++ * Manual - the app only disconnects when the user does so
++ * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter
++ * Manual
++ * Managed - the app should disconnect when the ConnectionManager thinks the system is
++ * offline
++ */
++ enum ConnectionPolicy { Manual, OnNextChange, Managed };
++ /**
++ * Set a policy to manage the application's connect behaviour
++ */
++ void setConnectPolicy( ConnectionPolicy );
++ /**
++ * Retrieve a policy managing the application's connect behaviour
++ */
++ ConnectionPolicy connectPolicy() const;
++
++ /**
++ * Set a policy to manage the application's disconnect behaviour
++ */
++ void setDisconnectPolicy( ConnectionPolicy );
++
++ /**
++ * Retrieve a policy managing the application's disconnect behaviour
++ */
++ ConnectionPolicy disconnectPolicy() const;
++
++ /*
++ * We'll get logic of the form
++ * onStatusChange() {
++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ||
++ * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed )
++ * {
++ * // do connect
++ *
++ * // reset the policy
++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange )
++ * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager,
++ * ConnectionManager::Manual );
++ * }
++ *
++ * Do we just use the CM for policy storage, or do we try to factor the logic to implement the
++ * policy into the CM too?
++ *
++ * could signal doConnect(), then reset the policy
++ * or could register a connect slot
++ * registerConnectMethod( QObject * receiver, const char * member );
++ * unregisterConnectMethod();
++ * etc.
++ *
++ * The problem with automatically controlled behaviour, where policy may change as a result of a
++ * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to
++ * be updated in any case.
++ * CM need
++ */
++ /**
++ * Lazy-method to set Manual on both policies
++ */
++ void setManualConnectionPolicies();
++ /**
++ * Lazy-method to set Managed on both policies
++ */
++ void setManagedConnectionPolicies();
++
++ /**
++ * Record a slot to call on a given receiving QObject when
++ * 1) the network connection is online,
++ * 2) the policy mandates that the app connect
++ *
++ * Only one slot may be registered at any one time. If a second slot is
++ * registered, the first slot is forgotten
++ * @param receiver the QObject where the slot is located
++ * @param member the slot to call. Set up member using the SLOT() macro.
++ */
++ void registerConnectSlot( QObject * receiver, const char * member );
++
++ /**
++ * Forget any connect slot previously registered
++ */
++ void forgetConnectSlot();
++
++ /**
++ * Has any slot been registered to be called on connect?
++ */
++ bool isConnectSlotRegistered() const;
++
++ /**
++ * Record a slot to call on a given receiving QObject when
++ * 1) the network connection goes offline (in any way ),
++ * 2) the policy mandates that the app disconnect
++ *
++ * Only one slot may be registered at any one time. If a second slot is
++ * registered, the first slot is forgotten
++ * @param receiver the QObject where the slot is located
++ * @param member the slot to call. Set up member using the SLOT() macro.
++ */
++ void registerDisconnectSlot( QObject * receiver, const char * member );
++
++ /**
++ * Forget any disconnect slot previously registered
++ */
++ void forgetDisconnectSlot();
++
++ /**
++ * Has any slot been registered to be called on disconnect?
++ */
++ bool isDisconnectSlotRegistered() const;
++
++ /// existing API
++
++ static ConnectionManager* self();
++ virtual ~ConnectionManager();
++ NetworkStatus::Status status();
++signals:
++ // signal that the network for a hostname is up/down
++ void statusChanged( NetworkStatus::Status status );
++private:
++ // sets up internal state
++ void initialise();
++ // reread the desktop status from the daemon and update internal state
++ ConnectionManager( QObject *parent, const char * name );
++ ConnectionManagerPrivate * d;
++ static ConnectionManager * s_self;
++};
++
++#endif
++
+Index: networkstatus/connectionmanager_p.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/connectionmanager_p.cpp
+@@ -0,0 +1,13 @@
++#include "connectionmanager_p.h"
++
++ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ),
++ disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ),
++ disconnectReceiver( 0 ), disconnectSlot( 0 )
++{
++}
++
++ConnectionManagerPrivate::~ConnectionManagerPrivate()
++{
++}
++
++#include "connectionmanager_p.moc"
+Index: networkstatus/connectionmanager_p.h
+===================================================================
+--- /dev/null
++++ networkstatus/connectionmanager_p.h
+@@ -0,0 +1,55 @@
++/* This file is part of the KDE project
++ Copyright (C) 2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef CONNECTIONMANAGERPRIVATE_H
++#define CONNECTIONMANAGERPRIVATE_H
++
++#include <qobject.h>
++
++#include "connectionmanager.h"
++#include "networkstatuscommon.h"
++#include "networkstatusiface_stub.h"
++
++
++// ConnectionManager's private parts
++class ConnectionManagerPrivate : public QObject
++{
++Q_OBJECT
++ friend class ConnectionManager;
++public:
++ ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0);
++ ~ConnectionManagerPrivate();
++ // this holds the currently active state
++ NetworkStatus::Status status;
++ NetworkStatusIface_stub * service;
++ ConnectionManager::ConnectionPolicy connectPolicy;
++ ConnectionManager::ConnectionPolicy disconnectPolicy;
++ QObject * connectReceiver;
++ const char * connectSlot;
++ QObject * disconnectReceiver;
++ const char * disconnectSlot;
++signals:
++ void connected();
++ void disconnected();
++};
++
++#endif
+Index: networkstatus/Makefile.am
+===================================================================
+--- /dev/null
++++ networkstatus/Makefile.am
+@@ -0,0 +1,45 @@
++#SUBDIRS = networkstatustray
++
++METASOURCES = AUTO
++
++INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes)
++
++kde_module_LTLIBRARIES = kded_networkstatus.la
++
++kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \
++ network.cpp
++kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la
++kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version
++
++servicesdir = $(kde_servicesdir)/kded
++
++services_DATA = networkstatus.desktop
++
++lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la
++
++libnetworkstatus_la_LIBADD = $(LIB_KDECORE)
++libnetworkstatus_la_LDFLAGS = $(all_libraries)
++libnetworkstatus_la_SOURCES = networkstatuscommon.cpp
++
++libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la
++libconnectionmanager_la_LDFLAGS = $(all_libraries)
++libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub
++
++noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient
++
++networkstatustestservice_LDFLAGS = $(all_libraries)
++networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la
++networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub
++
++networkstatustestclient_LDFLAGS = $(all_libraries)
++networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la
++networkstatustestclient_SOURCES = testclient.cpp testclientview.ui
++
++managedconnectiontestclient_LDFLAGS = $(all_libraries)
++managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la
++managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui
++
++noinst_HEADERS = network.h testservice.h testclient.h
++
++include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \
++ networkstatusiface.h
+Index: networkstatus/network.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/network.cpp
+@@ -0,0 +1,62 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <kdebug.h>
++
++#include "network.h"
++
++Network::Network( NetworkStatus::Properties properties )
++ : m_name( properties.name ), m_status( properties.status ), m_service( properties.service )
++{
++}
++
++void Network::setStatus( NetworkStatus::Status status )
++{
++ m_status = status;
++}
++
++NetworkStatus::Status Network::status()
++{
++ return m_status;
++}
++
++void Network::setName( const QString& name )
++{
++ m_name = name;
++}
++
++QString Network::name()
++{
++ return m_name;
++}
++
++QString Network::service()
++{
++ return m_service;
++}
++
++void Network::setService( const QString& service )
++{
++ m_service = service;
++}
++
++// vim: sw=4 ts=4
+Index: networkstatus/network.h
+===================================================================
+--- /dev/null
++++ networkstatus/network.h
+@@ -0,0 +1,60 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef NETWORKSTATUS_NETWORK_H
++#define NETWORKSTATUS_NETWORK_H
++
++#include "networkstatuscommon.h"
++
++class Network
++{
++public:
++ Network( const QString name );
++ Network( NetworkStatus::Properties properties );
++ /**
++ * Update the status of this network
++ */
++ void setStatus( NetworkStatus::Status status );
++ /**
++ * The connection status of this network
++ */
++ NetworkStatus::Status status();
++ /**
++ * The name of this network
++ */
++ QString name();
++ void setName( const QString& name );
++ /**
++ * Returns the service owning this network
++ */
++ QString service();
++ void setService( const QString& service );
++
++private:
++ Network( const Network & );
++ QString m_name;
++ NetworkStatus::Status m_status;
++ QString m_service;
++};
++
++#endif
++// vim: sw=4 ts=4
+Index: networkstatus/networkstatuscommon.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatuscommon.cpp
+@@ -0,0 +1,76 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include "networkstatuscommon.h"
++
++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p )
++{
++ s << p.name;
++ s << (int)p.status;
++ s << p.service;
++ return s;
++}
++
++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p )
++{
++ int status;
++ s >> p.name;
++ s >> status;
++ p.status = (NetworkStatus::Status)status;
++ s >> p.service;
++ return s;
++}
++
++namespace NetworkStatus
++{
++ QString toString( NetworkStatus::Status st )
++ {
++ QString str;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ str = "NoNetworks";
++ break;
++ case NetworkStatus::Unreachable:
++ str = "Unreachable";
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ str = "OfflineDisconnected";
++ break;
++ case NetworkStatus::OfflineFailed:
++ str = "OfflineFailed";
++ break;
++ case NetworkStatus::ShuttingDown:
++ str = "ShuttingDown";
++ break;
++ case NetworkStatus::Offline:
++ str = "Offline";
++ break;
++ case NetworkStatus::Establishing:
++ str = "Establishing";
++ break;
++ case NetworkStatus::Online:
++ str = "Online";
++ break;
++ }
++ return str;
++ }
++} // namespace NetworkStatus
+Index: networkstatus/networkstatuscommon.h
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatuscommon.h
+@@ -0,0 +1,52 @@
++/* This file is part of kdepim
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef NETWORKSTATUS_COMMON_H
++#define NETWORKSTATUS_COMMON_H
++
++#include <qstringlist.h>
++
++namespace NetworkStatus
++{
++ enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online };
++ enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable };
++ enum UnusedDemandPolicy { All, User, None, Permanent };
++
++ // BINARY COMPATIBILITY ALERT BEGIN !!!!
++ struct Properties
++ {
++ QString name;
++ Status status;
++ UnusedDemandPolicy unused1;
++ QCString service;
++ bool unused3;
++ QStringList unused4;
++ };
++ // BINARY COMPATIBILITY ALERT END !!!!
++
++ QString toString( Status st );
++}
++
++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p );
++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p );
++
++#endif
+Index: networkstatus/networkstatus.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatus.cpp
+@@ -0,0 +1,163 @@
++/* This file is part of kdepim
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include "networkstatus.h"
++
++#include <qmap.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kdebug.h>
++
++#include "network.h"
++#include <kdemacros.h>
++
++extern "C" {
++ KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj )
++ {
++ return new NetworkStatusModule( obj );
++ }
++}
++
++// INTERNALLY USED STRUCTS AND TYPEDEFS
++
++typedef QMap< QString, Network * > NetworkMap;
++
++class NetworkStatusModule::Private
++{
++public:
++ NetworkMap networks;
++ NetworkStatus::Status status;
++};
++
++// CTORS/DTORS
++
++NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private )
++{
++ d->status = NetworkStatus::NoNetworks;
++ connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) );
++ // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) );
++}
++
++NetworkStatusModule::~NetworkStatusModule()
++{
++ NetworkMap::ConstIterator it;
++ const NetworkMap::ConstIterator end = d->networks.end();
++
++ for ( it = d->networks.begin(); it != end; ++it ) {
++ delete ( *it );
++ }
++
++ delete d;
++}
++
++// CLIENT INTERFACE
++
++QStringList NetworkStatusModule::networks()
++{
++ kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl;
++ return d->networks.keys();
++}
++
++int NetworkStatusModule::status()
++{
++ kdDebug() << k_funcinfo << " status: " << (int)d->status << endl;
++ return (int)d->status;
++}
++
++//protected:
++
++void NetworkStatusModule::updateStatus()
++{
++ NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks;
++ const NetworkStatus::Status oldStatus = d->status;
++
++ NetworkMap::ConstIterator it;
++ const NetworkMap::ConstIterator end = d->networks.end();
++ for ( it = d->networks.begin(); it != end; ++it ) {
++ if ( ( *it )->status() > bestStatus )
++ bestStatus = ( *it )->status();
++ }
++ d->status = bestStatus;
++
++ if ( oldStatus != d->status ) {
++ statusChange( (int)d->status );
++ }
++}
++
++void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId )
++{
++ // unregister and delete any networks owned by a service that has just unregistered
++ NetworkMap::Iterator it = d->networks.begin();
++ const NetworkMap::Iterator end = d->networks.end();
++ while (it != d->networks.end())
++ {
++ if ( ( *it )->service() == QString( appId ) )
++ {
++ NetworkMap::Iterator toRemove = it++;
++ delete *toRemove;
++ d->networks.remove( toRemove );
++ updateStatus();
++ continue;
++ }
++ ++it;
++ }
++}
++
++// SERVICE INTERFACE //
++void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st )
++{
++ kdDebug() << k_funcinfo << networkName << ", " << st << endl;
++ NetworkStatus::Status changedStatus = (NetworkStatus::Status)st;
++ Network * net = 0;
++ NetworkMap::Iterator it = d->networks.find( networkName );
++ if ( it != d->networks.end() ) {
++ net = (*it);
++ net->setStatus( changedStatus );
++ updateStatus();
++ }
++ else
++ kdDebug() << " No network named '" << networkName << "' found." << endl;
++}
++
++void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties )
++{
++ kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl;
++
++ d->networks.insert( properties.name, new Network( properties ) );
++ updateStatus();
++}
++
++void NetworkStatusModule::unregisterNetwork( const QString & networkName )
++{
++ kdDebug() << k_funcinfo << networkName << endl;
++
++ NetworkMap::Iterator it = d->networks.find( networkName );
++ if ( it != d->networks.end() ) {
++ delete *it;
++ d->networks.remove( it );
++ }
++ updateStatus();
++}
++
++#include "networkstatus.moc"
++// vim: set noet sw=4 ts=4:
+Index: networkstatus/networkstatus.desktop
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatus.desktop
+@@ -0,0 +1,98 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Network Status Daemon
++Name[af]=Netwerk status bediener
++Name[ar]=مراقب القرص و التنفيذ لحالة الشبكة
++Name[bg]=Демон за състояние на мрежата
++Name[ca]=Dimoni de l'estat de la xarxa
++Name[cs]=Démon stavu sítě
++Name[da]=Netværkstatusdæmon
++Name[de]=Überwachung des Netzwerkstatus
++Name[el]=Δαίμονας κατάστασης δικτύου
++Name[es]=Daemon de estado de la red
++Name[et]=Võrguoleku deemon
++Name[eu]=Sarearen egoera deabrua
++Name[fa]=شبح وضعیت شبکه
++Name[fi]=Verkkotilan tarkkailija
++Name[fr]=Suivi de l'état du réseau
++Name[fy]=Netwurktastândaemon
++Name[gl]=Daemon do Estado da Rede
++Name[hu]=Hálózati állapotjelző szolgáltatás
++Name[is]=Netstöðupúki
++Name[it]=Demone dello stato della rete
++Name[ja]=ネットワークステータスデーモン
++Name[kk]=Желі күйінің қызметі
++Name[km]=ដេមិន​ស្ថានភាព​បណ្ដាញ
++Name[lt]=Tinklo statuso tarnyba
++Name[mk]=Даемон за мрежен статус
++Name[ms]=Daemon Berstatus Rangkaian
++Name[nb]=Statusnisse for nettverket
++Name[nds]=Nettwarkstatus-Dämoon
++Name[ne]=सञ्जाल स्थिति डेइमन
++Name[nl]=Netwerkstatusdaemon
++Name[nn]=Statusnisse for nettverket
++Name[pl]=Usługa stanu sieci
++Name[pt]=Servidor de Estado de Rede
++Name[pt_BR]=Daemon de Status da Rede
++Name[ru]=Служба состояния сети
++Name[sk]=Daemon stavu siete
++Name[sl]=Demon za omrežno stanje
++Name[sr]=Демон за статус мреже
++Name[sr@Latn]=Demon za status mreže
++Name[sv]=Nätverksstatusdemon
++Name[ta]=வலைப்பின்னல் நிலை டெமான்
++Name[tr]=Ağ Durum İzleyici
++Name[uk]=Демон стану мережі
++Name[zh_CN]=网络状态守护程序
++Name[zh_TW]=網路狀態守護程式
++Comment=Tracks status of network interfaces and provides notification to applications using the network.
++Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik.
++Comment[bg]=Следене на състоянието на мрежата и предаване на информацията на програмите, които имат нужда
++Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa.
++Comment[cs]=Zjiš'tuje stav síťových rozhraní a upozorňuje v případě přístupu aplikací k síti.
++Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket.
++Comment[de]=Überprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen
++Comment[el]=Παρακολουθεί την κατάσταση του δικτύου και παρέχει ειδοποιήσεις σε εφαρμογές που χρησιμοποιούν το δίκτυο.
++Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red.
++Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada.
++Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die.
++Comment[fa]=وضعیت واسطهای شبکه را شیار داده و با استفاده از شبکه، برای کاربردها اخطار فراهم می‌کند.
++Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia.
++Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau
++Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte.
++Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede.
++Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetőséget biztosít hálózati alkalmazások számára.
++Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið.
++Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete.
++Comment[ja]=ネットワークインターフェースの状態を追跡し、ネットワークを用いるアプリケーションに通知します
++Comment[kk]=Желі интерфейстерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі.
++Comment[km]=តាមដាន​ស្ថានភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។
++Comment[lt]=Seka tinklo sąsajų būseną ir informuoja apie jas programas, naudojančias tinklą
++Comment[mk]=Го следи статусот на мрежните интерфејси и дава известувања на апликациите што ја користат мрежата.
++Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut.
++Comment[nb]=Overvåker status for nettverksgrensesnitt og varsler programmer som bruker nettverket.
++Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt.
++Comment[ne]=सञ्जाल इन्टरफेसको स्थिति ट्र्याक गर्दछ र सञ्जाल प्रयोग गरेर अनुप्रयोगमा जानकारी उपलब्ध गराउछ ।
++Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte.
++Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket.
++Comment[pl]=Śledzi stan interfejsów sieciowych i powiadamia programy używające sieci.
++Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede.
++Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede.
++Comment[ru]=Служба отслеживания состояния сетевых интерфейсов и обращения приложений к сети.
++Comment[sk]=Sleduje stav sieťových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieť.
++Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoča obvestila programom, ki uporabljajo omrežje
++Comment[sr]=Прати статус мрежних интерфејса и пружа обавештења програмима који користе мрежу.
++Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveštenja programima koji koriste mrežu.
++Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahåller underrättelser till program som använder nätverket.
++Comment[ta]=வலைப்பின்னலைப் பயன்படுத்தி வலைப்பின்னல் இடைமுகங்களின் நிலையை கண்காணிக்கிறது மற்றும் பயன்பாடுகளுக்கு அறிவிப்பை வழங்குகிறது.
++Comment[uk]=Слідкує за станом інтерфейсів мережі і сповіщає програми, які користуються мережею.
++Comment[zh_CN]=跟踪网卡的状态并为应用程序提供使用网络的通知。
++Comment[zh_TW]=追蹤網路介面的狀態,並提供使用網路的應用程式的通知。
++Type=Service
++ServiceTypes=KDEDModule
++X-KDE-ModuleType=Library
++X-KDE-Library=networkstatus
++X-KDE-FactoryName=networkstatus
++X-KDE-Kded-autoload=true
++X-KDE-Kded-load-on-demand=true
++
+Index: networkstatus/networkstatus.h
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatus.h
+@@ -0,0 +1,66 @@
++/* This file is part of kdepim
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDED_NETWORKSTATUS_H
++#define KDED_NETWORKSTATUS_H
++
++#include <kdedmodule.h>
++
++#include "networkstatuscommon.h"
++#include "network.h"
++
++class NetworkStatusModule : virtual public KDEDModule
++{
++Q_OBJECT
++K_DCOP
++public:
++ NetworkStatusModule( const QCString& obj );
++ ~NetworkStatusModule();
++k_dcop:
++ // Client interface
++ QStringList networks();
++ int status();
++ // Service interface
++ void setNetworkStatus( const QString & networkName, int status );
++ void registerNetwork( NetworkStatus::Properties properties );
++ void unregisterNetwork( const QString & networkName );
++k_dcop_signals:
++ /**
++ * A status change occurred affecting the overall connectivity
++ * @param status The new status
++ */
++ void statusChange( int status );
++protected slots:
++ //void registeredToDCOP( const QCString& appId );
++ void unregisteredFromDCOP( const QCString& appId );
++
++protected:
++ // recalculate cached status
++ void updateStatus();
++
++private:
++ class Private;
++ Private *d;
++};
++
++#endif
++// vim: sw=4 ts=4
+Index: networkstatus/networkstatusiface.h
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatusiface.h
+@@ -0,0 +1,50 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDED_NETWORKSTATUSIFACE_H
++#define KDED_NETWORKSTATUSIFACE_H
++
++#include <dcopobject.h>
++#include <qstringlist.h>
++
++#include "networkstatuscommon.h"
++
++class NetworkStatusIface : virtual public DCOPObject
++{
++K_DCOP
++k_dcop:
++ // Client interface
++ virtual QStringList networks() = 0;
++ virtual int status() = 0;
++ // Service interface
++ virtual void setNetworkStatus( const QString & networkName, int status ) = 0;
++ virtual void registerNetwork( NetworkStatus::Properties properties ) = 0;
++ virtual void unregisterNetwork( const QString & networkName ) = 0 ;
++k_dcop_signals:
++ /**
++ * A status change occurred affecting the overall connectivity
++ * @param status The new status
++ */
++ virtual void statusChange( int status ) = 0;
++};
++#endif
++// vim: sw=4 ts=4
+Index: networkstatus/networkstatusindicator.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatusindicator.cpp
+@@ -0,0 +1,64 @@
++/* This file is part of the KDE project
++ Copyright (C) 2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qlabel.h>
++#include <qtooltip.h>
++#include <kiconloader.h>
++#include <klocale.h>
++
++#include "connectionmanager.h"
++
++#include "networkstatusindicator.h"
++
++StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator(
++ QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/
++{
++ setMargin( 2 );
++ setSpacing( 1 );
++ QLabel * label = new QLabel( this, "offlinemodelabel" );
++ label->setPixmap( SmallIcon("connect_no") );
++ QToolTip::add( label, i18n( "The desktop is offline" ) );
++
++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ),
++ SLOT( networkStatusChanged( NetworkStatus::Status) ) );
++
++}
++
++void StatusBarNetworkStatusIndicator::init()
++{
++ networkStatusChanged( ConnectionManager::self()->status());
++}
++
++StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator()
++{
++}
++
++void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status )
++{
++ if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) {
++ hide();
++ } else {
++ show();
++ }
++}
++
++#include "networkstatusindicator.moc"
+Index: networkstatus/networkstatusindicator.h
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatusindicator.h
+@@ -0,0 +1,42 @@
++/* This file is part of the KDE project
++ Copyright (C) 2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDE_NETWORKSTATUS_INDICATOR_H
++#define KDE_NETWORKSTATUS_INDICATOR_H
++
++#include <qhbox.h>
++#include <kdemacros.h>
++#include <networkstatuscommon.h>
++
++class StatusBarNetworkStatusIndicator : public QHBox
++{
++Q_OBJECT
++public:
++ StatusBarNetworkStatusIndicator( QWidget * parent, const char * name );
++ virtual ~StatusBarNetworkStatusIndicator();
++ void init();
++protected slots:
++ void networkStatusChanged( NetworkStatus::Status status );
++};
++
++#endif
++
+Index: networkstatus/networkstatus.kdevelop
+===================================================================
+--- /dev/null
++++ networkstatus/networkstatus.kdevelop
+@@ -0,0 +1,108 @@
++<?xml version = '1.0'?>
++<kdevelop>
++ <general>
++ <author>Will Stephenson</author>
++ <email>wstephenson@suse.de</email>
++ <version>$VERSION$</version>
++ <projectmanagement>KDevKDEAutoProject</projectmanagement>
++ <primarylanguage>C++</primarylanguage>
++ <keywords>
++ <keyword>Qt</keyword>
++ <keyword>KDE</keyword>
++ </keywords>
++ </general>
++ <kdevfileview>
++ <groups>
++ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
++ <group pattern="*.ui" name="User Interface" />
++ <group pattern="*.png" name="Icons" />
++ <group pattern="*.po;*.ts" name="Translations" />
++ <group pattern="*" name="Others" />
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ <hidenonlocation>false</hidenonlocation>
++ </groups>
++ <tree>
++ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ </tree>
++ </kdevfileview>
++ <kdevdoctreeview>
++ <ignoretocs>
++ <toc>ada</toc>
++ <toc>ada_bugs_gcc</toc>
++ <toc>bash</toc>
++ <toc>bash_bugs</toc>
++ <toc>clanlib</toc>
++ <toc>fortran_bugs_gcc</toc>
++ <toc>gnome1</toc>
++ <toc>gnustep</toc>
++ <toc>gtk</toc>
++ <toc>gtk_bugs</toc>
++ <toc>haskell</toc>
++ <toc>haskell_bugs_ghc</toc>
++ <toc>java_bugs_gcc</toc>
++ <toc>java_bugs_sun</toc>
++ <toc>opengl</toc>
++ <toc>pascal_bugs_fp</toc>
++ <toc>php</toc>
++ <toc>php_bugs</toc>
++ <toc>perl</toc>
++ <toc>perl_bugs</toc>
++ <toc>python</toc>
++ <toc>python_bugs</toc>
++ <toc>ruby</toc>
++ <toc>ruby_bugs</toc>
++ <toc>sdl</toc>
++ <toc>stl</toc>
++ <toc>sw</toc>
++ <toc>w3c-dom-level2-html</toc>
++ <toc>w3c-svg</toc>
++ <toc>w3c-uaag10</toc>
++ <toc>wxwidgets_bugs</toc>
++ </ignoretocs>
++ <ignoreqt_xml>
++ <toc>qmake User Guide</toc>
++ </ignoreqt_xml>
++ </kdevdoctreeview>
++ <kdevdebugger>
++ <general>
++ <dbgshell>libtool</dbgshell>
++ </general>
++ </kdevdebugger>
++ <kdevfilecreate>
++ <useglobaltypes>
++ <type ext="ui" />
++ <type ext="cpp" />
++ <type ext="h" />
++ </useglobaltypes>
++ </kdevfilecreate>
++ <kdevautoproject>
++ <make>
++ <envvars>
++ <envvar value="1" name="WANT_AUTOCONF_2_5" />
++ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
++ </envvars>
++ </make>
++ <run>
++ <directoryradio>executable</directoryradio>
++ </run>
++ <general>
++ <activetarget>kded_networkstatus.la</activetarget>
++ </general>
++ </kdevautoproject>
++ <kdevcppsupport>
++ <references/>
++ <codecompletion>
++ <includeGlobalFunctions>true</includeGlobalFunctions>
++ <includeTypes>true</includeTypes>
++ <includeEnums>true</includeEnums>
++ <includeTypedefs>false</includeTypedefs>
++ <automaticCodeCompletion>true</automaticCodeCompletion>
++ <automaticArgumentsHint>true</automaticArgumentsHint>
++ <automaticHeaderCompletion>true</automaticHeaderCompletion>
++ <codeCompletionDelay>250</codeCompletionDelay>
++ <argumentsHintDelay>400</argumentsHintDelay>
++ <headerCompletionDelay>250</headerCompletionDelay>
++ </codecompletion>
++ </kdevcppsupport>
++</kdevelop>
+Index: networkstatus/README.statetransition
+===================================================================
+--- /dev/null
++++ networkstatus/README.statetransition
+@@ -0,0 +1,29 @@
++This table defines the actions to be taken on state transition.
++
++TODO: potentially add extra states OnlineReading and OnlineWriting
++
++ NEW
++ |Offline | Online |
++---+---+----------------+---------------+
++ | | |N|set online |
++ | | |L|reload |
++ | O | |C|resources |
++ | F | +---------------+
++ | F | |L|set online |
++O | | |C|reload res. |
++L | | | |write res. |
++D +---+----------------+---------------+
++ | |N|set offline | |
++ | |C| | |
++ | | | | |
++ | O +---------------+| |
++ | N |U|set offline | |
++ | |W|write locally | |
++ | |C|(subject to | |
++ | | | save policy)| |
++---+---+----------------+---------------+
++LC = Local changes exist
++NLC = No local changes exist
++UWC = Unsaved changes exist
++NC = no changes exist
++
+Index: networkstatus/.svn/dir-prop-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/dir-prop-base
+@@ -0,0 +1,11 @@
++K 10
++svn:ignore
++V 83
++Makefile
++Makefile.in
++Makefile.calls.in
++Makefile.rules.in
++*_skel.cpp
++*.kidl
++Doxyfile
++END
+Index: networkstatus/.svn/entries
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/entries
+@@ -0,0 +1,342 @@
++8
++
++dir
++712059
++svn+ssh://mueller@svn.kde.org/home/kde/branches/work/~wstephens/kdelibs/networkstatus
++svn+ssh://mueller@svn.kde.org/home/kde
++
++
++
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++svn:special svn:externals svn:needs-lock
++
++
++
++
++
++
++
++
++
++
++
++283d02a7-25f6-0310-bc7c-ecb5cbfe19da
++
++network.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++034300313451d5b6a95bff1022861227
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++networkstatusindicator.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++bbc7c6ea3b8da983d477d53556e39dd0
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++connectionmanager.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++7992e623b84fd99f9ff17c613a7269a3
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++testservice.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++527dc95a7ae39d565bd29d5fe59de31a
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++testclient2.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++c426585cf5d9e3f4b06adcaff0a3ef32
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++networkstatus.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++8ca1d871b31d5840e2e3d24da4693f1d
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++testclientview.ui
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++8f63eb3db978c53143417ad33d45076b
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++testservice.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++2b5693b2e174ebf96e460a52cfcf9739
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++testclient2.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++3b9f645e56a92014b7a6547c5bc88527
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++README.statetransition
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++0091b6bdce4abe1e1260bf2a4cce984f
++2005-02-11T15:15:30.000000Z
++388364
++wstephens
++has-props
++
++networkstatuscommon.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++1516e99224ce850fb6d134346fd9d074
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++connectionmanager_p.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++07e9643c6cdb39d28abc9c8992bcab23
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++networkstatuscommon.h
++file
++712062
++
++
++
++2007-09-13T13:10:21.000000Z
++a4f22eecd7d0a0fdcc78c9c31d5f14fd
++2007-09-13T13:12:05.866586Z
++712062
++mueller
++has-props
++
++testclient.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++d932143bab5c7985bc48e64e2bf0c227
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++connectionmanager_p.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++34ed7e34d50ae4b36342a6cc250ad386
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++testclient.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++67d3671e5fbeb51a333550f52ec34294
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++networkstatus.kdevelop
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++64e6cd906f82dad6a3c70a8dd7e69c3c
++2005-01-24T08:48:57.000000Z
++381869
++wstephens
++has-props
++
++networkstatus.desktop
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++1bc32c39d8c6ed9c63e6fdc1b3d34aba
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++testserviceview.ui
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++f8883c2425f16054c8cfd99a6c288000
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++Makefile.am
++file
++712061
++
++
++
++2007-09-13T13:10:11.000000Z
++70d1b224f8edc970fbdf2f4af63282f0
++2007-09-13T13:11:26.289844Z
++712061
++mueller
++has-props
++
++network.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++1f481f54f0161b8a65d00753d6397904
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++networkstatusindicator.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++243176eca79394c0e2a763b1e56a0690
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++networkstatusiface.h
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++285a14008068eb0cd26e3af2bb8fbb92
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++
++connectionmanager.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++922d360b2e43b6b35f56c0d97ab1afa9
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
++networkstatus.cpp
++file
++
++
++
++
++2007-09-13T13:09:10.000000Z
++433313b5f03259de305b6d722c0251e5
++2007-08-06T09:06:39.201606Z
++696919
++wstephens
++has-props
++
+Index: networkstatus/.svn/format
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/format
+@@ -0,0 +1 @@
++8
+Index: networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 13
++text/x-c++src
++END
+Index: networkstatus/.svn/prop-base/connectionmanager.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/connectionmanager.h.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 11
++text/x-chdr
++END
+Index: networkstatus/.svn/prop-base/Makefile.am.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/Makefile.am.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 9
++text/x-am
++END
+Index: networkstatus/.svn/prop-base/network.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/network.cpp.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 13
++text/x-c++src
++END
+Index: networkstatus/.svn/prop-base/network.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/network.h.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 11
++text/x-chdr
++END
+Index: networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 13
++text/x-c++src
++END
+Index: networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 11
++text/x-chdr
++END
+Index: networkstatus/.svn/prop-base/networkstatus.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/networkstatus.cpp.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 13
++text/x-c++src
++END
+Index: networkstatus/.svn/prop-base/networkstatus.desktop.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/networkstatus.desktop.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 14
++text/x-desktop
++END
+Index: networkstatus/.svn/prop-base/networkstatus.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/networkstatus.h.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 11
++text/x-chdr
++END
+Index: networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base
+@@ -0,0 +1,5 @@
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++END
+Index: networkstatus/.svn/prop-base/README.statetransition.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/README.statetransition.svn-base
+@@ -0,0 +1,5 @@
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++END
+Index: networkstatus/.svn/prop-base/testservice.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/testservice.cpp.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 13
++text/x-c++src
++END
+Index: networkstatus/.svn/prop-base/testservice.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/prop-base/testservice.h.svn-base
+@@ -0,0 +1,13 @@
++K 13
++svn:eol-style
++V 6
++native
++K 12
++svn:keywords
++V 23
++Author Date Id Revision
++K 13
++svn:mime-type
++V 11
++text/x-chdr
++END
+Index: networkstatus/.svn/text-base/connectionmanager.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/connectionmanager.cpp.svn-base
+@@ -0,0 +1,171 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <kapplication.h>
++#include <kdebug.h>
++#include <kstaticdeleter.h>
++
++#include "connectionmanager.h"
++#include "connectionmanager_p.h"
++
++// Connection manager itself
++ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) )
++{
++ d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" );
++
++ connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false );
++
++ initialise();
++}
++
++ConnectionManager::~ConnectionManager()
++{
++ delete d;
++}
++
++ConnectionManager *ConnectionManager::s_self = 0L;
++
++ConnectionManager *ConnectionManager::self()
++{
++ static KStaticDeleter<ConnectionManager> deleter;
++ if(!s_self)
++ deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) );
++ return s_self;
++}
++
++void ConnectionManager::initialise()
++{
++ // determine initial state and set the state object accordingly.
++ d->status = ( NetworkStatus::Status )d->service->status();
++}
++
++NetworkStatus::Status ConnectionManager::status()
++{
++ return d->status;
++}
++
++void ConnectionManager::slotStatusChanged( int status )
++{
++ d->status = ( NetworkStatus::Status )status;
++ switch ( status ) {
++ case NetworkStatus::NoNetworks:
++ break;
++ case NetworkStatus::Unreachable:
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ case NetworkStatus::OfflineFailed:
++ case NetworkStatus::ShuttingDown:
++ case NetworkStatus::Offline:
++ case NetworkStatus::Establishing:
++ if ( d->disconnectPolicy == Managed ) {
++ emit d->disconnected();
++ } else if ( d->disconnectPolicy == OnNextChange ) {
++ setDisconnectPolicy( Manual );
++ emit d->disconnected();
++ }
++ break;
++ case NetworkStatus::Online:
++ if ( d->disconnectPolicy == Managed ) {
++ emit d->connected();
++ } else if ( d->disconnectPolicy == OnNextChange ) {
++ setConnectPolicy( Manual );
++ emit d->connected();
++ }
++ break;
++ default:
++ kdDebug() << k_funcinfo << "Unrecognised status code!" << endl;
++ }
++ emit statusChanged( d->status );
++}
++
++ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const
++{
++ return d->connectPolicy;
++}
++
++void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy )
++{
++ d->connectPolicy = policy;
++}
++
++ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const
++{
++ return d->disconnectPolicy;
++}
++
++void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy )
++{
++ d->disconnectPolicy = policy;
++}
++
++void ConnectionManager::setManualConnectionPolicies()
++{
++ d->connectPolicy = ConnectionManager::Manual;
++ d->disconnectPolicy = ConnectionManager::Manual;
++}
++
++void ConnectionManager::setManagedConnectionPolicies()
++{
++ d->connectPolicy = ConnectionManager::Managed;
++ d->disconnectPolicy = ConnectionManager::Managed;
++}
++
++void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member )
++{
++ d->connectReceiver = receiver;
++ d->connectSlot = member;
++ connect( d, SIGNAL( connected() ), receiver, member );
++}
++
++void ConnectionManager::forgetConnectSlot()
++{
++ disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot );
++ d->connectReceiver = 0;
++ d->connectSlot = 0;
++}
++
++bool ConnectionManager::isConnectSlotRegistered() const
++{
++ return ( d->connectSlot != 0 );
++}
++
++void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member )
++{
++ d->disconnectReceiver = receiver;
++ d->disconnectSlot = member;
++ connect( d, SIGNAL( disconnected() ), receiver, member );
++}
++
++void ConnectionManager::forgetDisconnectSlot()
++{
++ disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot );
++ d->disconnectReceiver = 0;
++ d->disconnectSlot = 0;
++}
++
++bool ConnectionManager::isDisconnectSlotRegistered() const
++{
++ return ( d->disconnectSlot != 0 );
++}
++
++#include "connectionmanager.moc"
++
+Index: networkstatus/.svn/text-base/connectionmanager.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/connectionmanager.h.svn-base
+@@ -0,0 +1,167 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDE_CONNECTION_MANAGER_H
++#define KDE_CONNECTION_MANAGER_H
++
++#include <dcopobject.h>
++#include <kdemacros.h>
++
++#include <networkstatuscommon.h>
++
++class ConnectionManagerPrivate;
++
++class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject
++{
++Q_OBJECT
++K_DCOP
++k_dcop:
++ void slotStatusChanged( int status );
++public:
++ /**
++ * This defines application policy in response to networking connect/disconnect events
++ * Manual - the app only disconnects when the user does so
++ * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter
++ * Manual
++ * Managed - the app should disconnect when the ConnectionManager thinks the system is
++ * offline
++ */
++ enum ConnectionPolicy { Manual, OnNextChange, Managed };
++ /**
++ * Set a policy to manage the application's connect behaviour
++ */
++ void setConnectPolicy( ConnectionPolicy );
++ /**
++ * Retrieve a policy managing the application's connect behaviour
++ */
++ ConnectionPolicy connectPolicy() const;
++
++ /**
++ * Set a policy to manage the application's disconnect behaviour
++ */
++ void setDisconnectPolicy( ConnectionPolicy );
++
++ /**
++ * Retrieve a policy managing the application's disconnect behaviour
++ */
++ ConnectionPolicy disconnectPolicy() const;
++
++ /*
++ * We'll get logic of the form
++ * onStatusChange() {
++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ||
++ * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed )
++ * {
++ * // do connect
++ *
++ * // reset the policy
++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange )
++ * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager,
++ * ConnectionManager::Manual );
++ * }
++ *
++ * Do we just use the CM for policy storage, or do we try to factor the logic to implement the
++ * policy into the CM too?
++ *
++ * could signal doConnect(), then reset the policy
++ * or could register a connect slot
++ * registerConnectMethod( QObject * receiver, const char * member );
++ * unregisterConnectMethod();
++ * etc.
++ *
++ * The problem with automatically controlled behaviour, where policy may change as a result of a
++ * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to
++ * be updated in any case.
++ * CM need
++ */
++ /**
++ * Lazy-method to set Manual on both policies
++ */
++ void setManualConnectionPolicies();
++ /**
++ * Lazy-method to set Managed on both policies
++ */
++ void setManagedConnectionPolicies();
++
++ /**
++ * Record a slot to call on a given receiving QObject when
++ * 1) the network connection is online,
++ * 2) the policy mandates that the app connect
++ *
++ * Only one slot may be registered at any one time. If a second slot is
++ * registered, the first slot is forgotten
++ * @param receiver the QObject where the slot is located
++ * @param member the slot to call. Set up member using the SLOT() macro.
++ */
++ void registerConnectSlot( QObject * receiver, const char * member );
++
++ /**
++ * Forget any connect slot previously registered
++ */
++ void forgetConnectSlot();
++
++ /**
++ * Has any slot been registered to be called on connect?
++ */
++ bool isConnectSlotRegistered() const;
++
++ /**
++ * Record a slot to call on a given receiving QObject when
++ * 1) the network connection goes offline (in any way ),
++ * 2) the policy mandates that the app disconnect
++ *
++ * Only one slot may be registered at any one time. If a second slot is
++ * registered, the first slot is forgotten
++ * @param receiver the QObject where the slot is located
++ * @param member the slot to call. Set up member using the SLOT() macro.
++ */
++ void registerDisconnectSlot( QObject * receiver, const char * member );
++
++ /**
++ * Forget any disconnect slot previously registered
++ */
++ void forgetDisconnectSlot();
++
++ /**
++ * Has any slot been registered to be called on disconnect?
++ */
++ bool isDisconnectSlotRegistered() const;
++
++ /// existing API
++
++ static ConnectionManager* self();
++ virtual ~ConnectionManager();
++ NetworkStatus::Status status();
++signals:
++ // signal that the network for a hostname is up/down
++ void statusChanged( NetworkStatus::Status status );
++private:
++ // sets up internal state
++ void initialise();
++ // reread the desktop status from the daemon and update internal state
++ ConnectionManager( QObject *parent, const char * name );
++ ConnectionManagerPrivate * d;
++ static ConnectionManager * s_self;
++};
++
++#endif
++
+Index: networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base
+@@ -0,0 +1,13 @@
++#include "connectionmanager_p.h"
++
++ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ),
++ disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ),
++ disconnectReceiver( 0 ), disconnectSlot( 0 )
++{
++}
++
++ConnectionManagerPrivate::~ConnectionManagerPrivate()
++{
++}
++
++#include "connectionmanager_p.moc"
+Index: networkstatus/.svn/text-base/connectionmanager_p.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/connectionmanager_p.h.svn-base
+@@ -0,0 +1,55 @@
++/* This file is part of the KDE project
++ Copyright (C) 2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef CONNECTIONMANAGERPRIVATE_H
++#define CONNECTIONMANAGERPRIVATE_H
++
++#include <qobject.h>
++
++#include "connectionmanager.h"
++#include "networkstatuscommon.h"
++#include "networkstatusiface_stub.h"
++
++
++// ConnectionManager's private parts
++class ConnectionManagerPrivate : public QObject
++{
++Q_OBJECT
++ friend class ConnectionManager;
++public:
++ ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0);
++ ~ConnectionManagerPrivate();
++ // this holds the currently active state
++ NetworkStatus::Status status;
++ NetworkStatusIface_stub * service;
++ ConnectionManager::ConnectionPolicy connectPolicy;
++ ConnectionManager::ConnectionPolicy disconnectPolicy;
++ QObject * connectReceiver;
++ const char * connectSlot;
++ QObject * disconnectReceiver;
++ const char * disconnectSlot;
++signals:
++ void connected();
++ void disconnected();
++};
++
++#endif
+Index: networkstatus/.svn/text-base/Makefile.am.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/Makefile.am.svn-base
+@@ -0,0 +1,45 @@
++#SUBDIRS = networkstatustray
++
++METASOURCES = AUTO
++
++INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes)
++
++kde_module_LTLIBRARIES = kded_networkstatus.la
++
++kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \
++ network.cpp
++kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la
++kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version
++
++servicesdir = $(kde_servicesdir)/kded
++
++services_DATA = networkstatus.desktop
++
++lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la
++
++libnetworkstatus_la_LIBADD = $(LIB_KDECORE)
++libnetworkstatus_la_LDFLAGS = $(all_libraries)
++libnetworkstatus_la_SOURCES = networkstatuscommon.cpp
++
++libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la
++libconnectionmanager_la_LDFLAGS = $(all_libraries)
++libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub
++
++noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient
++
++networkstatustestservice_LDFLAGS = $(all_libraries)
++networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la
++networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub
++
++networkstatustestclient_LDFLAGS = $(all_libraries)
++networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la
++networkstatustestclient_SOURCES = testclient.cpp testclientview.ui
++
++managedconnectiontestclient_LDFLAGS = $(all_libraries)
++managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la
++managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui
++
++noinst_HEADERS = network.h testservice.h testclient.h
++
++include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \
++ networkstatusiface.h
+Index: networkstatus/.svn/text-base/network.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/network.cpp.svn-base
+@@ -0,0 +1,62 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <kdebug.h>
++
++#include "network.h"
++
++Network::Network( NetworkStatus::Properties properties )
++ : m_name( properties.name ), m_status( properties.status ), m_service( properties.service )
++{
++}
++
++void Network::setStatus( NetworkStatus::Status status )
++{
++ m_status = status;
++}
++
++NetworkStatus::Status Network::status()
++{
++ return m_status;
++}
++
++void Network::setName( const QString& name )
++{
++ m_name = name;
++}
++
++QString Network::name()
++{
++ return m_name;
++}
++
++QString Network::service()
++{
++ return m_service;
++}
++
++void Network::setService( const QString& service )
++{
++ m_service = service;
++}
++
++// vim: sw=4 ts=4
+Index: networkstatus/.svn/text-base/network.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/network.h.svn-base
+@@ -0,0 +1,60 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef NETWORKSTATUS_NETWORK_H
++#define NETWORKSTATUS_NETWORK_H
++
++#include "networkstatuscommon.h"
++
++class Network
++{
++public:
++ Network( const QString name );
++ Network( NetworkStatus::Properties properties );
++ /**
++ * Update the status of this network
++ */
++ void setStatus( NetworkStatus::Status status );
++ /**
++ * The connection status of this network
++ */
++ NetworkStatus::Status status();
++ /**
++ * The name of this network
++ */
++ QString name();
++ void setName( const QString& name );
++ /**
++ * Returns the service owning this network
++ */
++ QString service();
++ void setService( const QString& service );
++
++private:
++ Network( const Network & );
++ QString m_name;
++ NetworkStatus::Status m_status;
++ QString m_service;
++};
++
++#endif
++// vim: sw=4 ts=4
+Index: networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base
+@@ -0,0 +1,76 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include "networkstatuscommon.h"
++
++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p )
++{
++ s << p.name;
++ s << (int)p.status;
++ s << p.service;
++ return s;
++}
++
++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p )
++{
++ int status;
++ s >> p.name;
++ s >> status;
++ p.status = (NetworkStatus::Status)status;
++ s >> p.service;
++ return s;
++}
++
++namespace NetworkStatus
++{
++ QString toString( NetworkStatus::Status st )
++ {
++ QString str;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ str = "NoNetworks";
++ break;
++ case NetworkStatus::Unreachable:
++ str = "Unreachable";
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ str = "OfflineDisconnected";
++ break;
++ case NetworkStatus::OfflineFailed:
++ str = "OfflineFailed";
++ break;
++ case NetworkStatus::ShuttingDown:
++ str = "ShuttingDown";
++ break;
++ case NetworkStatus::Offline:
++ str = "Offline";
++ break;
++ case NetworkStatus::Establishing:
++ str = "Establishing";
++ break;
++ case NetworkStatus::Online:
++ str = "Online";
++ break;
++ }
++ return str;
++ }
++} // namespace NetworkStatus
+Index: networkstatus/.svn/text-base/networkstatuscommon.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatuscommon.h.svn-base
+@@ -0,0 +1,52 @@
++/* This file is part of kdepim
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef NETWORKSTATUS_COMMON_H
++#define NETWORKSTATUS_COMMON_H
++
++#include <qstringlist.h>
++
++namespace NetworkStatus
++{
++ enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online };
++ enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable };
++ enum UnusedDemandPolicy { All, User, None, Permanent };
++
++ // BINARY COMPATIBILITY ALERT BEGIN !!!!
++ struct Properties
++ {
++ QString name;
++ Status status;
++ UnusedDemandPolicy unused1;
++ QCString service;
++ bool unused3;
++ QStringList unused4;
++ };
++ // BINARY COMPATIBILITY ALERT END !!!!
++
++ QString toString( Status st );
++}
++
++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p );
++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p );
++
++#endif
+Index: networkstatus/.svn/text-base/networkstatus.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatus.cpp.svn-base
+@@ -0,0 +1,162 @@
++/* This file is part of kdepim
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include "networkstatus.h"
++
++#include <qmap.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kdebug.h>
++
++#include "network.h"
++#include <kdepimmacros.h>
++
++extern "C" {
++ KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj )
++ {
++ return new NetworkStatusModule( obj );
++ }
++}
++
++// INTERNALLY USED STRUCTS AND TYPEDEFS
++
++typedef QMap< QString, Network * > NetworkMap;
++
++class NetworkStatusModule::Private
++{
++public:
++ NetworkMap networks;
++ NetworkStatus::Status status;
++};
++
++// CTORS/DTORS
++
++NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private )
++{
++ d->status = NetworkStatus::NoNetworks;
++ connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) );
++ // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) );
++}
++
++NetworkStatusModule::~NetworkStatusModule()
++{
++ NetworkMap::ConstIterator it;
++ const NetworkMap::ConstIterator end = d->networks.end();
++
++ for ( it = d->networks.begin(); it != end; ++it ) {
++ delete ( *it );
++ }
++
++ delete d;
++}
++
++// CLIENT INTERFACE
++
++QStringList NetworkStatusModule::networks()
++{
++ kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl;
++ return d->networks.keys();
++}
++
++int NetworkStatusModule::status()
++{
++ kdDebug() << k_funcinfo << " status: " << (int)d->status << endl;
++ return (int)d->status;
++}
++
++//protected:
++
++void NetworkStatusModule::updateStatus()
++{
++ NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks;
++ const NetworkStatus::Status oldStatus = d->status;
++
++ NetworkMap::ConstIterator it;
++ const NetworkMap::ConstIterator end = d->networks.end();
++ for ( it = d->networks.begin(); it != end; ++it ) {
++ if ( ( *it )->status() > bestStatus )
++ bestStatus = ( *it )->status();
++ }
++ d->status = bestStatus;
++
++ if ( oldStatus != d->status ) {
++ statusChange( (int)d->status );
++ }
++}
++
++void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId )
++{
++ // unregister and delete any networks owned by a service that has just unregistered
++ NetworkMap::Iterator it;
++ const NetworkMap::Iterator end = d->networks.end();
++ for ( it = d->networks.begin(); it != end; ++it )
++ {
++ if ( ( *it )->service() == QString( appId ) )
++ {
++ NetworkMap::Iterator toRemove = it;
++ Network * removedNet = *toRemove;
++ d->networks.remove( toRemove );
++ updateStatus();
++ delete removedNet;
++ }
++ }
++}
++
++// SERVICE INTERFACE //
++void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st )
++{
++ kdDebug() << k_funcinfo << networkName << ", " << st << endl;
++ NetworkStatus::Status changedStatus = (NetworkStatus::Status)st;
++ Network * net = 0;
++ NetworkMap::Iterator it = d->networks.find( networkName );
++ if ( it != d->networks.end() ) {
++ net = (*it);
++ net->setStatus( changedStatus );
++ updateStatus();
++ }
++ else
++ kdDebug() << " No network named '" << networkName << "' found." << endl;
++}
++
++void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties )
++{
++ kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl;
++
++ d->networks.insert( properties.name, new Network( properties ) );
++ updateStatus();
++}
++
++void NetworkStatusModule::unregisterNetwork( const QString & networkName )
++{
++ kdDebug() << k_funcinfo << networkName << endl;
++
++ NetworkMap::Iterator it = d->networks.find( networkName );
++ if ( it != d->networks.end() ) {
++ delete *it;
++ d->networks.remove( it );
++ }
++ updateStatus();
++}
++
++#include "networkstatus.moc"
++// vim: set noet sw=4 ts=4:
+Index: networkstatus/.svn/text-base/networkstatus.desktop.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatus.desktop.svn-base
+@@ -0,0 +1,98 @@
++[Desktop Entry]
++Encoding=UTF-8
++Name=Network Status Daemon
++Name[af]=Netwerk status bediener
++Name[ar]=مراقب القرص و التنفيذ لحالة الشبكة
++Name[bg]=Демон за състояние на мрежата
++Name[ca]=Dimoni de l'estat de la xarxa
++Name[cs]=Démon stavu sítě
++Name[da]=Netværkstatusdæmon
++Name[de]=Überwachung des Netzwerkstatus
++Name[el]=Δαίμονας κατάστασης δικτύου
++Name[es]=Daemon de estado de la red
++Name[et]=Võrguoleku deemon
++Name[eu]=Sarearen egoera deabrua
++Name[fa]=شبح وضعیت شبکه
++Name[fi]=Verkkotilan tarkkailija
++Name[fr]=Suivi de l'état du réseau
++Name[fy]=Netwurktastândaemon
++Name[gl]=Daemon do Estado da Rede
++Name[hu]=Hálózati állapotjelző szolgáltatás
++Name[is]=Netstöðupúki
++Name[it]=Demone dello stato della rete
++Name[ja]=ネットワークステータスデーモン
++Name[kk]=Желі күйінің қызметі
++Name[km]=ដេមិន​ស្ថានភាព​បណ្ដាញ
++Name[lt]=Tinklo statuso tarnyba
++Name[mk]=Даемон за мрежен статус
++Name[ms]=Daemon Berstatus Rangkaian
++Name[nb]=Statusnisse for nettverket
++Name[nds]=Nettwarkstatus-Dämoon
++Name[ne]=सञ्जाल स्थिति डेइमन
++Name[nl]=Netwerkstatusdaemon
++Name[nn]=Statusnisse for nettverket
++Name[pl]=Usługa stanu sieci
++Name[pt]=Servidor de Estado de Rede
++Name[pt_BR]=Daemon de Status da Rede
++Name[ru]=Служба состояния сети
++Name[sk]=Daemon stavu siete
++Name[sl]=Demon za omrežno stanje
++Name[sr]=Демон за статус мреже
++Name[sr@Latn]=Demon za status mreže
++Name[sv]=Nätverksstatusdemon
++Name[ta]=வலைப்பின்னல் நிலை டெமான்
++Name[tr]=Ağ Durum İzleyici
++Name[uk]=Демон стану мережі
++Name[zh_CN]=网络状态守护程序
++Name[zh_TW]=網路狀態守護程式
++Comment=Tracks status of network interfaces and provides notification to applications using the network.
++Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik.
++Comment[bg]=Следене на състоянието на мрежата и предаване на информацията на програмите, които имат нужда
++Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa.
++Comment[cs]=Zjiš'tuje stav síťových rozhraní a upozorňuje v případě přístupu aplikací k síti.
++Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket.
++Comment[de]=Überprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen
++Comment[el]=Παρακολουθεί την κατάσταση του δικτύου και παρέχει ειδοποιήσεις σε εφαρμογές που χρησιμοποιούν το δίκτυο.
++Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red.
++Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada.
++Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die.
++Comment[fa]=وضعیت واسطهای شبکه را شیار داده و با استفاده از شبکه، برای کاربردها اخطار فراهم می‌کند.
++Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia.
++Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau
++Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte.
++Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede.
++Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetőséget biztosít hálózati alkalmazások számára.
++Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið.
++Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete.
++Comment[ja]=ネットワークインターフェースの状態を追跡し、ネットワークを用いるアプリケーションに通知します
++Comment[kk]=Желі интерфейстерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі.
++Comment[km]=តាមដាន​ស្ថានភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។
++Comment[lt]=Seka tinklo sąsajų būseną ir informuoja apie jas programas, naudojančias tinklą
++Comment[mk]=Го следи статусот на мрежните интерфејси и дава известувања на апликациите што ја користат мрежата.
++Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut.
++Comment[nb]=Overvåker status for nettverksgrensesnitt og varsler programmer som bruker nettverket.
++Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt.
++Comment[ne]=सञ्जाल इन्टरफेसको स्थिति ट्र्याक गर्दछ र सञ्जाल प्रयोग गरेर अनुप्रयोगमा जानकारी उपलब्ध गराउछ ।
++Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte.
++Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket.
++Comment[pl]=Śledzi stan interfejsów sieciowych i powiadamia programy używające sieci.
++Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede.
++Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede.
++Comment[ru]=Служба отслеживания состояния сетевых интерфейсов и обращения приложений к сети.
++Comment[sk]=Sleduje stav sieťových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieť.
++Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoča obvestila programom, ki uporabljajo omrežje
++Comment[sr]=Прати статус мрежних интерфејса и пружа обавештења програмима који користе мрежу.
++Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveštenja programima koji koriste mrežu.
++Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahåller underrättelser till program som använder nätverket.
++Comment[ta]=வலைப்பின்னலைப் பயன்படுத்தி வலைப்பின்னல் இடைமுகங்களின் நிலையை கண்காணிக்கிறது மற்றும் பயன்பாடுகளுக்கு அறிவிப்பை வழங்குகிறது.
++Comment[uk]=Слідкує за станом інтерфейсів мережі і сповіщає програми, які користуються мережею.
++Comment[zh_CN]=跟踪网卡的状态并为应用程序提供使用网络的通知。
++Comment[zh_TW]=追蹤網路介面的狀態,並提供使用網路的應用程式的通知。
++Type=Service
++ServiceTypes=KDEDModule
++X-KDE-ModuleType=Library
++X-KDE-Library=networkstatus
++X-KDE-FactoryName=networkstatus
++X-KDE-Kded-autoload=true
++X-KDE-Kded-load-on-demand=true
++
+Index: networkstatus/.svn/text-base/networkstatus.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatus.h.svn-base
+@@ -0,0 +1,66 @@
++/* This file is part of kdepim
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDED_NETWORKSTATUS_H
++#define KDED_NETWORKSTATUS_H
++
++#include <kdedmodule.h>
++
++#include "networkstatuscommon.h"
++#include "network.h"
++
++class NetworkStatusModule : virtual public KDEDModule
++{
++Q_OBJECT
++K_DCOP
++public:
++ NetworkStatusModule( const QCString& obj );
++ ~NetworkStatusModule();
++k_dcop:
++ // Client interface
++ QStringList networks();
++ int status();
++ // Service interface
++ void setNetworkStatus( const QString & networkName, int status );
++ void registerNetwork( NetworkStatus::Properties properties );
++ void unregisterNetwork( const QString & networkName );
++k_dcop_signals:
++ /**
++ * A status change occurred affecting the overall connectivity
++ * @param status The new status
++ */
++ void statusChange( int status );
++protected slots:
++ //void registeredToDCOP( const QCString& appId );
++ void unregisteredFromDCOP( const QCString& appId );
++
++protected:
++ // recalculate cached status
++ void updateStatus();
++
++private:
++ class Private;
++ Private *d;
++};
++
++#endif
++// vim: sw=4 ts=4
+Index: networkstatus/.svn/text-base/networkstatusiface.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatusiface.h.svn-base
+@@ -0,0 +1,50 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDED_NETWORKSTATUSIFACE_H
++#define KDED_NETWORKSTATUSIFACE_H
++
++#include <dcopobject.h>
++#include <qstringlist.h>
++
++#include "networkstatuscommon.h"
++
++class NetworkStatusIface : virtual public DCOPObject
++{
++K_DCOP
++k_dcop:
++ // Client interface
++ virtual QStringList networks() = 0;
++ virtual int status() = 0;
++ // Service interface
++ virtual void setNetworkStatus( const QString & networkName, int status ) = 0;
++ virtual void registerNetwork( NetworkStatus::Properties properties ) = 0;
++ virtual void unregisterNetwork( const QString & networkName ) = 0 ;
++k_dcop_signals:
++ /**
++ * A status change occurred affecting the overall connectivity
++ * @param status The new status
++ */
++ virtual void statusChange( int status ) = 0;
++};
++#endif
++// vim: sw=4 ts=4
+Index: networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base
+@@ -0,0 +1,64 @@
++/* This file is part of the KDE project
++ Copyright (C) 2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qlabel.h>
++#include <qtooltip.h>
++#include <kiconloader.h>
++#include <klocale.h>
++
++#include "connectionmanager.h"
++
++#include "networkstatusindicator.h"
++
++StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator(
++ QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/
++{
++ setMargin( 2 );
++ setSpacing( 1 );
++ QLabel * label = new QLabel( this, "offlinemodelabel" );
++ label->setPixmap( SmallIcon("connect_no") );
++ QToolTip::add( label, i18n( "The desktop is offline" ) );
++
++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ),
++ SLOT( networkStatusChanged( NetworkStatus::Status) ) );
++
++}
++
++void StatusBarNetworkStatusIndicator::init()
++{
++ networkStatusChanged( ConnectionManager::self()->status());
++}
++
++StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator()
++{
++}
++
++void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status )
++{
++ if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) {
++ hide();
++ } else {
++ show();
++ }
++}
++
++#include "networkstatusindicator.moc"
+Index: networkstatus/.svn/text-base/networkstatusindicator.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatusindicator.h.svn-base
+@@ -0,0 +1,42 @@
++/* This file is part of the KDE project
++ Copyright (C) 2007 Will Stephenson <wstephenson@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 version 2 as published by the Free Software Foundation.
++
++ 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. If not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this library
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KDE_NETWORKSTATUS_INDICATOR_H
++#define KDE_NETWORKSTATUS_INDICATOR_H
++
++#include <qhbox.h>
++#include <kdemacros.h>
++#include <networkstatuscommon.h>
++
++class StatusBarNetworkStatusIndicator : public QHBox
++{
++Q_OBJECT
++public:
++ StatusBarNetworkStatusIndicator( QWidget * parent, const char * name );
++ virtual ~StatusBarNetworkStatusIndicator();
++ void init();
++protected slots:
++ void networkStatusChanged( NetworkStatus::Status status );
++};
++
++#endif
++
+Index: networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base
+@@ -0,0 +1,108 @@
++<?xml version = '1.0'?>
++<kdevelop>
++ <general>
++ <author>Will Stephenson</author>
++ <email>wstephenson@suse.de</email>
++ <version>$VERSION$</version>
++ <projectmanagement>KDevKDEAutoProject</projectmanagement>
++ <primarylanguage>C++</primarylanguage>
++ <keywords>
++ <keyword>Qt</keyword>
++ <keyword>KDE</keyword>
++ </keywords>
++ </general>
++ <kdevfileview>
++ <groups>
++ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
++ <group pattern="*.ui" name="User Interface" />
++ <group pattern="*.png" name="Icons" />
++ <group pattern="*.po;*.ts" name="Translations" />
++ <group pattern="*" name="Others" />
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ <hidenonlocation>false</hidenonlocation>
++ </groups>
++ <tree>
++ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ </tree>
++ </kdevfileview>
++ <kdevdoctreeview>
++ <ignoretocs>
++ <toc>ada</toc>
++ <toc>ada_bugs_gcc</toc>
++ <toc>bash</toc>
++ <toc>bash_bugs</toc>
++ <toc>clanlib</toc>
++ <toc>fortran_bugs_gcc</toc>
++ <toc>gnome1</toc>
++ <toc>gnustep</toc>
++ <toc>gtk</toc>
++ <toc>gtk_bugs</toc>
++ <toc>haskell</toc>
++ <toc>haskell_bugs_ghc</toc>
++ <toc>java_bugs_gcc</toc>
++ <toc>java_bugs_sun</toc>
++ <toc>opengl</toc>
++ <toc>pascal_bugs_fp</toc>
++ <toc>php</toc>
++ <toc>php_bugs</toc>
++ <toc>perl</toc>
++ <toc>perl_bugs</toc>
++ <toc>python</toc>
++ <toc>python_bugs</toc>
++ <toc>ruby</toc>
++ <toc>ruby_bugs</toc>
++ <toc>sdl</toc>
++ <toc>stl</toc>
++ <toc>sw</toc>
++ <toc>w3c-dom-level2-html</toc>
++ <toc>w3c-svg</toc>
++ <toc>w3c-uaag10</toc>
++ <toc>wxwidgets_bugs</toc>
++ </ignoretocs>
++ <ignoreqt_xml>
++ <toc>qmake User Guide</toc>
++ </ignoreqt_xml>
++ </kdevdoctreeview>
++ <kdevdebugger>
++ <general>
++ <dbgshell>libtool</dbgshell>
++ </general>
++ </kdevdebugger>
++ <kdevfilecreate>
++ <useglobaltypes>
++ <type ext="ui" />
++ <type ext="cpp" />
++ <type ext="h" />
++ </useglobaltypes>
++ </kdevfilecreate>
++ <kdevautoproject>
++ <make>
++ <envvars>
++ <envvar value="1" name="WANT_AUTOCONF_2_5" />
++ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
++ </envvars>
++ </make>
++ <run>
++ <directoryradio>executable</directoryradio>
++ </run>
++ <general>
++ <activetarget>kded_networkstatus.la</activetarget>
++ </general>
++ </kdevautoproject>
++ <kdevcppsupport>
++ <references/>
++ <codecompletion>
++ <includeGlobalFunctions>true</includeGlobalFunctions>
++ <includeTypes>true</includeTypes>
++ <includeEnums>true</includeEnums>
++ <includeTypedefs>false</includeTypedefs>
++ <automaticCodeCompletion>true</automaticCodeCompletion>
++ <automaticArgumentsHint>true</automaticArgumentsHint>
++ <automaticHeaderCompletion>true</automaticHeaderCompletion>
++ <codeCompletionDelay>250</codeCompletionDelay>
++ <argumentsHintDelay>400</argumentsHintDelay>
++ <headerCompletionDelay>250</headerCompletionDelay>
++ </codecompletion>
++ </kdevcppsupport>
++</kdevelop>
+Index: networkstatus/.svn/text-base/README.statetransition.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/README.statetransition.svn-base
+@@ -0,0 +1,29 @@
++This table defines the actions to be taken on state transition.
++
++TODO: potentially add extra states OnlineReading and OnlineWriting
++
++ NEW
++ |Offline | Online |
++---+---+----------------+---------------+
++ | | |N|set online |
++ | | |L|reload |
++ | O | |C|resources |
++ | F | +---------------+
++ | F | |L|set online |
++O | | |C|reload res. |
++L | | | |write res. |
++D +---+----------------+---------------+
++ | |N|set offline | |
++ | |C| | |
++ | | | | |
++ | O +---------------+| |
++ | N |U|set offline | |
++ | |W|write locally | |
++ | |C|(subject to | |
++ | | | save policy)| |
++---+---+----------------+---------------+
++LC = Local changes exist
++NLC = No local changes exist
++UWC = Unsaved changes exist
++NC = no changes exist
++
+Index: networkstatus/.svn/text-base/testclient2.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testclient2.cpp.svn-base
+@@ -0,0 +1,222 @@
++/* This file is part of kdepim.
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2
++ as published by the Free Software Foundation.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qvbox.h>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include <connectionmanager.h>
++#include <networkstatusindicator.h>
++
++#include "testclientview.h"
++#include "testclient2.h"
++
++TestClient::TestClient()
++ : KMainWindow( 0, "ktestnetworkstatus" ),
++ m_layout( new QVBox( 0, "layout" ) ),
++ m_status( AppDisconnected )
++{
++ m_view = new TestClientView( this );
++ new StatusBarNetworkStatusIndicator( m_view, "statusindicator" );
++ // tell the KMainWindow that this is indeed the main widget
++ setCentralWidget(m_view);
++
++ networkStatusChanged( ConnectionManager::self()->status() );
++ appDisconnected();
++
++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) );
++ ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) );
++ ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) );
++
++ connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) );
++}
++
++TestClient::~TestClient()
++{
++}
++
++void TestClient::networkStatusChanged( NetworkStatus::Status status )
++{
++ kdDebug() << k_funcinfo << endl;
++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl;
++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) );
++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) );
++}
++
++void TestClient::doConnect()
++{
++ Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online );
++ if ( m_status != AppConnected ) {
++ appIsConnected();
++ }
++}
++
++void TestClient::doDisconnect()
++{
++ Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online );
++ if ( m_status == AppConnected ) {
++ appDisconnected();
++ }
++}
++
++void TestClient::connectButtonClicked()
++{
++ kdDebug() << k_funcinfo << endl;
++ if ( m_status == AppDisconnected ) {
++ switch ( ConnectionManager::self()->status() )
++ {
++ case NetworkStatus::NoNetworks:
++ case NetworkStatus::Online:
++ appIsConnected();
++ break;
++ default:
++ appWaiting();
++ break;
++ }
++ }
++ else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) {
++ appDisconnected();
++ }
++}
++
++void TestClient::appWaiting()
++{
++ kdDebug() << k_funcinfo << endl;
++ //m_status = AppWaitingForConnect;
++ m_view->appStatusLabel->setText( "Waiting" );
++}
++
++void TestClient::appIsConnected()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Disconnect" );
++ m_view->appStatusLabel->setText( "Connected" );
++ m_status = AppConnected;
++}
++
++void TestClient::appEstablishing()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->netStatusLabel->setText( "Establishing" );
++ m_view->connectButton->setEnabled( false );
++}
++
++void TestClient::appDisestablishing( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( false );
++ m_view->appStatusLabel->setText( "Disconnected" );
++}
++
++void TestClient::appDisconnected( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Start Connect" );
++ m_view->appStatusLabel->setText( "Disconnected" );
++ m_status = AppDisconnected;
++}
++
++QColor TestClient::toQColor( NetworkStatus::Status st )
++{
++ QColor col;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ col = Qt::darkGray;
++ break;
++ case NetworkStatus::Unreachable:
++ col = Qt::darkMagenta;
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::OfflineFailed:
++ col = Qt::darkRed;
++ break;
++ case NetworkStatus::ShuttingDown:
++ col = Qt::darkYellow;
++ break;
++ case NetworkStatus::Offline:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::Establishing:
++ col = Qt::yellow;
++ break;
++ case NetworkStatus::Online:
++ col = Qt::green;
++ break;
++ }
++ return col;
++}
++//main
++static const char description[] =
++ I18N_NOOP("Test Client for Network Status kded module");
++
++static const char version[] = "v0.1";
++
++static KCmdLineOptions options[] =
++{
++ KCmdLineLastOption
++};
++
++int main(int argc, char **argv)
++{
++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org");
++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" );
++ KCmdLineArgs::init(argc, argv, &about);
++ KCmdLineArgs::addCmdLineOptions(options);
++ KApplication app;
++
++ // register ourselves as a dcop client
++ app.dcopClient()->registerAs(app.name(), false);
++
++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
++ if (args->count() == 0)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ else
++ {
++ int i = 0;
++ for (; i < args->count(); i++)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ }
++ args->clear();
++
++ return app.exec();
++}
++
++#include "testclient2.moc"
++
+Index: networkstatus/.svn/text-base/testclient2.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testclient2.h.svn-base
+@@ -0,0 +1,82 @@
++/* This file is part of kdepim.
++
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KTESTNETWORKSTATUS_H
++#define KTESTNETWORKSTATUS_H
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * Test client that uses a ConnectionManager to change its state
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @version 0.1
++ */
++class TestClient : public KMainWindow
++{
++Q_OBJECT
++public:
++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected };
++ /**
++ * Default Constructor
++ */
++ TestClient();
++
++ /**
++ * Default Destructor
++ */
++ virtual ~TestClient();
++
++private slots:
++ void networkStatusChanged( NetworkStatus::Status status );
++ void connectButtonClicked();
++ void doConnect();
++ void doDisconnect();
++private:
++ void appWaiting();
++ void appEstablishing();
++ void appIsConnected();
++ void appDisestablishing();
++ void appDisconnected();
++ static QColor toQColor( NetworkStatus::Status );
++private:
++ QHBox * m_layout;
++ NetworkStatusIface_stub *m_service;
++ TestClientView *m_view;
++ AppStatus m_status; // this represents the app's status not the network's status
++};
++
++#endif // KTESTNETWORKSTATUS_H
++
+Index: networkstatus/.svn/text-base/testclient.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testclient.cpp.svn-base
+@@ -0,0 +1,234 @@
++/* This file is part of kdepim.
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2
++ as published by the Free Software Foundation.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qlabel.h>
++#include <qpushbutton.h>
++
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include "connectionmanager.h"
++#include "testclientview.h"
++#include "testclient.h"
++
++TestClient::TestClient()
++ : KMainWindow( 0, "ktestnetworkstatus" ),
++ m_view(new TestClientView(this)),
++ m_status( AppDisconnected )
++{
++ // tell the KMainWindow that this is indeed the main widget
++ setCentralWidget(m_view);
++
++ networkStatusChanged( ConnectionManager::self()->status() );
++ appDisconnected();
++
++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) );
++
++ connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) );
++}
++
++TestClient::~TestClient()
++{
++}
++
++void TestClient::networkStatusChanged( NetworkStatus::Status status )
++{
++ kdDebug() << k_funcinfo << endl;
++//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown
++// , Offline, Establishing, Online };
++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl;
++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) );
++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) );
++ switch ( status ) {
++ case NetworkStatus::NoNetworks:
++ break;
++ case NetworkStatus::Unreachable:
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ break;
++ case NetworkStatus::OfflineFailed:
++ break;
++ case NetworkStatus::ShuttingDown:
++ if ( m_status == AppConnected ) {
++ appDisestablishing();
++ }
++ break;
++ case NetworkStatus::Offline:
++ if ( m_status == AppConnected ) {
++ appDisconnected();
++ }
++ break;
++ case NetworkStatus::Establishing:
++ if ( m_status == AppWaitingForConnect )
++ appEstablishing();
++ else if ( m_status == AppConnected )
++ appDisconnected();
++ break;
++ case NetworkStatus::Online:
++ if ( m_status == AppWaitingForConnect )
++ appIsConnected();
++ break;
++ default:
++ m_view->netStatusLabel->setText( "Unrecognised status code!" );
++ }
++}
++
++void TestClient::connectButtonToggled( bool on )
++{
++ kdDebug() << k_funcinfo << endl;
++ if ( on && m_status == AppDisconnected ) {
++ switch ( ConnectionManager::self()->status() )
++ {
++ case NetworkStatus::NoNetworks:
++ case NetworkStatus::Online:
++ appIsConnected();
++ break;
++ default:
++ appWaiting();
++ break;
++ }
++ }
++ else if ( !on && m_status == AppConnected ) {
++ appDisconnected();
++ }
++}
++
++void TestClient::appWaiting()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_status = AppWaitingForConnect;
++ m_view->appStatusLabel->setText( "Waiting" );
++}
++
++void TestClient::appIsConnected()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Disconnect" );
++ m_view->appStatusLabel->setText( "Connected" );
++ m_status = AppConnected;
++}
++
++void TestClient::appEstablishing()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->netStatusLabel->setText( "Establishing" );
++ m_view->connectButton->setEnabled( false );
++}
++
++void TestClient::appDisestablishing( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( false );
++ m_view->appStatusLabel->setText( "Disconnected" );
++}
++
++void TestClient::appDisconnected( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Start Connect" );
++ m_view->appStatusLabel->setText( "Disconnected" );
++ m_status = AppDisconnected;
++}
++
++QColor TestClient::toQColor( NetworkStatus::Status st )
++{
++ QColor col;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ col = Qt::darkGray;
++ break;
++ case NetworkStatus::Unreachable:
++ col = Qt::darkMagenta;
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::OfflineFailed:
++ col = Qt::darkRed;
++ break;
++ case NetworkStatus::ShuttingDown:
++ col = Qt::darkYellow;
++ break;
++ case NetworkStatus::Offline:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::Establishing:
++ col = Qt::yellow;
++ break;
++ case NetworkStatus::Online:
++ col = Qt::green;
++ break;
++ }
++ return col;
++}
++//main
++static const char description[] =
++ I18N_NOOP("Test Client for Network Status kded module");
++
++static const char version[] = "v0.1";
++
++static KCmdLineOptions options[] =
++{
++ KCmdLineLastOption
++};
++
++int main(int argc, char **argv)
++{
++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org");
++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" );
++ KCmdLineArgs::init(argc, argv, &about);
++ KCmdLineArgs::addCmdLineOptions(options);
++ KApplication app;
++
++ // register ourselves as a dcop client
++ app.dcopClient()->registerAs(app.name(), false);
++
++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
++ if (args->count() == 0)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ else
++ {
++ int i = 0;
++ for (; i < args->count(); i++)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ }
++ args->clear();
++
++ return app.exec();
++}
++
++#include "testclient.moc"
++
+Index: networkstatus/.svn/text-base/testclient.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testclient.h.svn-base
+@@ -0,0 +1,80 @@
++/* This file is part of kdepim.
++
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KTESTNETWORKSTATUS_H
++#define KTESTNETWORKSTATUS_H
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * This class serves as the main window for ktestnetworkstatus. It handles the
++ * menus, toolbars, and status bars.
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @version 0.1
++ */
++class TestClient : public KMainWindow
++{
++Q_OBJECT
++public:
++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected };
++ /**
++ * Default Constructor
++ */
++ TestClient();
++
++ /**
++ * Default Destructor
++ */
++ virtual ~TestClient();
++
++private slots:
++ void networkStatusChanged( NetworkStatus::Status status );
++ void connectButtonToggled( bool on );
++private:
++ void appWaiting();
++ void appEstablishing();
++ void appIsConnected();
++ void appDisestablishing();
++ void appDisconnected();
++ static QColor toQColor( NetworkStatus::Status );
++private:
++ NetworkStatusIface_stub *m_service;
++ TestClientView *m_view;
++ AppStatus m_status; // this represents the app's status not the network's status
++};
++
++#endif // KTESTNETWORKSTATUS_H
++
+Index: networkstatus/.svn/text-base/testclientview.ui.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testclientview.ui.svn-base
+@@ -0,0 +1,177 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestClientView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestClientView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>356</width>
++ <height>127</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Client for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Network status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>netStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1_2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>App status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>appStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>31</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>connectButton</cstring>
++ </property>
++ <property name="text">
++ <string>Start Connect</string>
++ </property>
++ <property name="toggleButton">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>61</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+Index: networkstatus/.svn/text-base/testservice.cpp.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testservice.cpp.svn-base
+@@ -0,0 +1,219 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2
++ as published by the Free Software Foundation.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qcombobox.h>
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qtimer.h>
++
++#include <dcopclient.h>
++#include <kaboutdata.h>
++#include <kapplication.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <klocale.h>
++
++#include "testservice.h"
++#include "testserviceview.h"
++#include "networkstatusiface_stub.h"
++
++TestService::TestService() : KMainWindow( 0, "testservice" ),
++ m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ),
++ m_status ( NetworkStatus::Offline ),
++ m_nextStatus( NetworkStatus::OfflineDisconnected ),
++ m_view( new TestServiceView( this ) )
++{
++ setCentralWidget( m_view );
++ kapp->dcopClient()->registerAs("testservice" );
++
++ connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) );
++ connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) );
++
++ connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) );
++ kapp->dcopClient()->setNotifications( true );
++
++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) );
++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) );
++ setCaption( NetworkStatus::toString( m_status ) );
++
++ registerService();
++}
++
++TestService::~TestService()
++{
++ delete m_service;
++ delete m_view;
++}
++
++void TestService::registerService()
++{
++ NetworkStatus::Properties nsp;
++ nsp.name = "test_net";
++ nsp.service = kapp->dcopClient()->appId();
++ nsp.status = m_status;
++ m_service->registerNetwork( nsp );
++}
++
++void TestService::registeredToDCOP( const QCString & appId )
++{
++ if ( appId == "kded" )
++ registerService();
++}
++
++int TestService::status( const QString & network )
++{
++ Q_UNUSED( network );
++ return (int)m_status;
++}
++
++void TestService::changeComboActivated( int index )
++{
++ switch ( index ) {
++ case 0 /*NetworkStatus::OfflineDisconnected*/:
++ m_nextStatus = NetworkStatus::OfflineDisconnected;
++ break;
++ case 1 /*NetworkStatus::OfflineFailed*/:
++ m_nextStatus = NetworkStatus::OfflineFailed;
++ break;
++ case 2 /*NetworkStatus::ShuttingDown*/:
++ m_nextStatus = NetworkStatus::ShuttingDown;
++ break;
++ case 3 /*NetworkStatus::Offline*/:
++ m_nextStatus = NetworkStatus::Offline;
++ break;
++ case 4 /*NetworkStatus::Establishing*/:
++ m_nextStatus = NetworkStatus::Establishing;
++ break;
++ case 5 /*NetworkStatus::Online*/:
++ m_nextStatus = NetworkStatus::Online;
++ break;
++ default:
++ kdDebug() << "Unrecognised status!" << endl;
++ Q_ASSERT( false );
++ }
++ m_view->changeButton->setEnabled( true );
++}
++
++void TestService::changeButtonClicked()
++{
++ m_view->changeButton->setEnabled( false );
++ m_status = m_nextStatus;
++ m_service->setNetworkStatus( "test_net", ( int )m_status );
++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) );
++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) );
++ setCaption( NetworkStatus::toString( m_status ) );
++}
++
++int TestService::establish( const QString & network )
++{
++ Q_UNUSED( network );
++ m_status = NetworkStatus::Establishing;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++ m_nextStatus = NetworkStatus::Online;
++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) );
++ return (int)NetworkStatus::RequestAccepted;
++}
++
++int TestService::shutdown( const QString & network )
++{
++ Q_UNUSED( network );
++ m_status = NetworkStatus::ShuttingDown;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++ m_nextStatus = NetworkStatus::Offline;
++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) );
++ return (int)NetworkStatus::RequestAccepted;
++}
++
++void TestService::simulateFailure()
++{
++ m_status = NetworkStatus::OfflineFailed;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++}
++
++void TestService::simulateDisconnect()
++{
++ m_status = NetworkStatus::OfflineDisconnected;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++}
++
++void TestService::slotStatusChange()
++{
++ m_status = m_nextStatus;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++}
++
++QColor TestService::toQColor( NetworkStatus::Status st )
++{
++ QColor col;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ col = Qt::darkGray;
++ break;
++ case NetworkStatus::Unreachable:
++ col = Qt::darkMagenta;
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::OfflineFailed:
++ col = Qt::darkRed;
++ break;
++ case NetworkStatus::ShuttingDown:
++ col = Qt::darkYellow;
++ break;
++ case NetworkStatus::Offline:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::Establishing:
++ col = Qt::yellow;
++ break;
++ case NetworkStatus::Online:
++ col = Qt::green;
++ break;
++ }
++ return col;
++}
++
++static const char description[] =
++ I18N_NOOP("Test Service for Network Status kded module");
++
++static const char version[] = "v0.1";
++
++static KCmdLineOptions options[] =
++{
++ KCmdLineLastOption
++};
++
++int main( int argc, char** argv )
++{
++ KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org");
++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" );
++ KCmdLineArgs::init(argc, argv, &about);
++ KCmdLineArgs::addCmdLineOptions(options);
++ KApplication app;
++
++ TestService * test = new TestService;
++ test->show();
++ return app.exec();
++}
++
++#include "testservice.moc"
+Index: networkstatus/.svn/text-base/testservice.h.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testservice.h.svn-base
+@@ -0,0 +1,60 @@
++/* This file is part of kdepim.
++
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef _TEST_NETWORKSTATUS_SERVICE_H
++#define _TEST_NETWORKSTATUS_SERVICE_H
++
++#include <kmainwindow.h>
++
++#include "networkstatuscommon.h"
++
++class NetworkStatusIface_stub;
++class TestServiceView;
++
++class TestService : public KMainWindow {
++Q_OBJECT
++public:
++ TestService();
++ virtual ~TestService();
++ int status( const QString & network );
++ int establish( const QString & network );
++ int shutdown( const QString & network );
++ void simulateFailure();
++ void simulateDisconnect();
++protected slots:
++ void changeComboActivated( int index );
++ void registeredToDCOP( const QCString& appId );
++
++ void changeButtonClicked();
++
++ void slotStatusChange();
++private:
++ void registerService();
++ static QColor toQColor( NetworkStatus::Status );
++ NetworkStatusIface_stub * m_service;
++ NetworkStatus::Status m_status;
++ NetworkStatus::Status m_nextStatus;
++ TestServiceView * m_view;
++};
++
++#endif
+Index: networkstatus/.svn/text-base/testserviceview.ui.svn-base
+===================================================================
+--- /dev/null
++++ networkstatus/.svn/text-base/testserviceview.ui.svn-base
+@@ -0,0 +1,181 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestServiceView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestServiceView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>367</width>
++ <height>132</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Service for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>statusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Change to:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>Offline Disconnected</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline Failed</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Shutting Down</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Establishing</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Online</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>changeCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>51</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>changeButton</cstring>
++ </property>
++ <property name="text">
++ <string>Do change</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>41</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
++
+Index: networkstatus/testclient2.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/testclient2.cpp
+@@ -0,0 +1,222 @@
++/* This file is part of kdepim.
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2
++ as published by the Free Software Foundation.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qvbox.h>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include <connectionmanager.h>
++#include <networkstatusindicator.h>
++
++#include "testclientview.h"
++#include "testclient2.h"
++
++TestClient::TestClient()
++ : KMainWindow( 0, "ktestnetworkstatus" ),
++ m_layout( new QVBox( 0, "layout" ) ),
++ m_status( AppDisconnected )
++{
++ m_view = new TestClientView( this );
++ new StatusBarNetworkStatusIndicator( m_view, "statusindicator" );
++ // tell the KMainWindow that this is indeed the main widget
++ setCentralWidget(m_view);
++
++ networkStatusChanged( ConnectionManager::self()->status() );
++ appDisconnected();
++
++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) );
++ ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) );
++ ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) );
++
++ connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) );
++}
++
++TestClient::~TestClient()
++{
++}
++
++void TestClient::networkStatusChanged( NetworkStatus::Status status )
++{
++ kdDebug() << k_funcinfo << endl;
++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl;
++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) );
++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) );
++}
++
++void TestClient::doConnect()
++{
++ Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online );
++ if ( m_status != AppConnected ) {
++ appIsConnected();
++ }
++}
++
++void TestClient::doDisconnect()
++{
++ Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online );
++ if ( m_status == AppConnected ) {
++ appDisconnected();
++ }
++}
++
++void TestClient::connectButtonClicked()
++{
++ kdDebug() << k_funcinfo << endl;
++ if ( m_status == AppDisconnected ) {
++ switch ( ConnectionManager::self()->status() )
++ {
++ case NetworkStatus::NoNetworks:
++ case NetworkStatus::Online:
++ appIsConnected();
++ break;
++ default:
++ appWaiting();
++ break;
++ }
++ }
++ else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) {
++ appDisconnected();
++ }
++}
++
++void TestClient::appWaiting()
++{
++ kdDebug() << k_funcinfo << endl;
++ //m_status = AppWaitingForConnect;
++ m_view->appStatusLabel->setText( "Waiting" );
++}
++
++void TestClient::appIsConnected()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Disconnect" );
++ m_view->appStatusLabel->setText( "Connected" );
++ m_status = AppConnected;
++}
++
++void TestClient::appEstablishing()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->netStatusLabel->setText( "Establishing" );
++ m_view->connectButton->setEnabled( false );
++}
++
++void TestClient::appDisestablishing( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( false );
++ m_view->appStatusLabel->setText( "Disconnected" );
++}
++
++void TestClient::appDisconnected( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Start Connect" );
++ m_view->appStatusLabel->setText( "Disconnected" );
++ m_status = AppDisconnected;
++}
++
++QColor TestClient::toQColor( NetworkStatus::Status st )
++{
++ QColor col;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ col = Qt::darkGray;
++ break;
++ case NetworkStatus::Unreachable:
++ col = Qt::darkMagenta;
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::OfflineFailed:
++ col = Qt::darkRed;
++ break;
++ case NetworkStatus::ShuttingDown:
++ col = Qt::darkYellow;
++ break;
++ case NetworkStatus::Offline:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::Establishing:
++ col = Qt::yellow;
++ break;
++ case NetworkStatus::Online:
++ col = Qt::green;
++ break;
++ }
++ return col;
++}
++//main
++static const char description[] =
++ I18N_NOOP("Test Client for Network Status kded module");
++
++static const char version[] = "v0.1";
++
++static KCmdLineOptions options[] =
++{
++ KCmdLineLastOption
++};
++
++int main(int argc, char **argv)
++{
++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org");
++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" );
++ KCmdLineArgs::init(argc, argv, &about);
++ KCmdLineArgs::addCmdLineOptions(options);
++ KApplication app;
++
++ // register ourselves as a dcop client
++ app.dcopClient()->registerAs(app.name(), false);
++
++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
++ if (args->count() == 0)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ else
++ {
++ int i = 0;
++ for (; i < args->count(); i++)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ }
++ args->clear();
++
++ return app.exec();
++}
++
++#include "testclient2.moc"
++
+Index: networkstatus/testclient2.h
+===================================================================
+--- /dev/null
++++ networkstatus/testclient2.h
+@@ -0,0 +1,82 @@
++/* This file is part of kdepim.
++
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KTESTNETWORKSTATUS_H
++#define KTESTNETWORKSTATUS_H
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * Test client that uses a ConnectionManager to change its state
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @version 0.1
++ */
++class TestClient : public KMainWindow
++{
++Q_OBJECT
++public:
++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected };
++ /**
++ * Default Constructor
++ */
++ TestClient();
++
++ /**
++ * Default Destructor
++ */
++ virtual ~TestClient();
++
++private slots:
++ void networkStatusChanged( NetworkStatus::Status status );
++ void connectButtonClicked();
++ void doConnect();
++ void doDisconnect();
++private:
++ void appWaiting();
++ void appEstablishing();
++ void appIsConnected();
++ void appDisestablishing();
++ void appDisconnected();
++ static QColor toQColor( NetworkStatus::Status );
++private:
++ QHBox * m_layout;
++ NetworkStatusIface_stub *m_service;
++ TestClientView *m_view;
++ AppStatus m_status; // this represents the app's status not the network's status
++};
++
++#endif // KTESTNETWORKSTATUS_H
++
+Index: networkstatus/testclient.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/testclient.cpp
+@@ -0,0 +1,234 @@
++/* This file is part of kdepim.
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2
++ as published by the Free Software Foundation.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qlabel.h>
++#include <qpushbutton.h>
++
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include "connectionmanager.h"
++#include "testclientview.h"
++#include "testclient.h"
++
++TestClient::TestClient()
++ : KMainWindow( 0, "ktestnetworkstatus" ),
++ m_view(new TestClientView(this)),
++ m_status( AppDisconnected )
++{
++ // tell the KMainWindow that this is indeed the main widget
++ setCentralWidget(m_view);
++
++ networkStatusChanged( ConnectionManager::self()->status() );
++ appDisconnected();
++
++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) );
++
++ connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) );
++}
++
++TestClient::~TestClient()
++{
++}
++
++void TestClient::networkStatusChanged( NetworkStatus::Status status )
++{
++ kdDebug() << k_funcinfo << endl;
++//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown
++// , Offline, Establishing, Online };
++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl;
++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) );
++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) );
++ switch ( status ) {
++ case NetworkStatus::NoNetworks:
++ break;
++ case NetworkStatus::Unreachable:
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ break;
++ case NetworkStatus::OfflineFailed:
++ break;
++ case NetworkStatus::ShuttingDown:
++ if ( m_status == AppConnected ) {
++ appDisestablishing();
++ }
++ break;
++ case NetworkStatus::Offline:
++ if ( m_status == AppConnected ) {
++ appDisconnected();
++ }
++ break;
++ case NetworkStatus::Establishing:
++ if ( m_status == AppWaitingForConnect )
++ appEstablishing();
++ else if ( m_status == AppConnected )
++ appDisconnected();
++ break;
++ case NetworkStatus::Online:
++ if ( m_status == AppWaitingForConnect )
++ appIsConnected();
++ break;
++ default:
++ m_view->netStatusLabel->setText( "Unrecognised status code!" );
++ }
++}
++
++void TestClient::connectButtonToggled( bool on )
++{
++ kdDebug() << k_funcinfo << endl;
++ if ( on && m_status == AppDisconnected ) {
++ switch ( ConnectionManager::self()->status() )
++ {
++ case NetworkStatus::NoNetworks:
++ case NetworkStatus::Online:
++ appIsConnected();
++ break;
++ default:
++ appWaiting();
++ break;
++ }
++ }
++ else if ( !on && m_status == AppConnected ) {
++ appDisconnected();
++ }
++}
++
++void TestClient::appWaiting()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_status = AppWaitingForConnect;
++ m_view->appStatusLabel->setText( "Waiting" );
++}
++
++void TestClient::appIsConnected()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Disconnect" );
++ m_view->appStatusLabel->setText( "Connected" );
++ m_status = AppConnected;
++}
++
++void TestClient::appEstablishing()
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->netStatusLabel->setText( "Establishing" );
++ m_view->connectButton->setEnabled( false );
++}
++
++void TestClient::appDisestablishing( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( false );
++ m_view->appStatusLabel->setText( "Disconnected" );
++}
++
++void TestClient::appDisconnected( )
++{
++ kdDebug() << k_funcinfo << endl;
++ m_view->connectButton->setEnabled( true );
++ m_view->connectButton->setText( "Start Connect" );
++ m_view->appStatusLabel->setText( "Disconnected" );
++ m_status = AppDisconnected;
++}
++
++QColor TestClient::toQColor( NetworkStatus::Status st )
++{
++ QColor col;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ col = Qt::darkGray;
++ break;
++ case NetworkStatus::Unreachable:
++ col = Qt::darkMagenta;
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::OfflineFailed:
++ col = Qt::darkRed;
++ break;
++ case NetworkStatus::ShuttingDown:
++ col = Qt::darkYellow;
++ break;
++ case NetworkStatus::Offline:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::Establishing:
++ col = Qt::yellow;
++ break;
++ case NetworkStatus::Online:
++ col = Qt::green;
++ break;
++ }
++ return col;
++}
++//main
++static const char description[] =
++ I18N_NOOP("Test Client for Network Status kded module");
++
++static const char version[] = "v0.1";
++
++static KCmdLineOptions options[] =
++{
++ KCmdLineLastOption
++};
++
++int main(int argc, char **argv)
++{
++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org");
++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" );
++ KCmdLineArgs::init(argc, argv, &about);
++ KCmdLineArgs::addCmdLineOptions(options);
++ KApplication app;
++
++ // register ourselves as a dcop client
++ app.dcopClient()->registerAs(app.name(), false);
++
++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
++ if (args->count() == 0)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ else
++ {
++ int i = 0;
++ for (; i < args->count(); i++)
++ {
++ TestClient *widget = new TestClient;
++ widget->show();
++ }
++ }
++ args->clear();
++
++ return app.exec();
++}
++
++#include "testclient.moc"
++
+Index: networkstatus/testclient.h
+===================================================================
+--- /dev/null
++++ networkstatus/testclient.h
+@@ -0,0 +1,80 @@
++/* This file is part of kdepim.
++
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef KTESTNETWORKSTATUS_H
++#define KTESTNETWORKSTATUS_H
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * This class serves as the main window for ktestnetworkstatus. It handles the
++ * menus, toolbars, and status bars.
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @version 0.1
++ */
++class TestClient : public KMainWindow
++{
++Q_OBJECT
++public:
++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected };
++ /**
++ * Default Constructor
++ */
++ TestClient();
++
++ /**
++ * Default Destructor
++ */
++ virtual ~TestClient();
++
++private slots:
++ void networkStatusChanged( NetworkStatus::Status status );
++ void connectButtonToggled( bool on );
++private:
++ void appWaiting();
++ void appEstablishing();
++ void appIsConnected();
++ void appDisestablishing();
++ void appDisconnected();
++ static QColor toQColor( NetworkStatus::Status );
++private:
++ NetworkStatusIface_stub *m_service;
++ TestClientView *m_view;
++ AppStatus m_status; // this represents the app's status not the network's status
++};
++
++#endif // KTESTNETWORKSTATUS_H
++
+Index: networkstatus/testclientview.ui
+===================================================================
+--- /dev/null
++++ networkstatus/testclientview.ui
+@@ -0,0 +1,177 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestClientView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestClientView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>356</width>
++ <height>127</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Client for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Network status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>netStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1_2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>App status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>appStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>31</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>connectButton</cstring>
++ </property>
++ <property name="text">
++ <string>Start Connect</string>
++ </property>
++ <property name="toggleButton">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>61</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+Index: networkstatus/testservice.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/testservice.cpp
+@@ -0,0 +1,219 @@
++/* This file is part of kdepim.
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2
++ as published by the Free Software Foundation.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#include <qcombobox.h>
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qtimer.h>
++
++#include <dcopclient.h>
++#include <kaboutdata.h>
++#include <kapplication.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <klocale.h>
++
++#include "testservice.h"
++#include "testserviceview.h"
++#include "networkstatusiface_stub.h"
++
++TestService::TestService() : KMainWindow( 0, "testservice" ),
++ m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ),
++ m_status ( NetworkStatus::Offline ),
++ m_nextStatus( NetworkStatus::OfflineDisconnected ),
++ m_view( new TestServiceView( this ) )
++{
++ setCentralWidget( m_view );
++ kapp->dcopClient()->registerAs("testservice" );
++
++ connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) );
++ connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) );
++
++ connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) );
++ kapp->dcopClient()->setNotifications( true );
++
++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) );
++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) );
++ setCaption( NetworkStatus::toString( m_status ) );
++
++ registerService();
++}
++
++TestService::~TestService()
++{
++ delete m_service;
++ delete m_view;
++}
++
++void TestService::registerService()
++{
++ NetworkStatus::Properties nsp;
++ nsp.name = "test_net";
++ nsp.service = kapp->dcopClient()->appId();
++ nsp.status = m_status;
++ m_service->registerNetwork( nsp );
++}
++
++void TestService::registeredToDCOP( const QCString & appId )
++{
++ if ( appId == "kded" )
++ registerService();
++}
++
++int TestService::status( const QString & network )
++{
++ Q_UNUSED( network );
++ return (int)m_status;
++}
++
++void TestService::changeComboActivated( int index )
++{
++ switch ( index ) {
++ case 0 /*NetworkStatus::OfflineDisconnected*/:
++ m_nextStatus = NetworkStatus::OfflineDisconnected;
++ break;
++ case 1 /*NetworkStatus::OfflineFailed*/:
++ m_nextStatus = NetworkStatus::OfflineFailed;
++ break;
++ case 2 /*NetworkStatus::ShuttingDown*/:
++ m_nextStatus = NetworkStatus::ShuttingDown;
++ break;
++ case 3 /*NetworkStatus::Offline*/:
++ m_nextStatus = NetworkStatus::Offline;
++ break;
++ case 4 /*NetworkStatus::Establishing*/:
++ m_nextStatus = NetworkStatus::Establishing;
++ break;
++ case 5 /*NetworkStatus::Online*/:
++ m_nextStatus = NetworkStatus::Online;
++ break;
++ default:
++ kdDebug() << "Unrecognised status!" << endl;
++ Q_ASSERT( false );
++ }
++ m_view->changeButton->setEnabled( true );
++}
++
++void TestService::changeButtonClicked()
++{
++ m_view->changeButton->setEnabled( false );
++ m_status = m_nextStatus;
++ m_service->setNetworkStatus( "test_net", ( int )m_status );
++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) );
++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) );
++ setCaption( NetworkStatus::toString( m_status ) );
++}
++
++int TestService::establish( const QString & network )
++{
++ Q_UNUSED( network );
++ m_status = NetworkStatus::Establishing;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++ m_nextStatus = NetworkStatus::Online;
++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) );
++ return (int)NetworkStatus::RequestAccepted;
++}
++
++int TestService::shutdown( const QString & network )
++{
++ Q_UNUSED( network );
++ m_status = NetworkStatus::ShuttingDown;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++ m_nextStatus = NetworkStatus::Offline;
++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) );
++ return (int)NetworkStatus::RequestAccepted;
++}
++
++void TestService::simulateFailure()
++{
++ m_status = NetworkStatus::OfflineFailed;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++}
++
++void TestService::simulateDisconnect()
++{
++ m_status = NetworkStatus::OfflineDisconnected;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++}
++
++void TestService::slotStatusChange()
++{
++ m_status = m_nextStatus;
++ m_service->setNetworkStatus( "test_net", (int)m_status );
++}
++
++QColor TestService::toQColor( NetworkStatus::Status st )
++{
++ QColor col;
++ switch ( st ) {
++ case NetworkStatus::NoNetworks:
++ col = Qt::darkGray;
++ break;
++ case NetworkStatus::Unreachable:
++ col = Qt::darkMagenta;
++ break;
++ case NetworkStatus::OfflineDisconnected:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::OfflineFailed:
++ col = Qt::darkRed;
++ break;
++ case NetworkStatus::ShuttingDown:
++ col = Qt::darkYellow;
++ break;
++ case NetworkStatus::Offline:
++ col = Qt::blue;
++ break;
++ case NetworkStatus::Establishing:
++ col = Qt::yellow;
++ break;
++ case NetworkStatus::Online:
++ col = Qt::green;
++ break;
++ }
++ return col;
++}
++
++static const char description[] =
++ I18N_NOOP("Test Service for Network Status kded module");
++
++static const char version[] = "v0.1";
++
++static KCmdLineOptions options[] =
++{
++ KCmdLineLastOption
++};
++
++int main( int argc, char** argv )
++{
++ KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org");
++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" );
++ KCmdLineArgs::init(argc, argv, &about);
++ KCmdLineArgs::addCmdLineOptions(options);
++ KApplication app;
++
++ TestService * test = new TestService;
++ test->show();
++ return app.exec();
++}
++
++#include "testservice.moc"
+Index: networkstatus/testservice.h
+===================================================================
+--- /dev/null
++++ networkstatus/testservice.h
+@@ -0,0 +1,60 @@
++/* This file is part of kdepim.
++
++ Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program 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 General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++ As a special exception, permission is given to link this program
++ with any edition of Qt, and distribute the resulting executable,
++ without including the source code for Qt in the source distribution.
++*/
++
++#ifndef _TEST_NETWORKSTATUS_SERVICE_H
++#define _TEST_NETWORKSTATUS_SERVICE_H
++
++#include <kmainwindow.h>
++
++#include "networkstatuscommon.h"
++
++class NetworkStatusIface_stub;
++class TestServiceView;
++
++class TestService : public KMainWindow {
++Q_OBJECT
++public:
++ TestService();
++ virtual ~TestService();
++ int status( const QString & network );
++ int establish( const QString & network );
++ int shutdown( const QString & network );
++ void simulateFailure();
++ void simulateDisconnect();
++protected slots:
++ void changeComboActivated( int index );
++ void registeredToDCOP( const QCString& appId );
++
++ void changeButtonClicked();
++
++ void slotStatusChange();
++private:
++ void registerService();
++ static QColor toQColor( NetworkStatus::Status );
++ NetworkStatusIface_stub * m_service;
++ NetworkStatus::Status m_status;
++ NetworkStatus::Status m_nextStatus;
++ TestServiceView * m_view;
++};
++
++#endif
+Index: networkstatus/testserviceview.ui
+===================================================================
+--- /dev/null
++++ networkstatus/testserviceview.ui
+@@ -0,0 +1,181 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestServiceView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestServiceView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>367</width>
++ <height>132</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Service for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>statusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Change to:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>Offline Disconnected</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline Failed</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Shutting Down</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Establishing</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Online</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>changeCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>51</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>changeButton</cstring>
++ </property>
++ <property name="text">
++ <string>Do change</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>41</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
++
diff --git a/opensuse/tdelibs/no-debug-by-default.diff b/opensuse/tdelibs/no-debug-by-default.diff
new file mode 100644
index 000000000..5b1440970
--- /dev/null
+++ b/opensuse/tdelibs/no-debug-by-default.diff
@@ -0,0 +1,158 @@
+Index: kdecore/kdebug.cpp
+===================================================================
+--- kdecore/kdebug.cpp.orig
++++ kdecore/kdebug.cpp
+@@ -170,7 +170,7 @@ static KStaticDeleter<kDebugPrivate> pcd
+ static KStaticDeleter<KDebugDCOPIface> dcopsd;
+ static KDebugDCOPIface* kDebugDCOPIface = 0;
+
+-static void kDebugBackend( unsigned short nLevel, unsigned int nArea, const char *data)
++static void kDebugInitBackend(unsigned int nArea)
+ {
+ if ( !kDebug_data )
+ {
+@@ -205,40 +205,46 @@ static void kDebugBackend( unsigned shor
+ if ( KGlobal::_instance )
+ kDebug_data->aAreaName = KGlobal::instance()->instanceName();
+ }
++}
+
+- int nPriority = 0;
+- QString aCaption;
+-
+- /* Determine output */
++static short kDebugAreaOutput(unsigned short nLevel, unsigned int nArea)
++{
++ kDebugInitBackend (nArea);
+
++ /* Determine output */
+ QString key;
+ switch( nLevel )
+ {
+ case KDEBUG_INFO:
+ key = "InfoOutput";
+- aCaption = "Info";
+- nPriority = LOG_INFO;
+ break;
+ case KDEBUG_WARN:
+ key = "WarnOutput";
+- aCaption = "Warning";
+- nPriority = LOG_WARNING;
+ break;
+ case KDEBUG_FATAL:
+ key = "FatalOutput";
+- aCaption = "Fatal Error";
+- nPriority = LOG_CRIT;
+ break;
+ case KDEBUG_ERROR:
+ default:
+ /* Programmer error, use "Error" as default */
+ key = "ErrorOutput";
+- aCaption = "Error";
+- nPriority = LOG_ERR;
+ break;
+ }
+
+- short nOutput = kDebug_data->config ? kDebug_data->config->readNumEntry(key, 2) : 2;
++ return kDebug_data->config ? kDebug_data->config->readNumEntry(key, 4) : 4;
++}
++
++
++bool kDebugAreaEnabled(unsigned short nLevel, unsigned int nArea)
++{
++ return kDebugAreaOutput(nLevel, nArea) != 4;
++}
++
++static void kDebugBackend( unsigned short nLevel, unsigned int nArea, const char *data)
++{
++ kDebugInitBackend (nArea);
++
++ short nOutput = kDebugAreaOutput(nLevel, nArea);
+
+ // If the application doesn't have a QApplication object it can't use
+ // a messagebox.
+@@ -247,6 +253,32 @@ static void kDebugBackend( unsigned shor
+ else if ( nOutput == 4 && nLevel != KDEBUG_FATAL )
+ return;
+
++ int nPriority = 0;
++ QString aCaption;
++ switch( nLevel )
++ {
++ case KDEBUG_INFO:
++ aCaption = "Info";
++ nPriority = LOG_INFO;
++ break;
++ case KDEBUG_WARN:
++ aCaption = "Warning";
++ nPriority = LOG_WARNING;
++ break;
++ case KDEBUG_FATAL:
++ aCaption = "Fatal Error";
++ nPriority = LOG_CRIT;
++ break;
++ case KDEBUG_ERROR:
++ default:
++ /* Programmer error, use "Error" as default */
++ aCaption = "Error";
++ nPriority = LOG_ERR;
++ break;
++ }
++
++
++
+ const int BUFSIZE = 4096;
+ char buf[BUFSIZE];
+ if ( !kDebug_data->aAreaName.isEmpty() ) {
+@@ -314,13 +346,25 @@ static void kDebugBackend( unsigned shor
+ }
+
+ kdbgstream &perror( kdbgstream &s) { return s << QString::fromLocal8Bit(strerror(errno)); }
+-kdbgstream kdDebug(int area) { return kdbgstream(area, KDEBUG_INFO); }
+-kdbgstream kdDebug(bool cond, int area) { if (cond) return kdbgstream(area, KDEBUG_INFO); else return kdbgstream(0, 0, false); }
++kdbgstream kdDebug(int area) { return kdbgstream(area, KDEBUG_INFO, kDebugAreaEnabled(KDEBUG_INFO, area)); }
++kdbgstream kdDebug(bool cond, int area) { if (cond) return kdbgstream(area, KDEBUG_INFO, kDebugAreaEnabled(KDEBUG_INFO, area)); else return kdbgstream(0, 0, false); }
+
+ kdbgstream kdError(int area) { return kdbgstream("ERROR: ", area, KDEBUG_ERROR); }
+ kdbgstream kdError(bool cond, int area) { if (cond) return kdbgstream("ERROR: ", area, KDEBUG_ERROR); else return kdbgstream(0,0,false); }
+-kdbgstream kdWarning(int area) { return kdbgstream("WARNING: ", area, KDEBUG_WARN); }
+-kdbgstream kdWarning(bool cond, int area) { if (cond) return kdbgstream("WARNING: ", area, KDEBUG_WARN); else return kdbgstream(0,0,false); }
++
++kdbgstream kdWarning(int area)
++{
++ return kdbgstream("WARNING: ", area, KDEBUG_WARN, kDebugAreaEnabled(KDEBUG_WARN, area));
++}
++
++kdbgstream kdWarning(bool cond, int area)
++{
++ if (cond)
++ return kdbgstream("WARNING: ", area, KDEBUG_WARN, kDebugAreaEnabled(KDEBUG_WARN, area));
++ else
++ return kdbgstream(0,0,false);
++}
++
+ kdbgstream kdFatal(int area) { return kdbgstream("FATAL: ", area, KDEBUG_FATAL); }
+ kdbgstream kdFatal(bool cond, int area) { if (cond) return kdbgstream("FATAL: ", area, KDEBUG_FATAL); else return kdbgstream(0,0,false); }
+
+@@ -331,9 +375,10 @@ kdbgstream::kdbgstream(kdbgstream &str)
+ }
+
+ void kdbgstream::flush() {
+- if (output.isEmpty() || !print)
++ if (output.isEmpty())
+ return;
+- kDebugBackend( level, area, output.local8Bit().data() );
++ if (print)
++ kDebugBackend( level, area, output.local8Bit().data() );
+ output = QString::null;
+ }
+
+@@ -349,7 +394,7 @@ kdbgstream &kdbgstream::form(const char
+ }
+
+ kdbgstream::~kdbgstream() {
+- if (!output.isEmpty()) {
++ if (print && !output.isEmpty()) {
+ fprintf(stderr, "ASSERT: debug output not ended with \\n\n");
+ fprintf(stderr, "%s", kdBacktrace().latin1());
+ *this << "\n";
diff --git a/opensuse/tdelibs/no-progress-for-beagle-status-query.diff b/opensuse/tdelibs/no-progress-for-beagle-status-query.diff
new file mode 100644
index 000000000..4d9ae1a84
--- /dev/null
+++ b/opensuse/tdelibs/no-progress-for-beagle-status-query.diff
@@ -0,0 +1,13 @@
+Index: kio/kio/netaccess.cpp
+===================================================================
+--- kio/kio/netaccess.cpp.orig
++++ kio/kio/netaccess.cpp
+@@ -337,7 +337,7 @@ bool NetAccess::statInternal( const KURL
+ QWidget* window )
+ {
+ bJobOK = true; // success unless further error occurs
+- KIO::StatJob * job = KIO::stat( url, !url.isLocalFile() );
++ KIO::StatJob * job = KIO::stat( url, !url.isLocalFile() && !url.url().startsWith("beagle:?") );
+ job->setWindow (window);
+ job->setDetails( details );
+ job->setSide( source );
diff --git a/opensuse/tdelibs/noauto-package.diff b/opensuse/tdelibs/noauto-package.diff
new file mode 100644
index 000000000..9eec14ab3
--- /dev/null
+++ b/opensuse/tdelibs/noauto-package.diff
@@ -0,0 +1,13 @@
+Index: configure.in.in
+===================================================================
+--- configure.in.in.orig
++++ configure.in.in
+@@ -17,7 +17,7 @@ AC_CANONICAL_SYSTEM
+ AC_ARG_PROGRAM
+
+ dnl Automake doc recommends to do this only here. (Janos)
+-AM_INIT_AUTOMAKE(@MODULENAME@, @VERSION@) dnl searches for some needed programs
++AM_INIT_AUTOMAKE("kdelibs", @VERSION@) dnl searches for some needed programs
+
+ AC_PROG_INSTALL
+
diff --git a/opensuse/tdelibs/oom_score_adj.patch b/opensuse/tdelibs/oom_score_adj.patch
new file mode 100644
index 000000000..f7a929f3f
--- /dev/null
+++ b/opensuse/tdelibs/oom_score_adj.patch
@@ -0,0 +1,36 @@
+Index: kdelibs-3.5.10/kinit/start_kdeinit.c
+===================================================================
+--- kdelibs-3.5.10.orig/kinit/start_kdeinit.c
++++ kdelibs-3.5.10/kinit/start_kdeinit.c
+@@ -44,11 +44,30 @@ static int set_protection( pid_t pid, in
+ {
+ char buf[ 1024 ];
+ int procfile;
++ struct stat st;
++
++ /* Newer kernels (noticed in 2.6.36) */
++ sprintf( buf, "/proc/%d/oom_score_adj", pid );
++ if ( lstat (buf, &st) == 0) {
++ if( !enable ) {
++ /* Be paranoid and check that the pid we got from the pipe
++ belongs to this user. */
++ if( st.st_uid != getuid())
++ return 0;
++ }
++ procfile = open(buf, O_WRONLY);
++ if( enable )
++ write( procfile, "-300", sizeof( "-300" ));
++ else
++ write( procfile, "0", sizeof( "0" ));
++ close( procfile );
++ return 1;
++ }
++
+ sprintf( buf, "/proc/%d/stat", pid );
+ if( !enable ) {
+ /* Be paranoid and check that the pid we got from the pipe
+ belongs to this user. */
+- struct stat st;
+ if( lstat( buf, &st ) < 0 || st.st_uid != getuid())
+ return 0;
+ }
diff --git a/opensuse/tdelibs/patch-mimetype-iconnames.diff b/opensuse/tdelibs/patch-mimetype-iconnames.diff
new file mode 100644
index 000000000..6874162ae
--- /dev/null
+++ b/opensuse/tdelibs/patch-mimetype-iconnames.diff
@@ -0,0 +1,39 @@
+Index: mimetypes/application/vnd.oasis.opendocument.formula.desktop
+===================================================================
+--- mimetypes/application/vnd.oasis.opendocument.formula.desktop.orig
++++ mimetypes/application/vnd.oasis.opendocument.formula.desktop
+@@ -2,7 +2,7 @@
+ Type=MimeType
+ MimeType=application/vnd.oasis.opendocument.formula
+ Patterns=*.odf;*.ODF
+-Icon=formula
++Icon=kformula_kfo
+ Comment=OASIS OpenDocument Formula
+ Comment[af]=OASIS Oop Dokument formule
+ Comment[be]=Формула OASIS OpenDocument
+Index: mimetypes/application/vnd.sun.xml.base.desktop
+===================================================================
+--- mimetypes/application/vnd.sun.xml.base.desktop.orig
++++ mimetypes/application/vnd.sun.xml.base.desktop
+@@ -67,7 +67,7 @@ Comment[vi]=Cơ sở dữ liệu OpenOff
+ Comment[zh_CN]=OpenOffice.org 数据库
+ Comment[zh_HK]=OpenOffice.org 資料庫
+ Comment[zh_TW]=OpenOffice.org 資料庫
+-Icon=spreadsheet
++Icon=database
+ Type=MimeType
+ Patterns=*.odb;*.ODB;
+ MimeType=application/vnd.sun.xml.base
+Index: mimetypes/text/rtf.desktop
+===================================================================
+--- mimetypes/text/rtf.desktop.orig
++++ mimetypes/text/rtf.desktop
+@@ -77,7 +77,7 @@ Comment[wa]=Documint RTF
+ Comment[zh_CN]=RTF 文档
+ Comment[zh_HK]=RTF 文件
+ Comment[zh_TW]=RTF 文件
+-Icon=wordprocessing
++Icon=rtf
+ Type=MimeType
+ Patterns=*.rtf;*.RTF;
+ [Property::X-KDE-text]
diff --git a/opensuse/tdelibs/prefer_distribution_settings.dif b/opensuse/tdelibs/prefer_distribution_settings.dif
new file mode 100644
index 000000000..655788807
--- /dev/null
+++ b/opensuse/tdelibs/prefer_distribution_settings.dif
@@ -0,0 +1,13 @@
+Index: kdecore/kstandarddirs.cpp
+===================================================================
+--- kdecore/kstandarddirs.cpp.orig
++++ kdecore/kstandarddirs.cpp
+@@ -1290,6 +1290,8 @@ void KStandardDirs::addKDEDefaults()
+ }
+ }
+
++ kdedirList.append("/etc/opt/kde3");
++
+ #ifndef Q_OS_WIN //no default KDEDIR on win32 defined
+ kdedirList.append(KDEDIR);
+ #endif
diff --git a/opensuse/tdelibs/printpreview.patch b/opensuse/tdelibs/printpreview.patch
new file mode 100644
index 000000000..ef3de21a4
--- /dev/null
+++ b/opensuse/tdelibs/printpreview.patch
@@ -0,0 +1,14 @@
+Index: kdeprint/kprintpreview.cpp
+===================================================================
+--- kdeprint/kprintpreview.cpp.orig
++++ kdeprint/kprintpreview.cpp
+@@ -108,6 +108,9 @@ static KLibFactory* componentFactory()
+ {
+ kdDebug(500) << "kdeprint: querying trader for 'application/postscript' service" << endl;
+ KLibFactory *factory(0);
++ factory = KLibLoader::self()->factory("libkghostviewpart");
++ if( factory )
++ return factory;
+ KTrader::OfferList offers = KTrader::self()->query(QString::fromLatin1("application/postscript"), QString::fromLatin1("KParts/ReadOnlyPart"), QString::null, QString::null);
+ for (KTrader::OfferList::ConstIterator it = offers.begin(); it != offers.end(); ++it)
+ {
diff --git a/opensuse/tdelibs/r874968-ebay-crash.diff b/opensuse/tdelibs/r874968-ebay-crash.diff
new file mode 100644
index 000000000..44dfb6eb4
--- /dev/null
+++ b/opensuse/tdelibs/r874968-ebay-crash.diff
@@ -0,0 +1,24 @@
+Index: khtml/rendering/table_layout.cpp
+===================================================================
+--- khtml/rendering/table_layout.cpp.orig
++++ khtml/rendering/table_layout.cpp
+@@ -297,7 +297,8 @@ void FixedTableLayout::layout()
+ #endif
+ for ( int i = 0; available > 0 && i < nEffCols; i++ ) {
+ if ( width[i].isPercent() ) {
+- int w = base * width[i].value() / totalPercent;
++ // totalPercent may be 0 below if all %-width specifed are 0%. (#172557)
++ int w = totalPercent ? base * width[i].value() / totalPercent : 0;
+ available -= w;
+ calcWidth[i] = w;
+ }
+@@ -313,7 +314,8 @@ void FixedTableLayout::layout()
+
+ for ( int i = 0; available > 0 && i < nEffCols; i++ ) {
+ if ( width[i].isVariable() ) {
+- int w = available / totalVariable;
++ // totalVariable may be 0 below if all the variable widths specified are 0.
++ int w = totalVariable ? available / totalVariable : 0;
+ available -= w;
+ calcWidth[i] = w;
+ totalVariable--;
diff --git a/opensuse/tdelibs/rubberband-selection.diff b/opensuse/tdelibs/rubberband-selection.diff
new file mode 100644
index 000000000..d2b75f17c
--- /dev/null
+++ b/opensuse/tdelibs/rubberband-selection.diff
@@ -0,0 +1,380 @@
+Index: kdefx/kstyle.cpp
+===================================================================
+--- kdefx/kstyle.cpp.orig
++++ kdefx/kstyle.cpp
+@@ -154,6 +154,7 @@ struct KStylePrivate
+ bool menuAltKeyNavigation : 1;
+ bool menuDropShadow : 1;
+ bool sloppySubMenus : 1;
++ bool semiTransparentRubberband : 1;
+ int popupMenuDelay;
+ float menuOpacity;
+
+@@ -187,6 +188,7 @@ KStyle::KStyle( KStyleFlags flags, KStyl
+ d->menuAltKeyNavigation = settings.readBoolEntry("/KStyle/Settings/MenuAltKeyNavigation", true);
+ d->scrollablePopupmenus = settings.readBoolEntry("/KStyle/Settings/ScrollablePopupMenus", false);
+ d->menuDropShadow = settings.readBoolEntry("/KStyle/Settings/MenuDropShadow", false);
++ d->semiTransparentRubberband = settings.readBoolEntry("/KStyle/Settings/SemiTransparentRubberband", false);
+ d->menuHandler = NULL;
+
+ if (useMenuTransparency) {
+@@ -553,7 +555,57 @@ void KStyle::drawPrimitive( PrimitiveEle
+ else
+ // General handle, probably a kicker applet handle.
+ drawKStylePrimitive( KPE_GeneralHandle, p, widget, r, cg, flags, opt );
+-
++#if QT_VERSION >= 0x030300
++#ifdef HAVE_XRENDER
++ } else if ( d->semiTransparentRubberband && pe == QStyle::PE_RubberBand ) {
++ QRect rect = r.normalize();
++ QPoint point;
++ point = p->xForm( point );
++
++ static XRenderColor clr = { 0, 0, 0, 0 };
++ static unsigned long fillColor = 0;
++ if ( fillColor != cg.highlight().rgb() ) {
++ fillColor = cg.highlight().rgb();
++
++ unsigned long color = fillColor << 8 | 0x40;
++
++ int red = (color >> 24) & 0xff;
++ int green = (color >> 16) & 0xff;
++ int blue = (color >> 8) & 0xff;
++ int alpha = (color >> 0) & 0xff;
++
++ red = red * alpha / 255;
++ green = green * alpha / 255;
++ blue = blue * alpha / 255;
++
++ clr.red = (red << 8) + red;
++ clr.green = (green << 8) + green;
++ clr.blue = (blue << 8) + blue;
++ clr.alpha = (alpha << 8) + alpha;
++ }
++
++ XRenderFillRectangle(
++ p->device()->x11Display(),
++ PictOpOver,
++ p->device()->x11RenderHandle(),
++ &clr,
++ rect.x() + point.x(),
++ rect.y() + point.y(),
++ rect.width(),
++ rect.height() );
++
++ p->save();
++ p->setRasterOp( Qt::CopyROP );
++ p->setPen( QPen( cg.highlight().dark( 160 ), 1 ) );
++ p->setBrush( NoBrush );
++ p->drawRect(
++ rect.x() + point.x(),
++ rect.y() + point.y(),
++ rect.width(),
++ rect.height() );
++ p->restore();
++#endif
++#endif
+ } else
+ QCommonStyle::drawPrimitive( pe, p, r, cg, flags, opt );
+ }
+Index: kdeui/kiconview.cpp
+===================================================================
+--- kdeui/kiconview.cpp.orig
++++ kdeui/kiconview.cpp
+@@ -548,7 +548,7 @@ void KIconViewItem::calcRect( const QStr
+ r = m_wordWrap->boundingRect();
+
+ int realWidth = QMAX( QMIN( r.width() + 4, tw ), fm->width( "X" ) );
+- itemTextRect.setWidth( realWidth );
++ itemTextRect.setWidth( realWidth + 4 );
+ itemTextRect.setHeight( r.height() );
+
+ int w = 0; int h = 0; int y = 0;
+@@ -699,11 +699,13 @@ void KIconViewItem::paintPixmap( QPainte
+
+ void KIconViewItem::paintText( QPainter *p, const QColorGroup &cg )
+ {
+- int textX = textRect( false ).x() + 2;
++ int textX = textRect( false ).x() + 4;
+ int textY = textRect( false ).y();
+
+ if ( isSelected() ) {
+- p->fillRect( textRect( false ), cg.highlight() );
++ p->setBrush(QBrush(cg.highlight()));
++ p->setPen(QPen(cg.highlight()));
++ p->drawRoundRect( textRect( false ) ,1000/textRect(false).width(),1000/textRect(false).height() );
+ p->setPen( QPen( cg.highlightedText() ) );
+ } else {
+ if ( iconView()->itemTextBackground() != NoBrush )
+Index: kdeui/kjanuswidget.cpp
+===================================================================
+--- kdeui/kjanuswidget.cpp.orig
++++ kdeui/kjanuswidget.cpp
+@@ -49,16 +49,19 @@ class KJanusWidget::IconListItem : publi
+ {
+ public:
+ IconListItem( QListBox *listbox, const QPixmap &pixmap,
+- const QString &text );
++ const QString &text );
+ virtual int height( const QListBox *lb ) const;
+ virtual int width( const QListBox *lb ) const;
+ int expandMinimumWidth( int width );
++ void highlight( bool erase );
+
+ protected:
+ const QPixmap &defaultPixmap();
+ void paint( QPainter *painter );
+-
++
+ private:
++ void paintContents( QPainter *painter );
++
+ QPixmap mPixmap;
+ int mMinimumWidth;
+ };
+@@ -141,6 +144,8 @@ KJanusWidget::KJanusWidget( QWidget *par
+
+ mIconList->verticalScrollBar()->installEventFilter( this );
+ connect( mIconList, SIGNAL(selectionChanged()), SLOT(slotShowPage()));
++ connect( mIconList, SIGNAL(onItem(QListBoxItem *)), SLOT(slotOnItem(QListBoxItem *)));
++
+ hbox->addSpacing( KDialog::marginHint() );
+ page = new QFrame( this );
+ hbox->addWidget( page, 10 );
+@@ -259,7 +264,7 @@ void KJanusWidget::slotReopen( QListView
+ }
+
+ QFrame *KJanusWidget::addPage( const QString &itemName, const QString &header,
+- const QPixmap &pixmap )
++ const QPixmap &pixmap )
+ {
+ QStringList items;
+ items << itemName;
+@@ -269,8 +274,8 @@ QFrame *KJanusWidget::addPage( const QSt
+
+
+ QVBox *KJanusWidget::addVBoxPage( const QStringList &items,
+- const QString &header,
+- const QPixmap &pixmap )
++ const QString &header,
++ const QPixmap &pixmap )
+ {
+ if( !mValid )
+ {
+@@ -721,6 +726,12 @@ void KJanusWidget::slotItemClicked(QList
+ it->setOpen(!it->isOpen());
+ }
+
++// hack because qt does not support Q_OBJECT in nested classes
++void KJanusWidget::slotOnItem(QListBoxItem *qitem)
++{
++ mIconList->slotOnItem( qitem );
++}
++
+ void KJanusWidget::setFocus()
+ {
+ if( !mValid ) { return; }
+@@ -929,11 +940,11 @@ bool KJanusWidget::eventFilter( QObject
+ KJanusWidget::IconListBox::IconListBox( QWidget *parent, const char *name,
+ WFlags f )
+ :KListBox( parent, name, f ), mShowAll(false), mHeightValid(false),
+- mWidthValid(false)
++ mWidthValid(false),
++ mOldItem(0)
+ {
+ }
+
+-
+ void KJanusWidget::IconListBox::updateMinimumHeight()
+ {
+ if( mShowAll && !mHeightValid )
+@@ -995,6 +1006,45 @@ void KJanusWidget::IconListBox::setShowA
+ }
+
+
++void KJanusWidget::IconListBox::leaveEvent( QEvent *ev )
++{
++ KListBox::leaveEvent( ev );
++
++ if ( mOldItem && !mOldItem->isSelected() )
++ {
++ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true );
++ mOldItem = 0;
++ }
++}
++
++// hack because qt does not support Q_OBJECT in nested classes
++void KJanusWidget::IconListBox::slotOnItem(QListBoxItem *qitem)
++{
++ KListBox::slotOnItem( qitem );
++
++ if ( qitem == mOldItem )
++ {
++ return;
++ }
++
++ if ( mOldItem && !mOldItem->isSelected() )
++ {
++ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true );
++ }
++
++ KJanusWidget::IconListItem *item = dynamic_cast< KJanusWidget::IconListItem * >( qitem );
++ if ( item && !item->isSelected() )
++ {
++ item->highlight( false );
++ mOldItem = item;
++ }
++ else
++ {
++ mOldItem = 0;
++ }
++}
++
++
+
+ KJanusWidget::IconListItem::IconListItem( QListBox *listbox, const QPixmap &pixmap,
+ const QString &text )
+@@ -1006,6 +1056,7 @@ KJanusWidget::IconListItem::IconListItem
+ mPixmap = defaultPixmap();
+ }
+ setText( text );
++ setCustomHighlighting( true );
+ mMinimumWidth = 0;
+ }
+
+@@ -1017,6 +1068,36 @@ int KJanusWidget::IconListItem::expandMi
+ }
+
+
++void KJanusWidget::IconListItem::highlight( bool erase )
++{
++ QRect r = listBox()->itemRect( this );
++ r.addCoords( 1, 1, -1, -1 );
++
++ QPainter p( listBox()->viewport() );
++ p.setClipRegion( r );
++
++ const QColorGroup &cg = listBox()->colorGroup();
++ if ( erase )
++ {
++ p.setPen( cg.base() );
++ p.setBrush( cg.base() );
++ p.drawRect( r );
++ }
++ else
++ {
++ p.setBrush( cg.highlight().light( 120 ) );
++ p.drawRect( r );
++
++ p.setPen( cg.highlight().dark( 140 ) );
++ p.drawRect( r );
++ }
++
++ p.setPen( cg.foreground() );
++ p.translate( r.x() - 1, r.y() - 1 );
++ paintContents( &p );
++}
++
++
+ const QPixmap &KJanusWidget::IconListItem::defaultPixmap()
+ {
+ static QPixmap *pix=0;
+@@ -1044,15 +1125,34 @@ const QPixmap &KJanusWidget::IconListIte
+
+ void KJanusWidget::IconListItem::paint( QPainter *painter )
+ {
++ QRect itemPaintRegion( listBox()->itemRect( this ) );
++ QRect r( 1, 1, itemPaintRegion.width() - 2, itemPaintRegion.height() - 2);
++
++ if ( isSelected() )
++ {
++ painter->eraseRect( r );
++
++ painter->save();
++ painter->setPen( listBox()->colorGroup().highlight().dark( 160 ) );
++ painter->drawRect( r );
++ painter->restore();
++ }
++
++ paintContents( painter );
++}
++
++
++void KJanusWidget::IconListItem::paintContents( QPainter *painter )
++{
+ QFontMetrics fm = painter->fontMetrics();
+ int ht = fm.boundingRect( 0, 0, 0, 0, Qt::AlignCenter, text() ).height();
+ int wp = mPixmap.width();
+ int hp = mPixmap.height();
++ painter->drawPixmap( (mMinimumWidth - wp) / 2, 5, mPixmap );
+
+- painter->drawPixmap( (mMinimumWidth-wp)/2, 5, mPixmap );
+ if( !text().isEmpty() )
+ {
+- painter->drawText( 0, hp+7, mMinimumWidth, ht, Qt::AlignCenter, text() );
++ painter->drawText( 1, hp + 7, mMinimumWidth - 2, ht, Qt::AlignCenter, text() );
+ }
+ }
+
+@@ -1082,6 +1182,7 @@ int KJanusWidget::IconListItem::width( c
+ void KJanusWidget::virtual_hook( int, void* )
+ { /*BASE::virtual_hook( id, data );*/ }
+
++
+ // TODO: In TreeList, if the last child of a node is removed, and there is no corrsponding widget for that node, allow the caller to
+ // delete the node.
+ void KJanusWidget::removePage( QWidget *page )
+@@ -1129,6 +1230,7 @@ void KJanusWidget::removePage( QWidget *
+ }
+ }
+
++
+ QString KJanusWidget::pageTitle(int index) const
+ {
+ if (!d || !d->mIntToTitle.contains(index))
+@@ -1137,6 +1239,7 @@ QString KJanusWidget::pageTitle(int inde
+ return d->mIntToTitle[index];
+ }
+
++
+ QWidget *KJanusWidget::pageWidget(int index) const
+ {
+ if (!d || !d->mIntToPage.contains(index))
+Index: kdeui/kjanuswidget.h
+===================================================================
+--- kdeui/kjanuswidget.h.orig
++++ kdeui/kjanuswidget.h
+@@ -71,6 +71,8 @@ class KDEUI_EXPORT KJanusWidget : public
+ private:
+ class IconListBox : public KListBox
+ {
++ friend class KJanusWidget;
++
+ public:
+ IconListBox( QWidget *parent=0, const char *name=0, WFlags f=0 );
+ void updateMinimumHeight();
+@@ -79,10 +81,15 @@ class KDEUI_EXPORT KJanusWidget : public
+ void invalidateWidth();
+ void setShowAll( bool showAll );
+
++ protected:
++ void slotOnItem( QListBoxItem *item );
++ virtual void leaveEvent( QEvent * );
++
+ private:
+ bool mShowAll;
+ bool mHeightValid;
+ bool mWidthValid;
++ QListBoxItem *mOldItem;
+ };
+
+ public:
+@@ -558,6 +565,8 @@ class KDEUI_EXPORT KJanusWidget : public
+ private slots:
+ bool slotShowPage();
+ void slotFontChanged();
++
++ void slotOnItem(QListBoxItem *item);
+ void slotItemClicked(QListViewItem *it);
+ void pageGone(QObject *obj); // signal from the added page's "destroyed" signal
+ void slotReopen(QListViewItem *item);
diff --git a/opensuse/tdelibs/show-distribution.diff b/opensuse/tdelibs/show-distribution.diff
new file mode 100644
index 000000000..6906ed0a4
--- /dev/null
+++ b/opensuse/tdelibs/show-distribution.diff
@@ -0,0 +1,21 @@
+Index: kdeui/kaboutdialog.cpp
+===================================================================
+--- kdeui/kaboutdialog.cpp.orig
++++ kdeui/kaboutdialog.cpp
+@@ -40,6 +40,7 @@
+ #include <kaboutdialog.h>
+ #include <kaboutdialog_private.h>
+ #include <kdebug.h>
++#include <config.h>
+
+ //MOC_SKIP_BEGIN
+ template class QPtrList<KAboutContributor>;
+@@ -702,7 +703,7 @@ void KAboutContainerBase::setProduct( co
+ kdDebug(291) << "no kapp" << endl;
+
+ const QString msg1 = i18n("%1 %2 (Using KDE %3)").arg(appName).arg(version).
+- arg(QString::fromLatin1(KDE_VERSION_STRING));
++ arg(QString::fromLatin1(KDE_VERSION_STRING) + " " + QString::fromLatin1(KDE_DISTRIBUTION_TEXT));
+ const QString msg2 = !year.isEmpty() ? i18n("%1 %2, %3").arg('').arg(year).
+ arg(author) : QString::fromLatin1("");
+
diff --git a/opensuse/tdelibs/silence.diff b/opensuse/tdelibs/silence.diff
new file mode 100644
index 000000000..7dbbbb997
--- /dev/null
+++ b/opensuse/tdelibs/silence.diff
@@ -0,0 +1,13 @@
+Index: kded/kbuildservicefactory.cpp
+===================================================================
+--- kded/kbuildservicefactory.cpp.orig
++++ kded/kbuildservicefactory.cpp
+@@ -158,7 +158,7 @@ KBuildServiceFactory::saveOfferList(QDat
+ KServiceType::Ptr serviceType = KServiceType::serviceType(*it);
+ if (!serviceType)
+ {
+- kdWarning() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl;
++ kdDebug() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl;
+ continue;
+ }
+ serviceTypes.append(serviceType);
diff --git a/opensuse/tdelibs/smooth-scrolling.diff b/opensuse/tdelibs/smooth-scrolling.diff
new file mode 100644
index 000000000..b369a6146
--- /dev/null
+++ b/opensuse/tdelibs/smooth-scrolling.diff
@@ -0,0 +1,267 @@
+Index: khtml/khtmlview.cpp
+===================================================================
+--- khtml/khtmlview.cpp.orig
++++ khtml/khtmlview.cpp
+@@ -151,6 +151,9 @@ public:
+
+ KHTMLViewPrivate()
+ : underMouse( 0 ), underMouseNonShared( 0 ), visibleWidgets( 107 )
++#ifndef NO_SMOOTH_SCROLL_HACK
++ , dx(0), dy(0), ddx(0), ddy(0), rdx(0), rdy(0), scrolling(false)
++#endif
+ {
+ #ifndef KHTML_NO_CARET
+ m_caretViewContext = 0;
+@@ -396,6 +399,17 @@ public:
+ short m_mouseScroll_byY;
+ QTimer *m_mouseScrollTimer;
+ QWidget *m_mouseScrollIndicator;
++#ifndef NO_SMOOTH_SCROLL_HACK
++ QTimer timer2;
++ int dx;
++ int dy;
++ // Step size * 16 and residual to avoid huge difference between 1px/step and 2px/step
++ int ddx;
++ int ddy;
++ int rdx;
++ int rdy;
++ bool scrolling;
++#endif
+ };
+
+ #ifndef QT_NO_TOOLTIP
+@@ -504,6 +518,11 @@ KHTMLView::KHTMLView( KHTMLPart *part, Q
+ init();
+
+ viewport()->show();
++#ifndef NO_SMOOTH_SCROLL_HACK
++#define timer timer2
++ connect(&d->timer, SIGNAL(timeout()), this, SLOT(scrollTick()));
++#undef timer
++#endif
+ }
+
+ KHTMLView::~KHTMLView()
+@@ -1544,7 +1563,7 @@ void KHTMLView::keyPressEvent( QKeyEvent
+ case Key_Down:
+ case Key_J:
+ if (!d->scrollTimerId || d->scrollSuspended)
+- scrollBy( 0, 10 );
++ scrollBy( 0, 10 * _ke->count() );
+ if (d->scrollTimerId)
+ d->newScrollTimer(this, 0);
+ break;
+@@ -1559,7 +1578,7 @@ void KHTMLView::keyPressEvent( QKeyEvent
+ case Key_Up:
+ case Key_K:
+ if (!d->scrollTimerId || d->scrollSuspended)
+- scrollBy( 0, -10 );
++ scrollBy( 0, -10 * _ke->count());
+ if (d->scrollTimerId)
+ d->newScrollTimer(this, 0);
+ break;
+@@ -1572,14 +1591,14 @@ void KHTMLView::keyPressEvent( QKeyEvent
+ case Key_Right:
+ case Key_L:
+ if (!d->scrollTimerId || d->scrollSuspended)
+- scrollBy( 10, 0 );
++ scrollBy( 10 * _ke->count(), 0 );
+ if (d->scrollTimerId)
+ d->newScrollTimer(this, 0);
+ break;
+ case Key_Left:
+ case Key_H:
+ if (!d->scrollTimerId || d->scrollSuspended)
+- scrollBy( -10, 0 );
++ scrollBy( -10 * _ke->count(), 0 );
+ if (d->scrollTimerId)
+ d->newScrollTimer(this, 0);
+ break;
+@@ -1712,8 +1731,16 @@ void KHTMLView::keyReleaseEvent(QKeyEven
+ d->scrollSuspendPreActivate = false;
+ if( _ke->key() == Key_Shift && d->scrollSuspendPreActivate && _ke->state() == Qt::ShiftButton
+ && !(KApplication::keyboardMouseState() & Qt::ShiftButton))
++ {
+ if (d->scrollTimerId)
+- d->scrollSuspended = !d->scrollSuspended;
++ {
++ d->scrollSuspended = !d->scrollSuspended;
++#ifndef NO_SMOOTH_SCROLL_HACK
++ if( d->scrollSuspended )
++ stopScrolling();
++#endif
++ }
++ }
+
+ if (d->accessKeysEnabled)
+ {
+@@ -3259,7 +3286,11 @@ void KHTMLView::viewportWheelEvent(QWhee
+ else
+ {
+ d->scrollBarMoved = true;
++#ifndef NO_SMOOTH_SCROLL_HACK
++ scrollViewWheelEvent( e );
++#else
+ QScrollView::viewportWheelEvent( e );
++#endif
+
+ QMouseEvent *tempEvent = new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1), QPoint(-1,-1), Qt::NoButton, e->state() );
+ emit viewportMouseMoveEvent ( tempEvent );
+@@ -4462,4 +4493,117 @@ void KHTMLView::moveCaretToLineEnd()
+
+ #endif // KHTML_NO_CARET
+
++#ifndef NO_SMOOTH_SCROLL_HACK
++#define timer timer2
++
++// All scrolls must be completed within 240ms of last keypress
++static const int SCROLL_TIME = 240;
++// Each step is 20 ms == 50 frames/second
++static const int SCROLL_TICK = 20;
++
++void KHTMLView::scrollBy(int dx, int dy)
++{
++ KConfigGroup cfg( KGlobal::config(), "KDE" );
++ if( !cfg.readBoolEntry( "SmoothScrolling", true )) {
++ QScrollView::scrollBy( dx, dy );
++ return;
++ }
++ // scrolling destination
++ int full_dx = d->dx + dx;
++ int full_dy = d->dy + dy;
++
++ // scrolling speed
++ int ddx = 0;
++ int ddy = 0;
++
++ int steps = SCROLL_TIME/SCROLL_TICK;
++
++ ddx = (full_dx*16)/steps;
++ ddy = (full_dy*16)/steps;
++
++ // don't go under 1px/step
++ if (ddx > 0 && ddx < 16) ddx = 16;
++ if (ddy > 0 && ddy < 16) ddy = 16;
++ if (ddx < 0 && ddx > -16) ddx = -16;
++ if (ddy < 0 && ddy > -16) ddy = -16;
++
++ d->dx = full_dx;
++ d->dy = full_dy;
++ d->ddx = ddx;
++ d->ddy = ddy;
++
++ if (!d->scrolling) {
++ scrollTick();
++ startScrolling();
++ }
++}
++
++void KHTMLView::scrollTick() {
++ if (d->dx == 0 && d->dy == 0) {
++ stopScrolling();
++ return;
++ }
++
++ int tddx = d->ddx + d->rdx;
++ int tddy = d->ddy + d->rdy;
++
++ int ddx = tddx / 16;
++ int ddy = tddy / 16;
++ d->rdx = tddx % 16;
++ d->rdy = tddy % 16;
++
++ if (d->dx > 0 && ddx > d->dx) ddx = d->dx;
++ else
++ if (d->dx < 0 && ddx < d->dx) ddx = d->dx;
++
++ if (d->dy > 0 && ddy > d->dy) ddy = d->dy;
++ else
++ if (d->dy < 0 && ddy < d->dy) ddy = d->dy;
++
++ d->dx -= ddx;
++ d->dy -= ddy;
++
++// QScrollView::setContentsPos( contentsX() + ddx, contentsY() + ddy);
++ kapp->syncX();
++ QScrollView::scrollBy(ddx, ddy);
++// Unaccelerated X can get seriously overloaded by scrolling and for some reason
++// will send KeyPress events only infrequently. This should help to reduce
++// the load.
++ kapp->syncX();
++}
++
++void KHTMLView::startScrolling()
++{
++ d->scrolling = true;
++ d->timer.start(SCROLL_TICK, false);
++}
++
++void KHTMLView::stopScrolling()
++{
++ d->timer.stop();
++ d->dx = d->dy = 0;
++ d->scrolling = false;
++}
++
++// Overloaded from QScrollView and QScrollBar
++void KHTMLView::scrollViewWheelEvent( QWheelEvent *e )
++{
++ int pageStep = verticalScrollBar()->pageStep();
++ int lineStep = verticalScrollBar()->lineStep();
++ int step = QMIN( QApplication::wheelScrollLines()*lineStep, pageStep );
++ if ( ( e->state() & ControlButton ) || ( e->state() & ShiftButton ) )
++ step = pageStep;
++
++ if(e->orientation() == Horizontal)
++ scrollBy(-((e->delta()*step)/120), 0);
++ else if(e->orientation() == Vertical)
++ scrollBy(0,-((e->delta()*step)/120));
++
++ e->accept();
++}
++
++#undef timer
++
++#endif // NO_SMOOTH_SCROLL_HACK
++
+ #undef DEBUG_CARETMODE
+Index: khtml/khtmlview.h
+===================================================================
+--- khtml/khtmlview.h.orig
++++ khtml/khtmlview.h
+@@ -181,6 +181,11 @@ signals:
+ void hideAccessKeys();
+ void repaintAccessKeys();
+ void findAheadActive( bool );
++//#define NO_SMOOTH_SCROLL_HACK
++#ifndef NO_SMOOTH_SCROLL_HACK
++public slots:
++ void scrollBy(int dx, int dy);
++#endif
+
+ protected:
+ void clear();
+@@ -211,9 +216,23 @@ protected:
+ void contentsContextMenuEvent ( QContextMenuEvent *_ce );
+ void doAutoScroll();
+ void timerEvent ( QTimerEvent * );
++
++#ifndef NO_SMOOTH_SCROLL_HACK
++ void startScrolling();
++ void stopScrolling();
++#ifndef QT_NO_WHEELEVENT
++ void scrollViewWheelEvent( QWheelEvent* e );
++#endif
++#endif
++
+ protected slots:
+ void slotPaletteChanged();
+ void slotScrollBarMoved();
++#ifndef NO_SMOOTH_SCROLL_HACK
++ void scrollTick();
++#else
++ void scrollTick() {}; // moc cannot handle #if
++#endif
+
+ private slots:
+ void tripleClickTimeout();
diff --git a/opensuse/tdelibs/spellcheck-default-utf8.diff b/opensuse/tdelibs/spellcheck-default-utf8.diff
new file mode 100644
index 000000000..e663bdc69
--- /dev/null
+++ b/opensuse/tdelibs/spellcheck-default-utf8.diff
@@ -0,0 +1,26 @@
+Index: kdeui/ksconfig.cpp
+===================================================================
+--- kdeui/ksconfig.cpp.orig
++++ kdeui/ksconfig.cpp
+@@ -187,7 +187,7 @@ KSpellConfig::readGlobalSettings()
+ setRunTogether ( kc->readNumEntry("KSpell_RunTogether", 0) );
+ setDictionary ( kc->readEntry("KSpell_Dictionary") );
+ setDictFromList ( kc->readNumEntry("KSpell_DictFromList", false) );
+- setEncoding ( kc->readNumEntry ("KSpell_Encoding", KS_E_ASCII) );
++ setEncoding ( kc->readNumEntry ("KSpell_Encoding", KS_E_UTF8) );
+ setClient ( kc->readNumEntry ("KSpell_Client", KS_CLIENT_ISPELL) );
+
+ return true;
+Index: kdeui/ksyntaxhighlighter.cpp
+===================================================================
+--- kdeui/ksyntaxhighlighter.cpp.orig
++++ kdeui/ksyntaxhighlighter.cpp
+@@ -551,7 +551,7 @@ QString KDictSpellingHighlighter::spellK
+ key += '/';
+ key += QString::number( config->readNumEntry( "KSpell_DictFromList", false ));
+ key += '/';
+- key += QString::number( config->readNumEntry( "KSpell_Encoding", KS_E_ASCII ));
++ key += QString::number( config->readNumEntry( "KSpell_Encoding", KS_E_UTF8 ));
+ key += '/';
+ key += QString::number( config->readNumEntry( "KSpell_Client", KS_CLIENT_ISPELL ));
+ return key;
diff --git a/opensuse/tdelibs/stat-on-media.diff b/opensuse/tdelibs/stat-on-media.diff
new file mode 100644
index 000000000..c8f25a9c8
--- /dev/null
+++ b/opensuse/tdelibs/stat-on-media.diff
@@ -0,0 +1,14 @@
+Index: kio/kio/kdirwatch.cpp
+===================================================================
+--- kio/kio/kdirwatch.cpp.orig
++++ kio/kio/kdirwatch.cpp
+@@ -743,7 +743,8 @@ bool KDirWatchPrivate::useINotify( Entry
+
+ bool KDirWatchPrivate::useStat(Entry* e)
+ {
+- if (KIO::probably_slow_mounted(e->path))
++ if ( e->path.startsWith("/media/") || (e->path == "/media")
++ || (KIO::probably_slow_mounted(e->path)) )
+ useFreq(e, m_nfsPollInterval);
+ else
+ useFreq(e, m_PollInterval);
diff --git a/opensuse/tdelibs/tdelibs-devel-doc.changes b/opensuse/tdelibs/tdelibs-devel-doc.changes
new file mode 100644
index 000000000..91e32f703
--- /dev/null
+++ b/opensuse/tdelibs/tdelibs-devel-doc.changes
@@ -0,0 +1,2956 @@
+-------------------------------------------------------------------
+Wed Aug 20 18:43:12 CEST 2008 - coolo@suse.de
+
+- update to KDE 3.5.10
+ * translation updates
+ * bugfixes
+ * desktop files validate
+
+-------------------------------------------------------------------
+Mon Nov 5 14:46:16 CET 2007 - dmueller@suse.de
+
+- remove nosource tag
+
+-------------------------------------------------------------------
+Tue Oct 9 10:53:20 CEST 2007 - stbinner@suse.de
+
+- update to KDE 3.5.8
+
+-------------------------------------------------------------------
+Wed May 23 13:54:36 CEST 2007 - stbinner@suse.de
+
+- use %fdupes
+
+-------------------------------------------------------------------
+Mon May 14 22:13:16 CEST 2007 - stbinner@suse.de
+
+- update to KDE 3.5.7
+
+-------------------------------------------------------------------
+Tue Oct 3 10:23:35 CEST 2006 - stbinner@suse.de
+
+- update to KDE 3.5.5
+
+-------------------------------------------------------------------
+Sun Jul 23 21:32:19 CEST 2006 - coolo@suse.de
+
+- update to KDE 3.5.4
+
+-------------------------------------------------------------------
+Mon May 29 09:39:14 CEST 2006 - stbinner@suse.de
+
+- fix build of kdelibs3-devel-doc
+
+-------------------------------------------------------------------
+Wed May 24 09:53:23 CEST 2006 - stbinner@suse.de
+
+- update to KDE 3.5.3
+
+-------------------------------------------------------------------
+Mon Mar 20 13:31:55 CET 2006 - stbinner@suse.de
+
+- update to KDE 3.5.2
+
+-------------------------------------------------------------------
+Tue Mar 7 12:21:56 CET 2006 - coolo@suse.de
+
+- require qt3-devel-doc
+
+-------------------------------------------------------------------
+Wed Mar 1 09:52:03 CET 2006 - coolo@suse.de
+
+- point apidox.sh to the right Qt location (#135850)
+
+-------------------------------------------------------------------
+Fri Jan 27 01:55:42 CET 2006 - mls@suse.de
+
+- converted neededforbuild to BuildRequires
+
+-------------------------------------------------------------------
+Sat Jan 21 20:23:19 CET 2006 - coolo@suse.de
+
+- update to KDE 3.5.1
+
+-------------------------------------------------------------------
+Wed Dec 21 14:57:44 CET 2005 - dmueller@suse.de
+
+- merge with kdelibs3 source dir
+
+-------------------------------------------------------------------
+Mon Dec 19 16:49:10 CET 2005 - dmueller@suse.de
+
+- fix file list
+
+-------------------------------------------------------------------
+Mon Nov 28 14:18:52 CET 2005 - dmueller@suse.de
+
+- update to 3.5.0
+
+-------------------------------------------------------------------
+Mon Nov 21 15:14:45 CET 2005 - stbinner@suse.de
+
+- update to 3.5 RC 2
+
+-------------------------------------------------------------------
+Tue Nov 15 11:17:33 CET 2005 - dmueller@suse.de
+
+- hack to avoid a kdelibs3 update today
+
+-------------------------------------------------------------------
+Mon Nov 14 11:23:56 CET 2005 - dmueller@suse.de
+
+- update to 3.5.0
+
+-------------------------------------------------------------------
+Fri Oct 14 18:59:10 CEST 2005 - dmueller@suse.de
+
+- update to 3.4.92
+
+-------------------------------------------------------------------
+Thu Sep 29 16:54:50 CEST 2005 - coolo@suse.de
+
+- simplifying build a lot
+
+-------------------------------------------------------------------
+Wed Sep 28 13:36:53 CEST 2005 - dmueller@suse.de
+
+- fix build
+
+-------------------------------------------------------------------
+Tue Sep 27 15:20:28 CEST 2005 - dmueller@suse.de
+
+- fix build on 64 bit platforms
+
+-------------------------------------------------------------------
+Tue Sep 27 13:42:22 CEST 2005 - dmueller@suse.de
+
+- and again..
+
+-------------------------------------------------------------------
+Tue Sep 27 02:49:09 CEST 2005 - ro@suse.de
+
+- fix build again
+
+-------------------------------------------------------------------
+Sat Sep 24 12:31:03 CEST 2005 - dmueller@suse.de
+
+- build..
+
+-------------------------------------------------------------------
+Fri Sep 23 19:27:46 CEST 2005 - dmuelle@suse.de
+
+- fixed typo in specfile
+
+-------------------------------------------------------------------
+Fri Sep 23 15:17:49 CEST 2005 - dmueller@suse.de
+
+- update to 3.4.91
+
+-------------------------------------------------------------------
+Mon Sep 12 13:24:55 CEST 2005 - dmueller@suse.de
+
+- Fix /opt/kde3/share/doc/HTML/en/common/* conflicts
+
+-------------------------------------------------------------------
+Sat Sep 10 18:25:34 CEST 2005 - aj@suse.de
+
+- Remove wrong requires/provides/obsoletes.
+
+-------------------------------------------------------------------
+Sat Sep 10 10:52:48 CEST 2005 - aj@suse.de
+
+- Fix package build.
+
+-------------------------------------------------------------------
+Fri Sep 9 16:45:30 CEST 2005 - dmueller@suse.de
+
+- split kdelibs3 into a noarch subpackage devel-docs
+
+-------------------------------------------------------------------
+Thu Sep 8 13:05:04 CEST 2005 - bg@suse.de
+
+- disable --as-needed for hppa (does not build with that option)
+
+-------------------------------------------------------------------
+Thu Sep 8 08:04:42 CEST 2005 - coolo@suse.de
+
+- let the icon loader find the suse specials independent on the theme
+ (#115139 and others)
+
+-------------------------------------------------------------------
+Wed Sep 7 21:37:08 CEST 2005 - dmueller@suse.de
+
+- fix kwallet wizard being 3000px in size (#114954)
+
+-------------------------------------------------------------------
+Wed Sep 7 19:52:20 CEST 2005 - dmueller@suse.de
+
+- fix kpdf embedding crashes (#114724)
+- add forgotten patch for mozilla/dragonegg integration
+
+-------------------------------------------------------------------
+Wed Sep 7 16:05:58 CEST 2005 - dmueller@suse.de
+
+- improve TIFF detection (#114319)
+
+-------------------------------------------------------------------
+Tue Sep 6 19:53:03 CEST 2005 - dmueller@suse.de
+
+- fix JPEG2000 support in KImgio (#115324)
+
+-------------------------------------------------------------------
+Tue Aug 23 15:35:24 CEST 2005 - coolo@suse.de
+
+- add mimetype for OOo base (#72285)
+
+-------------------------------------------------------------------
+Tue Aug 23 13:26:36 CEST 2005 - coolo@suse.de
+
+- don't play around with xauth when the host name changes
+ (#98627)
+
+-------------------------------------------------------------------
+Tue Aug 23 03:54:04 CEST 2005 - dmueller@suse.de
+
+- fix novell.com language selector (#106008)
+
+-------------------------------------------------------------------
+Mon Aug 22 14:20:42 CEST 2005 - coolo@suse.de
+
+- don't put libkdeinit_*.so in -devel
+
+-------------------------------------------------------------------
+Sun Aug 21 11:42:34 CEST 2005 - coolo@suse.de
+
+- update from 3.4 branch to fix endless kio_http loop
+- fix DPMS check in admin (broke with --enable-new-ldflags)
+
+-------------------------------------------------------------------
+Sat Aug 20 16:06:01 CEST 2005 - coolo@suse.de
+
+- update from 3.4 branch
+- pleasing the libtool check
+
+-------------------------------------------------------------------
+Fri Aug 19 14:12:41 CEST 2005 - adrian@suse.de
+
+- fix endless loop, if no KDEMM backend can get found (#105772)
+
+-------------------------------------------------------------------
+Fri Aug 19 10:22:14 CEST 2005 - llunak@suse.cz
+
+- Fix QXEmbed to have focus working properly in yast+kcontrol
+ (#46495).
+
+-------------------------------------------------------------------
+Thu Aug 18 17:15:40 CEST 2005 - adrian@suse.de
+
+- do not use KLIRRRRR sound on popular request ...
+
+-------------------------------------------------------------------
+Thu Aug 18 10:18:54 CEST 2005 - coolo@suse.de
+
+- extend kde_post_install of common_options
+
+-------------------------------------------------------------------
+Wed Aug 17 16:20:44 CEST 2005 - adrian@suse.de
+
+- move arts dependency to -arts package
+- clean up really all SimplePlayers in knotify, might cause a crash
+ which needs to be debugged
+
+-------------------------------------------------------------------
+Mon Aug 15 04:25:38 CEST 2005 - dmueller@suse.de
+
+- fix horizontal scrolling in KHTML broken by the smooth scrolling
+ patch (#76565).
+
+-------------------------------------------------------------------
+Sat Aug 13 16:03:17 CEST 2005 - adrian@suse.de
+
+- fix memory/handle leak in knotify while playing sound via kdemm
+ knotify can still hang, if all alsa channels are used. (#97588)
+- install icons for BitTorrent MimeType
+
+-------------------------------------------------------------------
+Thu Aug 11 15:58:43 CEST 2005 - coolo@suse.de
+
+- removing all of the extraicons patch, it doesn't work at all anymore
+ so we need a new solution (also #85839 I guess)
+- updated 3.4 branch to get a fix for a crashing dcopserver and
+ hanging mounts (#102564)
+
+-------------------------------------------------------------------
+Thu Aug 4 13:33:12 CEST 2005 - sbrabec@suse.cz
+
+- Removed share/pixmaps links from crystalsvg (#85839).
+
+-------------------------------------------------------------------
+Mon Aug 1 18:37:53 CEST 2005 - coolo@suse.de
+
+- 3.4 update replacing custom patches
+
+-------------------------------------------------------------------
+Fri Jul 29 17:31:21 CEST 2005 - dmueller@suse.de
+
+- Update admin tarball to include -Wno-non-virtual-dtor flag
+- Fix PIE detection (#98889)
+- Fix visibility support
+
+-------------------------------------------------------------------
+Tue Jul 26 11:45:19 CEST 2005 - llunak@suse.cz
+
+- Fix #96594 (knotify logout timeout)
+
+-------------------------------------------------------------------
+Fri Jul 22 10:51:28 CEST 2005 - coolo@suse.de
+
+- update to version 3.4.2
+
+-------------------------------------------------------------------
+Mon May 30 16:19:20 CEST 2005 - adrian@suse.de
+
+- fix build for released distributions
+
+-------------------------------------------------------------------
+Tue May 24 11:54:02 CEST 2005 - adrian@suse.de
+
+- update to version 3.4.1
+- set level back to "a"
+
+-------------------------------------------------------------------
+Fri May 13 21:49:46 CEST 2005 - coolo@suse.de
+
+- init variable
+
+-------------------------------------------------------------------
+Tue Apr 19 10:21:55 CEST 2005 - coolo@suse.de
+
+- update admin for gcc4
+
+-------------------------------------------------------------------
+Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz
+
+- Added audiofile-devel to neededforbuild.
+
+-------------------------------------------------------------------
+Thu Apr 14 12:07:18 CEST 2005 - adrian@suse.de
+
+- update to current 3_4_BRANCH
+ * parallel build order fix
+- do not export kdemm video player api, it will not get any
+ implementation in this way
+
+-------------------------------------------------------------------
+Wed Apr 13 11:34:45 CEST 2005 - adrian@suse.de
+
+- update to current 3_4_BRANCH
+- increase patch Level to "c"
+- export kdemm mixer interface
+
+-------------------------------------------------------------------
+Fri Apr 8 11:46:38 CEST 2005 - adrian@suse.de
+
+- port kfilepreview to kdemm
+- extra arts subpackages, aRts is optional now !
+- add DNS resolver fix from 3_4_BRANCH
+
+-------------------------------------------------------------------
+Mon Apr 4 14:42:49 CEST 2005 - adrian@suse.de
+
+- add missing #include to fix compile of kdemm players
+
+-------------------------------------------------------------------
+Mon Apr 4 11:01:08 CEST 2005 - coolo@suse.de
+
+- enable features for new ld
+
+-------------------------------------------------------------------
+Fri Apr 1 11:54:56 CEST 2005 - adrian@suse.de
+
+- fix build with gcc 4, exporting kdemm classes
+
+-------------------------------------------------------------------
+Thu Mar 31 13:46:09 CEST 2005 - adrian@suse.de
+
+- first steps to make arts optional:
+ * add experimental kdemm support for post 9.3
+ * use kdemm instead of arts in knotify
+ * TODO: port kfileaudiopreview to kdemm
+- do not overrule CFLAGS from spec files
+
+-------------------------------------------------------------------
+Wed Mar 30 16:10:39 CEST 2005 - coolo@suse.de
+
+- disable visibility when compiled with debug (for testkhtml)
+
+-------------------------------------------------------------------
+Mon Mar 28 18:46:22 CEST 2005 - schwab@suse.de
+
+- common_options: also set CFLAGS.
+
+-------------------------------------------------------------------
+Sat Mar 19 14:54:24 CET 2005 - aj@suse.de
+
+- Integrate patch from Waldo Bastian for #71888 to fix
+ accessing of Netscape bookmarks in konqueror.
+
+-------------------------------------------------------------------
+Fri Mar 18 13:40:41 CET 2005 - adrian@suse.de
+
+- fix aspell support
+- fixes from 3_4_BRANCH
+ * toolbar configuration fix (#73662)
+ * IPv6 blacklist io-slave fix
+ * a khtml crash fix with innerweb
+ * redirection fix to uppercase written top level domains
+
+-------------------------------------------------------------------
+Tue Mar 15 13:30:48 CET 2005 - adrian@suse.de
+
+- fix kspell recursion, visible in kbabel (#72773 by Waldo)
+
+-------------------------------------------------------------------
+Mon Mar 14 15:32:48 CET 2005 - coolo@suse.de
+
+- take susetranslations.mo into account for translations
+
+-------------------------------------------------------------------
+Mon Mar 14 14:01:15 CET 2005 - coolo@suse.de
+
+- fix smoothscrolling patch (Lubos)
+- adding some more kate fixes from branch
+
+-------------------------------------------------------------------
+Fri Mar 11 14:55:14 CET 2005 - coolo@suse.de
+
+- some more fixes from 3_4_BRANCH
+
+-------------------------------------------------------------------
+Tue Mar 8 13:47:31 CET 2005 - adrian@suse.de
+
+- various updates from cvs
+ * missing kate initialising (Lubos)
+ * kcmmodule crash fixed (Waldo)
+ * khtml fixes
+
+-------------------------------------------------------------------
+Mon Mar 7 16:55:17 CET 2005 - adrian@suse.de
+
+- fix progress bar (from KDE cvs)
+
+-------------------------------------------------------------------
+Mon Mar 7 14:32:27 CET 2005 - coolo@suse.de
+
+- add fix for broken webdav URLs (#59203)
+
+-------------------------------------------------------------------
+Sat Mar 5 10:19:48 CET 2005 - adrian@suse.de
+
+- fixes from KDE cvs:
+ * support Netware based ftp servers in kio_ftp
+ * fix proxy socks support
+
+-------------------------------------------------------------------
+Sat Mar 5 09:22:49 CET 2005 - adrian@suse.de
+
+- update to version 3.4 final (not final try)
+
+-------------------------------------------------------------------
+Wed Mar 2 10:01:46 CET 2005 - adrian@suse.de
+
+- update scrollview patch to BC version
+- move Requires: kdelibs3_doc to kdebase3
+
+-------------------------------------------------------------------
+Sat Feb 26 10:34:21 CET 2005 - adrian@suse.de
+
+- update to 3.4.0 RC1
+
+-------------------------------------------------------------------
+Thu Feb 24 13:16:10 CET 2005 - adrian@suse.de
+
+- update to version 3.4.0 RC1 try 1
+
+-------------------------------------------------------------------
+Tue Feb 22 16:51:01 CET 2005 - adrian@suse.de
+
+- update to current CVS
+- add soft scrolling patch from Allan Sandfeld
+
+-------------------------------------------------------------------
+Tue Feb 22 10:47:34 CET 2005 - adrian@suse.de
+
+- remove secure ICE patch again, it is part of CVS now
+
+-------------------------------------------------------------------
+Mon Feb 21 11:26:34 CET 2005 - adrian@suse.de
+
+- update to current CVS
+
+-------------------------------------------------------------------
+Fri Feb 18 11:18:03 CET 2005 - adrian@suse.de
+
+- update to current CVS
+
+-------------------------------------------------------------------
+Wed Feb 16 17:53:31 CET 2005 - adrian@suse.de
+
+- remove floppy:/ from file dialog again, media:/ is enough
+
+-------------------------------------------------------------------
+Mon Feb 14 14:41:13 CET 2005 - adrian@suse.de
+
+- update from CVS
+- add rubberband patch from Andre Moreira Magalhaes, disabled by
+ default
+
+-------------------------------------------------------------------
+Mon Feb 14 11:49:33 CET 2005 - adrian@suse.de
+
+- make it possible to disable IDN support via KDE_NO_IDN enviroment
+ variable
+
+-------------------------------------------------------------------
+Sun Feb 13 10:26:22 CET 2005 - coolo@suse.de
+
+- fix do_make -j15
+
+-------------------------------------------------------------------
+Fri Feb 11 10:29:44 CET 2005 - adrian@suse.de
+
+- update from CVS
+
+-------------------------------------------------------------------
+Wed Feb 9 15:57:01 CET 2005 - adrian@suse.de
+
+- apply patch from Waldo to set ICE sockets to 0700 permissions
+
+-------------------------------------------------------------------
+Mon Feb 7 11:28:36 CET 2005 - adrian@suse.de
+
+- update to beta 2
+
+-------------------------------------------------------------------
+Sat Jan 29 10:59:09 CET 2005 - coolo@suse.de
+
+- fix --no-unsermake
+
+-------------------------------------------------------------------
+Fri Jan 28 16:53:21 CET 2005 - meissner@suse.de
+
+- removed setuid root binary kgrantpty which is not needed
+ since 8.1...
+
+-------------------------------------------------------------------
+Fri Jan 28 15:11:47 CET 2005 - adrian@suse.de
+
+- update to current snapshot
+- use external unsermake now
+
+-------------------------------------------------------------------
+Tue Jan 25 15:41:07 CET 2005 - adrian@suse.de
+
+- adapt file dialog for media slave and remove floppy icon
+
+-------------------------------------------------------------------
+Mon Jan 24 21:05:47 CET 2005 - coolo@suse.de
+
+- update to current snapshot (for testkhtml)
+
+-------------------------------------------------------------------
+Thu Jan 20 16:53:31 CET 2005 - adrian@suse.de
+
+- update to current snapshot
+
+-------------------------------------------------------------------
+Sat Jan 15 21:05:52 CET 2005 - schwab@suse.de
+
+- Use <owner>:<group> in permissions file.
+
+-------------------------------------------------------------------
+Fri Jan 14 14:58:39 CET 2005 - adrian@suse.de
+
+- update to current HEAD
+- disable limit-image-size patch, since it got also disabled in qt
+
+-------------------------------------------------------------------
+Thu Jan 13 15:05:49 CET 2005 - coolo@suse.de
+
+- update to HEAD to get kdebase HEAD compiled
+
+-------------------------------------------------------------------
+Mon Jan 10 11:56:08 CET 2005 - adrian@suse.de
+
+- fix kprinter.h header, this fixes the build of kdebindings
+
+-------------------------------------------------------------------
+Mon Jan 10 09:37:17 CET 2005 - coolo@suse.de
+
+- fix permissions of do_make
+
+-------------------------------------------------------------------
+Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de
+
+- final 3.4 beta 1
+
+-------------------------------------------------------------------
+Tue Jan 4 11:49:56 CET 2005 - coolo@suse.de
+
+- update to 3.4 beta 1 (first snapshot)
+
+-------------------------------------------------------------------
+Fri Dec 17 09:24:58 CET 2004 - coolo@suse.de
+
+- let -Wl, pass in $LDFLAGS
+- fix quoting in make wrapper
+
+-------------------------------------------------------------------
+Thu Dec 16 21:32:19 CET 2004 - hvogel@suse.de
+
+- change icon to about_kde. go comes from another package and
+ we dont want kdelibs require kdebase
+
+-------------------------------------------------------------------
+Wed Dec 15 12:44:48 CET 2004 - coolo@suse.de
+
+- make the unsermake/automake switch more clever
+
+-------------------------------------------------------------------
+Tue Dec 14 11:11:05 CET 2004 - coolo@suse.de
+
+- fix unsermake $PATH for packages that build several sources
+
+-------------------------------------------------------------------
+Mon Dec 13 14:56:19 CET 2004 - coolo@suse.de
+
+- remove debug flag from configure
+- replaced unsermake with latest greatest
+
+-------------------------------------------------------------------
+Wed Dec 8 13:25:36 CET 2004 - adrian@suse.de
+
+- update to official 3.4 alpha 1
+
+-------------------------------------------------------------------
+Mon Dec 6 15:17:54 CET 2004 - adrian@suse.de
+
+- update to KDE head snapshot
+
+-------------------------------------------------------------------
+Fri Dec 3 15:19:22 CET 2004 - adrian@suse.de
+
+- update to the final tar bal of 3.3.2
+
+-------------------------------------------------------------------
+Mon Nov 29 20:29:55 CET 2004 - adrian@suse.de
+
+- update to version 3.3.2
+
+-------------------------------------------------------------------
+Fri Nov 26 15:57:47 CET 2004 - adrian@suse.de
+
+- extend KDE_VERSION_STRING with extra Level information to tell
+ information about applied patches
+- extend distribution string with distribution version
+- show distribution version in about dialog
+
+-------------------------------------------------------------------
+Thu Nov 25 11:44:39 CET 2004 - adrian@suse.de
+
+- correct gnome icon path to hicolor
+
+-------------------------------------------------------------------
+Wed Nov 24 13:49:09 CET 2004 - adrian@suse.de
+
+- accept also Python 2.4 in configure checks
+
+-------------------------------------------------------------------
+Thu Nov 18 15:38:38 CET 2004 - ro@suse.de
+
+- use kerberos-devel-packages
+
+-------------------------------------------------------------------
+Mon Nov 15 15:37:37 CET 2004 - adrian@suse.de
+
+- include /opt/kde3/share/icons/crystalsvg/22x22/apps path
+
+-------------------------------------------------------------------
+Wed Nov 10 12:52:20 CET 2004 - ro@suse.de
+
+- permission handling fixes
+
+-------------------------------------------------------------------
+Wed Nov 10 11:14:50 CET 2004 - coolo@suse.de
+
+- moving khtml 3.3 diff in a seperate diff (now that the 3.3 branch
+ contains a lot of updates for it)
+
+-------------------------------------------------------------------
+Mon Nov 8 16:33:07 CET 2004 - coolo@suse.de
+
+- renable patch to limit image size (#43841)
+
+-------------------------------------------------------------------
+Wed Nov 3 15:19:43 CET 2004 - coolo@suse.de
+
+- updated khtml again to fix compilation problem with gcc 4
+
+-------------------------------------------------------------------
+Wed Nov 3 11:12:57 CET 2004 - coolo@suse.de
+
+- use HTML rendering engine from CVS head (preparing backport for
+ 3.3.2)
+
+-------------------------------------------------------------------
+Tue Oct 12 11:25:02 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.1
+
+-------------------------------------------------------------------
+Wed Oct 6 14:30:24 CEST 2004 - adrian@suse.de
+
+- fix crash in libkabc, when importing an ldif file (#46882)
+
+-------------------------------------------------------------------
+Tue Oct 5 10:17:05 CEST 2004 - adrian@suse.de
+
+- do also find gnome pages when using "en_*" locale, instead of
+ "C" or "en" (#45480)
+
+-------------------------------------------------------------------
+Sat Oct 2 08:40:00 CEST 2004 - adrian@suse.de
+
+- try to avoid klauncher registration with a wrong dcop name.
+ this can happen, if two KDE application gets started at the
+ same time, without having running kdeinit before.
+ patch by Waldo and solves problems in Gnome hopefully (#46355)
+- khtml rendering fix for nvidia.com
+
+-------------------------------------------------------------------
+Fri Oct 1 16:58:11 CEST 2004 - adrian@suse.de
+
+- fix html frame parent problem, fixes www.map24.de (#44156)
+
+-------------------------------------------------------------------
+Thu Sep 30 09:09:07 CEST 2004 - adrian@suse.de
+
+- fix nasty error startup messages
+- fix two minor javascript bugs
+- fix Netscape bookmarks wrapping (by Waldo, #45917)
+
+-------------------------------------------------------------------
+Sun Sep 26 18:04:31 CEST 2004 - adrian@suse.de
+
+- update to current 3_3_BRANCH
+ * translation updates
+ * kpart handling fixes
+
+-------------------------------------------------------------------
+Mon Sep 20 10:07:28 CEST 2004 - adrian@suse.de
+
+- update to current 3_3_BRANCH
+- add fix for KDE file dialog on 64bit
+ (crash when called by 32bit application, by Waldo #44995)
+
+-------------------------------------------------------------------
+Thu Sep 16 17:11:22 CEST 2004 - adrian@suse.de
+
+- use kwallet fix from Arvin
+ (update external hash keys immediatly #43973)
+
+-------------------------------------------------------------------
+Wed Sep 15 17:18:45 CEST 2004 - adrian@suse.de
+
+- disable kwallet fix, it is known to create a memory leak
+
+-------------------------------------------------------------------
+Tue Sep 14 15:23:11 CEST 2004 - adrian@suse.de
+
+- update to current branch
+ * khtml fixes
+
+-------------------------------------------------------------------
+Fri Sep 10 13:47:48 CEST 2004 - adrian@suse.de
+
+- update to current branch
+- apply fix for kwallet from HEAD, needed for kinternet
+
+-------------------------------------------------------------------
+Tue Sep 7 11:28:30 CEST 2004 - adrian@suse.de
+
+- update to current BRANCH
+- more silence during kbuildsycoca run
+- disable default unsermake in beta
+- remove mad from nfb
+
+-------------------------------------------------------------------
+Fri Sep 3 17:29:22 CEST 2004 - coolo@suse.de
+
+- fixing the fix ;(
+
+-------------------------------------------------------------------
+Fri Sep 3 14:20:15 CEST 2004 - coolo@suse.de
+
+- unsermake: do not remove the .deps file before regenerating it to
+ avoid make races
+
+-------------------------------------------------------------------
+Mon Aug 30 08:36:57 CEST 2004 - adrian@suse.de
+
+- compile with explicit --disable-debug to get rid off asserts
+
+-------------------------------------------------------------------
+Sat Aug 28 08:22:23 CEST 2004 - adrian@suse.de
+
+- update to current BRANCH
+- add gnome help page support for khelpcenter(by clahey, #44061)
+
+-------------------------------------------------------------------
+Mon Aug 23 16:31:13 CEST 2004 - adrian@suse.de
+
+- disable patch to limit image sizes in khtml, it causes crashes
+ atm
+
+-------------------------------------------------------------------
+Fri Aug 20 13:02:26 CEST 2004 - adrian@suse.de
+
+- update to current 3_3_BRANCH
+- add patch from clahey to support gnome help pages better in khelpcenter
+
+-------------------------------------------------------------------
+Wed Aug 18 12:15:58 CEST 2004 - adrian@suse.de
+
+- move debug mode switch to common_options
+
+-------------------------------------------------------------------
+Tue Aug 17 08:12:49 CEST 2004 - adrian@suse.de
+
+- add patch from Waldo to make it possible to limit the max image
+ size within QImage. (#43841)
+
+-------------------------------------------------------------------
+Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.0 final
+
+-------------------------------------------------------------------
+Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.0 final
+- use "make compile"
+
+-------------------------------------------------------------------
+Fri Aug 13 10:37:43 CEST 2004 - coolo@suse.de
+
+- removed 3_2_BRANCH.diff
+- build with unsermake
+
+-------------------------------------------------------------------
+Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.0 RC2
+- split doc tools into subpackage to make it possible to use
+ a different theming for special products
+
+-------------------------------------------------------------------
+Mon Aug 2 09:21:16 CEST 2004 - adrian@suse.de
+
+- accept automake 1.9
+
+-------------------------------------------------------------------
+Mon Jul 19 10:35:33 CEST 2004 - adrian@suse.de
+
+- update to version 3.2.92 (KDE 3.3 beta 2)
+
+-------------------------------------------------------------------
+Tue Jun 29 12:01:28 CEST 2004 - adrian@suse.de
+
+- do not remove .cpp/.h files, if they are not really generated
+ by uic
+
+-------------------------------------------------------------------
+Mon Jun 28 22:32:49 CEST 2004 - adrian@suse.de
+
+- enable OpenEXR support
+
+-------------------------------------------------------------------
+Mon Jun 28 09:30:57 CEST 2004 - adrian@suse.de
+
+- update to version 3.3 beta 1
+ * usual patch cleanup
+
+-------------------------------------------------------------------
+Mon May 31 20:29:40 CEST 2004 - adrian@suse.de
+
+- update to version 3.2.3
+ * remove obsolete patches
+
+-------------------------------------------------------------------
+Wed May 12 09:21:00 CEST 2004 - adrian@suse.de
+
+- update user_profile patch
+- add 3.3 button layout patch
+
+-------------------------------------------------------------------
+Thu Apr 29 08:59:13 CEST 2004 - coolo@suse.de
+
+- let unsermake rewrite install rules with $DESTDIR
+- use unsermake for kdelibs and parallel build
+
+-------------------------------------------------------------------
+Sat Apr 24 18:17:07 CEST 2004 - sndirsch@suse.de
+
+- use xorg-x11 packages
+
+-------------------------------------------------------------------
+Tue Apr 20 14:12:35 CEST 2004 - adrian@suse.de
+
+- use admin tar ball from HEAD
+- extend kde-config to export library suffix and check for it in
+ configure
+- add user profiles patch from Waldo
+
+-------------------------------------------------------------------
+Sun Apr 18 14:56:17 CEST 2004 - coolo@suse.de
+
+- updated unsermake
+
+-------------------------------------------------------------------
+Wed Apr 14 11:16:33 CEST 2004 - adrian@suse.de
+
+- update to version 3.2.2
+
+-------------------------------------------------------------------
+Tue Apr 13 17:16:34 CEST 2004 - adrian@suse.de
+
+- adding utempter to neededforbuild. (#38833)
+ (this does not lead into a new runtime requirement)
+
+-------------------------------------------------------------------
+Sun Apr 4 21:08:43 CEST 2004 - adrian@suse.de
+
+- do only show important items in file dialog (#38269)
+
+-------------------------------------------------------------------
+Thu Apr 1 10:39:59 CEST 2004 - coolo@suse.de
+
+- replacing brute force shut up with a real log file in kconf_update
+ (Waldo)
+
+-------------------------------------------------------------------
+Wed Mar 31 16:40:14 CEST 2004 - adrian@suse.de
+
+- fix 3_2_BRANCH patch
+
+-------------------------------------------------------------------
+Tue Mar 30 17:43:16 CEST 2004 - adrian@suse.de
+
+- enable incremental sycoca creation again
+
+-------------------------------------------------------------------
+Tue Mar 30 10:45:07 CEST 2004 - coolo@suse.de
+
+- fix desktop icon renaming (Waldo)
+- fixing kconf_update for kwin (Waldo,#36682)
+
+-------------------------------------------------------------------
+Mon Mar 29 10:19:55 CEST 2004 - coolo@suse.de
+
+- handle cups printers that insist on being different (#37011)
+
+-------------------------------------------------------------------
+Sat Mar 27 09:53:52 CET 2004 - adrian@suse.de
+
+- fix regression in khtml parser with latest update (by coolo)
+
+-------------------------------------------------------------------
+Fri Mar 26 16:47:48 CET 2004 - adrian@suse.de
+
+- more silence (Waldo, Dirk and Adrian)
+- apply fix for possible hanging library unloading (Lubos)
+- fix regression in khtml parser with latest update (coolo)
+- fix for hidden cookie windows below main windows (Lubos)
+- fix icons in kcontrol
+
+-------------------------------------------------------------------
+Tue Mar 23 08:06:52 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+ * khtml fixes
+ o recursion protection
+ o official patch for kio urls
+ o crash fix (happened with Quanta)
+ o urls with trailing / are handled as directories
+ o fix for some flash enabled sites (#36656)
+- fix fileshare.diff, make us compatible to KDE again
+- call %run_permissions
+- apply fix for utf8 localisation problem in kdehelp (coolo, #36681)
+- adjust yast icon path to the new location
+- fix missing include in fontconfig-reverse-lookup patch
+- remove special settings for s390 and alpha
+ (leaded into new problems like implicit declarations of functions)
+
+-------------------------------------------------------------------
+Mon Mar 22 13:22:57 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+ * fixes security leak in kdeprint (#36663)
+- add patch from Waldo to disallow kio urls in khtml
+
+-------------------------------------------------------------------
+Sun Mar 21 21:32:47 CET 2004 - adrian@suse.de
+
+- do not trigger mount with konq view of /media/ (by Lubos)
+
+-------------------------------------------------------------------
+Sun Mar 21 11:08:11 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+ * fixed linebreak patch
+- fix deactivated patches and remove obsolete ones
+- suppress sycoca warnings about missing mimetypes
+
+-------------------------------------------------------------------
+Mon Mar 15 16:46:24 CET 2004 - coolo@suse.de
+
+- another update to 3_2_BRANCH (kdeprint layout fixes and kate repaint problems)
+
+-------------------------------------------------------------------
+Sat Mar 13 12:50:59 CET 2004 - coolo@suse.de
+
+- adding patch to force line breaks in translation of desktop files
+ (Arbeits-\nplatz)
+
+-------------------------------------------------------------------
+Wed Mar 10 23:28:21 CET 2004 - coolo@suse.de
+
+- kill dcopserver explicitly
+
+-------------------------------------------------------------------
+Wed Mar 10 10:39:42 CET 2004 - coolo@suse.de
+
+- use current 3_2_BRANCH (#35070)
+
+-------------------------------------------------------------------
+Mon Mar 8 11:20:24 CET 2004 - adrian@suse.de
+
+- use current 3_2_BRANCH
+- disable debug mode
+- find YaST icons
+
+-------------------------------------------------------------------
+Sun Mar 7 13:06:48 CET 2004 - coolo@suse.de
+
+- fixing pnome -> gnome typo
+- adding libidn-devel as requirement for devel subpackage
+
+-------------------------------------------------------------------
+Sat Mar 6 12:46:33 CET 2004 - coolo@suse.de
+
+- older distributions have different layouts for gnome. Avoid
+ dangling symlinks
+
+-------------------------------------------------------------------
+Fri Mar 5 16:35:39 CET 2004 - coolo@suse.de
+
+- fixing build
+
+-------------------------------------------------------------------
+Fri Mar 5 14:53:16 CET 2004 - coolo@suse.de
+
+- restart cups through rcscripts instead of kill magic (#32787)
+- final update for 3.2.1
+
+-------------------------------------------------------------------
+Thu Mar 4 14:45:52 CET 2004 - coolo@suse.de
+
+- require libidn hard to avoid problems e.g. on lib64
+
+-------------------------------------------------------------------
+Wed Mar 3 18:26:46 CET 2004 - adrian@suse.de
+
+- removed gnome packages from neededforbuild
+
+-------------------------------------------------------------------
+Tue Mar 2 10:25:48 CET 2004 - coolo@suse.de
+
+- update tarball again for khtml regression fixes
+
+-------------------------------------------------------------------
+Tue Mar 2 10:23:33 CET 2004 - coolo@suse.de
+
+- fix build
+
+-------------------------------------------------------------------
+Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de
+
+- update to version 3.2.1
+
+-------------------------------------------------------------------
+Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de
+
+- update to version 3.2.1
+- reworked build process
+
+-------------------------------------------------------------------
+Wed Feb 25 22:01:46 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+- add -g as compiler option for beta test
+
+-------------------------------------------------------------------
+Wed Feb 25 20:42:15 CET 2004 - adrian@suse.de
+
+- do not build on slow architectures
+
+-------------------------------------------------------------------
+Mon Feb 23 15:40:21 CET 2004 - adrian@suse.de
+
+- do not use DNotify or FAM on /media
+- long poll intervall for /media
+- include GnomeCrystal icons and general pixmaps path
+
+-------------------------------------------------------------------
+Mon Feb 23 08:05:47 CET 2004 - coolo@suse.de
+
+- initial package
+
+-------------------------------------------------------------------
+Mon Feb 23 08:05:26 CET 2004 - coolo@suse.de
+
+- update 3_2_BRANCH
+- update HEAD khtml
+- adding testkhtml.spec
+
+-------------------------------------------------------------------
+Sat Feb 21 18:35:28 CET 2004 - adrian@suse.de
+
+- add gnome and default icon pathes
+- fix ssh.protcol installation
+- fix syntax error in common_options
+
+-------------------------------------------------------------------
+Fri Feb 20 09:29:56 CET 2004 - coolo@suse.de
+
+- use khtml from HEAD (to be backported)
+- update admin tar ball
+- take out testing khtml from the main page
+
+-------------------------------------------------------------------
+Wed Feb 18 17:40:33 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+ * ssh support to ktelnetservice
+- remove pcsc-lite from neededforbuild
+- disable test_regression for now
+
+-------------------------------------------------------------------
+Wed Feb 11 08:50:03 CET 2004 - coolo@suse.de
+
+- fixing build on s390
+
+-------------------------------------------------------------------
+Wed Feb 11 08:06:07 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+
+-------------------------------------------------------------------
+Thu Jan 29 14:06:43 CET 2004 - adrian@suse.de
+
+- apply fix for printing with QT 3.3
+
+-------------------------------------------------------------------
+Mon Jan 26 23:25:56 CET 2004 - adrian@suse.de
+
+- update to version 3.2.0 final
+
+-------------------------------------------------------------------
+Fri Jan 23 18:44:08 CET 2004 - adrian@suse.de
+
+- update to current 3_2_BRANCH
+
+-------------------------------------------------------------------
+Wed Jan 21 17:28:14 CET 2004 - adrian@suse.de
+
+- disable sse and mmx usage on 9.0 (compiler bug)
+- remove autom4te.cache during update_admin
+ (automake 2.8 can run into error with <2.8 cache data)
+
+-------------------------------------------------------------------
+Wed Jan 21 12:14:49 CET 2004 - adrian@suse.de
+
+- update to current BRANCH to get various khtml fixes
+
+-------------------------------------------------------------------
+Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de
+
+- update to version 3.1.95 ( KDE 3.2 RC1 )
+
+-------------------------------------------------------------------
+Fri Jan 16 17:10:30 CET 2004 - adrian@suse.de
+
+- implement short menus again
+
+-------------------------------------------------------------------
+Tue Jan 13 13:32:16 CET 2004 - adrian@suse.de
+
+- update to snapshot 2004011309
+- disable debug
+
+-------------------------------------------------------------------
+Tue Jan 6 19:20:55 CET 2004 - adrian@suse.de
+
+- update to snapshot 2004010618
+- add kde_post_install function to common_options
+- remove pregenerated files from uic during update_admin
+
+-------------------------------------------------------------------
+Thu Dec 18 14:12:16 CET 2003 - adrian@suse.de
+
+- update to snapshot 2003121718
+
+-------------------------------------------------------------------
+Mon Dec 15 14:18:36 CET 2003 - adrian@suse.de
+
+- update to snapshot 2003121511
+- accept automake 1.8
+
+-------------------------------------------------------------------
+Wed Dec 10 14:30:45 CET 2003 - adrian@suse.de
+
+- update to snapshot 2003121013
+
+-------------------------------------------------------------------
+Tue Dec 9 13:40:37 CET 2003 - adrian@suse.de
+
+- package test_regression for testing in khtmltest package
+
+-------------------------------------------------------------------
+Tue Dec 2 11:10:27 CET 2003 - adrian@suse.de
+
+- use beta2, take two tar ball
+
+-------------------------------------------------------------------
+Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de
+
+- update to 3.1.94 ( KDE 3.2 beta 2 )
+
+-------------------------------------------------------------------
+Sun Nov 23 20:44:24 CET 2003 - adrian@suse.de
+
+- update to snapshot 2003112315
+ * build again with alsa 1.0
+
+-------------------------------------------------------------------
+Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de
+
+- update to new snapshot from 2003102409
+- add jasper (JPEG2000) support
+
+-------------------------------------------------------------------
+Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de
+
+- update to KDE 3.2 beta1
+
+-------------------------------------------------------------------
+Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de
+
+- update to snapshot 2003102008
+
+-------------------------------------------------------------------
+Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de
+
+- update to snapshot 2003100510
+
+-------------------------------------------------------------------
+Wed Oct 1 09:59:21 CEST 2003 - adrian@suse.de
+
+- update to snapshot 3.1.92_2003093021
+ * should fix building of KDE 2.2 documents in other packages
+
+-------------------------------------------------------------------
+Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de
+
+- update to version 1.1.92 (KDE 3.2 alpha 2)
+
+-------------------------------------------------------------------
+Tue Sep 23 09:42:45 CEST 2003 - adrian@suse.de
+
+- apply crash fix (happens in kdesktop) from Marcus Meissner
+ happened with a (most likely broken) Windows Driver CD (#31568)
+
+-------------------------------------------------------------------
+Tue Sep 16 11:40:25 CEST 2003 - adrian@suse.de
+
+- fix application/x-ogg icon
+
+-------------------------------------------------------------------
+Sat Sep 13 10:37:36 CEST 2003 - adrian@suse.de
+
+- fix Unimportant routines really finaly
+- Require pcre-devel only for > 8.2
+- make menu sorting a routine which can be called from kicker
+- hide Documents folder entry in kfiledialog for > 8.2
+
+-------------------------------------------------------------------
+Fri Sep 12 13:51:12 CEST 2003 - coolo@suse.de
+
+- add requirement on pcre-devel as libkhtml.la contains a reference
+ to /usr/lib/libpcreposix.la
+
+-------------------------------------------------------------------
+Thu Sep 11 15:50:09 CEST 2003 - coolo@suse.de
+
+- give a more correct error message (as good as we can get it out
+ of cups) for forbidden actions (#29225)
+
+-------------------------------------------------------------------
+Thu Sep 11 09:20:07 CEST 2003 - adrian@suse.de
+
+- use updated 3.1.4 tar ball
+ * certifcate dialog will reappear after typing wrong password
+- add BRANCH patch to fix kdesktop icon name renaming and a crash fix
+- honor caching in KServiceGroup::SuSEchildCount()
+
+-------------------------------------------------------------------
+Tue Sep 9 02:59:23 CEST 2003 - adrian@suse.de
+
+- add YaST icon path
+
+-------------------------------------------------------------------
+Tue Sep 9 00:14:46 CEST 2003 - adrian@suse.de
+
+- update to version 3.1.4
+
+-------------------------------------------------------------------
+Mon Sep 8 15:27:08 CEST 2003 - adrian@suse.de
+
+- implement KServiceGroup::SuSEchildCount() to ignore
+ X-SuSE-Unimportant entries
+
+-------------------------------------------------------------------
+Fri Sep 5 12:10:12 CEST 2003 - adrian@suse.de
+
+- add check for SuSE-Unimportant also in kservicegroup class
+- add support for X-SuSE-GeneralDescription and ShortMenu
+- update 3_1_BRANCH
+- add kmimelist application for debugging
+- add optioninal X-KDE-InitialPreference Tag, if we want
+ different settings in Gnome
+
+-------------------------------------------------------------------
+Wed Sep 3 17:44:28 CEST 2003 - adrian@suse.de
+
+- update xdg patch from Waldo to get compatible with 3.2 again
+- update 3_1_BRANCH to get klistview fixes
+
+-------------------------------------------------------------------
+Tue Sep 2 12:52:02 CEST 2003 - adrian@suse.de
+
+- include default pixmaps path
+- drop broken styles, which will also disappear in KDE 3.2
+- add shut up patch from coolo
+
+-------------------------------------------------------------------
+Mon Sep 1 14:38:52 CEST 2003 - adrian@suse.de
+
+- update to current 3_1_BRANCH
+- implement X-SuSE-Unimportant support
+
+-------------------------------------------------------------------
+Fri Aug 29 17:24:16 CEST 2003 - adrian@suse.de
+
+- update to current 3_1_BRANCH for qt 3.2.1 fixes
+
+-------------------------------------------------------------------
+Tue Aug 26 08:16:04 CEST 2003 - adrian@suse.de
+
+- apply fix from Lubos for maximised windows of GTK apps
+
+-------------------------------------------------------------------
+Sun Aug 24 23:06:19 CEST 2003 - adrian@suse.de
+
+- redo last fix in a more often working way.
+ but maybe we try to fix support for broken svg's atm ...
+
+-------------------------------------------------------------------
+Sun Aug 24 12:14:29 CEST 2003 - adrian@suse.de
+
+- fix svgicon engine to render karbon svg's.
+- install ksvgiconengine with header(internal) to get used by
+ svg thumbnail generator
+
+-------------------------------------------------------------------
+Sat Aug 23 22:34:40 CEST 2003 - adrian@suse.de
+
+- update to 3_1_BRANCH
+
+-------------------------------------------------------------------
+Wed Aug 20 17:19:57 CEST 2003 - schwab@suse.de
+
+- Fix weird character in common_options script.
+
+-------------------------------------------------------------------
+Wed Aug 20 15:56:59 CEST 2003 - adrian@suse.de
+
+- small bugfix from Waldo for XDG
+
+-------------------------------------------------------------------
+Tue Aug 19 12:15:18 CEST 2003 - adrian@suse.de
+
+- fix compile with gcc 3.3.1
+
+-------------------------------------------------------------------
+Wed Aug 13 11:34:11 CEST 2003 - adrian@suse.de
+
+- fix lib64 plugin support
+- use current 3_1_BRANCH
+- clean up spec file
+- package /opt/kde3/include in main package
+
+-------------------------------------------------------------------
+Tue Aug 12 13:25:32 CEST 2003 - adrian@suse.de
+
+- update XDG patch (yep, popup's are still disabled ;)
+
+-------------------------------------------------------------------
+Fri Aug 8 21:58:06 CEST 2003 - adrian@suse.de
+
+- disable popup in kbuildsycoca run again
+
+-------------------------------------------------------------------
+Thu Aug 7 15:25:02 CEST 2003 - adrian@suse.de
+
+- new XDG code from Waldo to support kmenuedit
+
+-------------------------------------------------------------------
+Tue Aug 5 08:25:26 CEST 2003 - adrian@suse.de
+
+- disable popup in kbuildsycoca run
+
+-------------------------------------------------------------------
+Fri Aug 1 16:54:16 CEST 2003 - adrian@suse.de
+
+- disable shadow patch at all again
+- update 3_1_BRANCH diff
+ * first fixes for Qt 3.2
+- update kdelibs-menus stuff
+ * Waldo: Less buggy, with prefix support and with a working
+ <OnlyUnallocated/>
+
+-------------------------------------------------------------------
+Wed Jul 30 17:52:37 CEST 2003 - adrian@suse.de
+
+- update kdelibs-menus-kded tar ball to new version from Waldo,
+ to get the kbuildsycoca --menutest function
+- merge kdelibs3-cups back to kdelibs3
+
+-------------------------------------------------------------------
+Mon Jul 28 15:11:15 CEST 2003 - adrian@suse.de
+
+- update to current 3_1_BRANCH
+
+-------------------------------------------------------------------
+Wed Jul 23 08:55:42 CEST 2003 - adrian@suse.de
+
+- use another new 3.1.3 tar ball with further security fix
+ (cookie handling)
+- add needed files for XDG support
+
+-------------------------------------------------------------------
+Tue Jul 22 13:12:02 CEST 2003 - coolo@suse.de
+
+- remove CVS conflict files from admin
+- make common_options a %config (for consistency)
+
+-------------------------------------------------------------------
+Mon Jul 21 12:00:42 CEST 2003 - adrian@suse.de
+
+- fix build for 7.x distributions
+
+-------------------------------------------------------------------
+Fri Jul 18 17:02:43 CEST 2003 - adrian@suse.de
+
+- third version of 3.1.3 tar ball
+ (security fix for cookie handling)
+- add backported patch from 3.2 for shadow text on icons.
+ (written by Laur Ivan <laurivan@eircom.net>)
+- accept Qt 3.2 also, when "#MIN_CONFIG(3)" is used
+- fix build for lib64
+
+-------------------------------------------------------------------
+Fri Jul 18 10:01:44 CEST 2003 - adrian@suse.de
+
+- fix owner ship of files
+- add XDG support from Waldo from KDE 3.2
+
+-------------------------------------------------------------------
+Wed Jul 16 12:14:55 CEST 2003 - adrian@suse.de
+
+- use new 3.1.3 tar ball
+
+-------------------------------------------------------------------
+Wed Jul 16 01:11:51 CEST 2003 - adrian@suse.de
+
+- update to 3.1.3
+
+-------------------------------------------------------------------
+Tue Jun 24 10:52:19 CEST 2003 - coolo@suse.de
+
+- update 3.1 branch (heading 3.1.3)
+
+-------------------------------------------------------------------
+Wed Jun 11 11:54:55 CEST 2003 - kukuk@suse.de
+
+- Add missing directories to filelist
+
+-------------------------------------------------------------------
+Sat Jun 7 22:10:12 CEST 2003 - coolo@suse.de
+
+- remove libtool update code completly
+- don't create stale symlinks for < 820
+- create the gnome icons symlink only for < 829
+ (moved to gnome packages, where they can't dangle)
+
+-------------------------------------------------------------------
+Fri May 30 14:55:49 CEST 2003 - adrian@suse.de
+
+- fix file conflict and disable libtool update again
+
+-------------------------------------------------------------------
+Thu May 29 10:51:54 CEST 2003 - adrian@suse.de
+
+- tune some minor bits of coolo's changes
+ (a minor side effect is that we are able to build KDE packages again)
+
+-------------------------------------------------------------------
+Wed May 28 15:05:30 CEST 2003 - coolo@suse.de
+
+- put the configure work around in update_admin too
+
+-------------------------------------------------------------------
+Tue May 27 14:08:45 CEST 2003 - coolo@suse.de
+
+- updating 3_1_BRANCH.diff (to get it working without --enable-final)
+- build --enable-final in beta too
+- update libtool files from system (experimental)
+
+-------------------------------------------------------------------
+Mon May 26 15:03:34 CEST 2003 - adrian@suse.de
+
+- define and use $INSTALL_TARGET in common_options
+- set to "install" (not "install-strip") for now
+
+-------------------------------------------------------------------
+Mon May 19 09:41:44 CEST 2003 - adrian@suse.de
+
+- app