add dbus-1-tqt and libdbus-1-tqt-0; add unmodified tdelibs from kdelibs3

v3.5.13-sru
Robert Xu 13 years ago
parent 53f2819f9a
commit 46130378ae

@ -0,0 +1 @@
In the TRINITY tree this is dependencies/dbus-tqt.

@ -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

@ -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

@ -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);
}
}

@ -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()

@ -0,0 +1 @@
In the TRINITY tree this is dependencies/dbus-1-tqt.

@ -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;

@ -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

@ -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

@ -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

@ -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);

@ -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

@ -63,6 +63,7 @@
      -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\       -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\
      -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\       -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\
-DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\ -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\
-DMAN_INSTALL_DIR=%{_mandir} \\\
$bdir %* \ $bdir %* \
%{nil} %{nil}

Binary file not shown.

@ -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>">

@ -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"

@ -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
}
}

@ -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
;;

Binary file not shown.

@ -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();

@ -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

@ -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);

@ -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

@ -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

@ -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;

@ -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
{

@ -0,0 +1,3 @@
tdelibs
tdelibs-arts
tdelibs-default-style

@ -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 {

@ -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.

@ -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);
/**

@ -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" );

@ -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")

@ -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
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

@ -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

@ -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()

@ -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 );

@ -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 :)

@ -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;

@ -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

@ -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;

@ -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 ]

@ -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;

@ -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;

@ -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:

@ -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);
}
}

@ -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();

@ -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 {

@ -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;
+ }
}
}
}

@ -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 )

@ -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;

@ -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();

@ -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;

@ -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");

@ -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");

@ -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");

@ -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);

@ -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/

@ -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))

@ -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()));
}
}

@ -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;

@ -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;
}
}

@ -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(";

@ -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++)

@ -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

@ -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 don´t 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 );

@ -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>

@ -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();

@ -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

@ -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;
}

@ -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

@ -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.
};
/**

@ -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 )

@ -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 )

@ -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);
}

@ -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()

@ -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);

@ -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.
*/

@ -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 )

@ -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;

@ -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( )

@ -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" );
+ }
+ }
+}
+

@ -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;
}

@ -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);
}

@ -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;

@ -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);
}

@ -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;

@ -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);

@ -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

@ -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;

File diff suppressed because it is too large Load 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";

@ -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 );

@ -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

@ -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;
}

@ -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]

@ -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

@ -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)
{

@ -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--;

@ -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);

@ -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("");

@ -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);

@ -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();

@ -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;

@ -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);

File diff suppressed because it is too large Load Diff

@ -0,0 +1,118 @@
#
# spec file for package kdelibs3-devel-doc
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# 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.opensuse.org/
#
# norootforbuild
Name: kdelibs3-devel-doc
BuildRequires: OpenEXR-devel aspell-devel cups-devel db-devel doxygen graphviz kdelibs3-devel krb5-devel libjasper libsndfile openldap2-devel qt3-devel-doc utempter xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-scalable
%if %suse_version > 1020
BuildRequires: avahi-compat-mDNSResponder-devel fdupes
%else
BuildRequires: mDNSResponder-devel
%endif
Url: http://www.kde.org
License: GPLv2+
Group: Documentation/HTML
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Summary: Additional Package Documentation
Version: 3.5.10
Release: 44
%define kdelibs_patch_level b
BuildArch: noarch
Requires: kdelibs3 qt3-devel-doc
Source0: kdelibs-%{version}.tar.bz2
Source1: create-kdeapi
Source4: api_docu_description
%description
This package contains a generated API documentation for all library
classes provided by kdelibs. The index page for all KDE API functions
is:
file:/usr/share/doc/KDE3-API/index.html
Authors:
--------
The KDE Team <kde@kde.org>
%prep
echo %suse_version
%setup -q -n kdelibs-%{version}
. /etc/opt/kde3/common_options
update_admin --no-unsermake
%build
. /etc/opt/kde3/common_options
export QTDOCDIR=/usr/share/doc/packages/qt3/html
./configure $configkde --with-distribution="$DISTRI" --enable-libsuffix=`/opt/kde3/bin/kde-config --libsuffix`
do_make apidox
%install
. /etc/opt/kde3/common_options
list=`find . -name Makefile.am | xargs grep Doxy | sed -e "s,/Makefile.am.*,," | sort -u `
for i in $list; do do_make -C $i DESTDIR=$RPM_BUILD_ROOT install-apidox || true; done
# The modern way, with kdevelop-incompatible api documentation :/
mkdir -p $RPM_BUILD_ROOT/usr/share/doc/KDE3-API/
# *** everytime you edit the following line, you made a mistake. Update admin tarball
# *** version instead
KDEDOCDIR=$kde_htmldir/en/kdelibs-apidocs
# this is forgotten, but kdevelop needs it
mkdir -p $RPM_BUILD_ROOT/$KDEDOCDIR
if test -d apidocs/qt; then
cp -a apidocs/qt $RPM_BUILD_ROOT/$KDEDOCDIR
fi
set +x
exitc=0
for i in `ls -1 $RPM_BUILD_ROOT/$KDEDOCDIR/*/html/index.html`; do
lib=`echo $i | sed -e 's,/html/index.html,,; s,.*/\([^/]*\)$,\1,'`
if ! egrep "^$lib:" %SOURCE4 ; then
echo "ERROR: no description for library $lib"
exitc=1
fi
sed -n -e 's@'"${lib}"':\(.*\)@\1@p' %SOURCE4 > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/description.SuSE
echo "kdelibs" > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/package.SuSE
done
if test "$exitc" != 0; then
exit $exitc
fi
ln -s $KDEDOCDIR/index.html $RPM_BUILD_ROOT/usr/share/doc/KDE3-API/index.html
rm -rf ${RPM_BUILD_ROOT}/opt/kde3/share/apps
mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/apps/kdelibs
install -m 0755 %SOURCE1 $RPM_BUILD_ROOT/opt/kde3/share/apps/kdelibs/
%if %suse_version > 1020
%fdupes -s $RPM_BUILD_ROOT
%endif
%post
/opt/kde3/share/apps/kdelibs/create-kdeapi
%clean
rm -rf ${RPM_BUILD_ROOT}
%files
%defattr(-,root,root)
%dir /opt/kde3/share
%dir /opt/kde3/share/apps
%dir /opt/kde3/share/apps/kdelibs
/usr/share/doc/KDE3-API
/opt/kde3/share/apps/kdelibs/create-kdeapi
/opt/kde3/share/doc
%changelog

File diff suppressed because it is too large Load Diff

@ -0,0 +1,892 @@
#
# spec file for package kdelibs3
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# 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.opensuse.org/
#
# norootforbuild
Name: kdelibs3
BuildRequires: OpenEXR-devel arts-devel aspell-devel cups-devel fam-devel flac-devel krb5-devel
BuildRequires: libart_lgpl-devel libidn-devel libsndfile libtiff-devel
BuildRequires: libxslt-devel openldap2-devel pcre-devel qt3-devel sgml-skel
BuildRequires: db-devel libacl-devel libattr-devel unsermake update-desktop-files utempter
BuildRequires: unzip
%if %suse_version > 1020
BuildRequires: avahi-compat-mDNSResponder-devel fdupes libbz2-devel libjasper-devel
%else
BuildRequires: libjasper mDNSResponder-devel
%endif
%if %suse_version > 1000
BuildRequires: libdrm-devel
%endif
Url: http://www.kde.org
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Group: System/GUI/KDE
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Summary: KDE Base Libraries
Version: 3.5.10
Release: 47
Obsoletes: kde3-i18n kups keramik kdelibs3-cups kdelibs3-33addons kdepim3-networkstatus
Provides: kups keramik kdelibs3-cups kdelibs3-33addons kdepim3-networkstatus
Provides: kdelibs3_base = 3.3
# bug437293
%ifarch ppc64
Obsoletes: kdelibs3-64bit
%endif
#
Requires: qt3 >= %( echo `rpm -q --queryformat '%{VERSION}' qt3`)
Requires: openssl kdelibs3-default-style
%if %suse_version > 1020
Requires: hicolor-icon-theme
%endif
%if %suse_version > 1000
Recommends: ispell enscript
%endif
%if %suse_version > 1010
Requires: sudo
%endif
Source0: kdelibs-%{version}.tar.bz2
Source2: do_make
Source3: baselibs.conf
Source4: api_docu_description
Source6: kde3rc
Source7: common_options
# svn export svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin
Source8: admin.tar.bz2
Source9: cr16-filesys-file_broken.png
Source10: kdemm-20050330.tar.bz2
Source11: 10888-bt.tar.gz
Source12: mimetype-icons.tar.bz2
Source14: vnd.openxmlformats-officedocument.wordprocessingml.document.desktop
Source15: vnd.openxmlformats-officedocument.presentationml.presentation.desktop
Source16: vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop
Patch0: 3_5_BRANCH.diff
Patch1: kdeversion.diff
Patch2: admin.diff
Patch3: show-distribution.diff
Patch5: applications.menu-fallback.diff
Patch7: stat-on-media.diff
Patch8: kmimelist.diff
Patch9: x-kde-InitialPreference.diff
Patch10: disable-idn-support.diff
Patch11: silence.diff
Patch12: smooth-scrolling.diff
Patch13: rubberband-selection.diff
Patch15: add-suse-translations.diff
Patch16: kde3rc.dif
Patch17: artwork.diff
Patch26: mimetype-changes.diff
Patch27: noauto-package.diff
Patch29: prefer_distribution_settings.dif
Patch34: allow-man-setgid.diff
Patch40: clever-menu.diff
Patch43: fileshare.diff
Patch44: fontconfig-reverse-lookup.diff
Patch45: limit-max-image-size.diff
Patch50: fix-gnome-help-support.diff
Patch950: fix-gnome-help-support_legacy.diff
Patch52: kdeprint-restart-cupsd.diff
Patch54: kdemm.diff
Patch55: fix-kdemm-build.diff
Patch56: fix-dcopidlng-within-kdelibs-build.diff
Patch57: kdemm-filepreview.diff
Patch60: fix-qxembed.diff
Patch65: integrate-global-pixmaps-new.diff
Patch66: integrate-global-pixmaps-10.1.diff
Patch70: ktip-icon-hack.diff
Patch80: CATALOG.kdelibs3.diff
Patch81: xml-catalog.diff
Patch83: kdelibs3-gcc-4.1-miscompile.diff
Patch85: desktop-translations.diff
Patch86: use-xauthlocalhostname.diff
Patch88: mozilla-sliders.patch
Patch89: kdeprint-utf8.diff
Patch90: kimproxy-warning.diff
Patch95: kdelibs_networkstatus_branch2.diff
Patch97: autostart-spec.diff
Patch105: kdelibs3-hicolor-scalable-sizes.patch
Patch106: use-mediamanager.diff
Patch108: patch-mimetype-iconnames.diff
Patch109: fix-kerberos-printing.diff
Patch110: printpreview.patch
Patch111: kfile-beagle.diff
Patch112: xinerama.patch
Patch113: kremoteencoding-utf8.diff
Patch114: no-progress-for-beagle-status-query.diff
Patch117: kickoff-drop-shadow.diff
Patch122: disable-samba-dialog-without-smb.diff
Patch123: lpoptions-cups-1.2.diff
Patch124: spellcheck-default-utf8.diff
Patch125: kde4-applications.diff
Patch126: avahi-pidfile.diff
Patch127: x-jar-desktop.diff
Patch128: google-mail.diff
Patch129: default-useragent.diff
Patch130: kwalletd-try-open.diff
Patch131: textcompletion-editor.diff
Patch132: no-debug-by-default.diff
Patch133: flash-player-non-oss.diff
Patch134: bundle-locale-help.diff
Patch149: networkstatus.diff
Patch150: kdesu-settings.diff
Patch152: bug-399296_ftphandling-fix.diff
Patch153: bug-382959_kabc_fix_vcardparser.patch
Patch154: r874968-ebay-crash.diff
Patch155: gcc44.diff
Patch156: fix-macmenu.patch
Patch157: ignore-inline-menu.diff
Patch158: bnc557126.diff
Patch159: xmlhttprequest_3.x.diff
Patch160: kdecode_fakes_include.diff
Patch161: gcc45.diff
Patch162: arts-acinclude.patch
Patch163: kdelibs-3.5.10-ossl-1.x.patch
Patch164: light_v_2_scrollbar_patch.patch
Patch201: kdelibs-3.5.4-CVE-2009-1690.patch
Patch203: kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch
Patch204: kdelibs-3.5.10-CVE-2009-2702.patch
Patch205: kdelibs-3.5.10-cve-2009-2537-select-length.patch
Patch206: kdelibs-3.5.10-cve-2009-1725.patch
Patch207: kdelibs-3.5.10-cve-2009-1698.patch
Patch210: kdelibs-3.5.10-kio.patch
Patch211: oom_score_adj.patch
Patch212: kcontrol_crash_patch.diff
%description
This package contains kdelibs, one of the basic packages of the K
Desktop Environment. It contains the necessary libraries for the KDE
desktop.
This package is absolutely necessary for using KDE.
%package arts
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Summary: KDE aRts support
Group: System/GUI/KDE
Provides: kdelibs3:/opt/kde3/bin/artsmessage
# bug437293
%ifarch ppc64
Obsoletes: kdelibs3-arts-64bit
%endif
#
Requires: arts >= %( echo `rpm -q --queryformat '%{VERSION}' arts`)
%if %suse_version > 1000
Recommends: kdemultimedia3-arts
%endif
%description arts
This package contains bindings and gui elements for using aRts sound
daemon.
%package default-style
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Summary: The default KDE style
Group: System/GUI/KDE
Provides: kdelibs3:/opt/kde3/%_lib/libkdefx.so.4
%description default-style
This package contains the Plastik widget style and libkdefx. It only
depends on Qt, not the KDE libraries.
%package doc
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Summary: Documentation for KDE Base Libraries
Group: System/GUI/KDE
Provides: kdelibs3:/opt/kde3/share/apps/ksgmltools2
Provides: kdelibs3_doc
Requires: sgml-skel libxml2
%define regcat /usr/bin/sgml-register-catalog
PreReq: %{regcat} /usr/bin/xmlcatalog /usr/bin/edit-xml-catalog
PreReq: sed grep awk
%description doc
This package contains the core environment and templates for the KDE
help system.
%package devel
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
# usefiles /opt/kde3/bin/dcopidl /opt/kde3/bin/dcopidl2cpp /opt/kde3/bin/kdb2html /opt/kde3/bin/preparetips
Requires: qt3-devel libvorbis-devel kdelibs3 = %version autoconf automake libxslt-devel libxml2-devel libart_lgpl-devel libjpeg-devel
# next line from kde3-devel-packages macro
Requires: kdelibs3-doc libtiff-devel openssl-devel update-desktop-files
%if %suse_version > 1000
Requires: libdrm-devel dbus-1-qt3-devel
%else
Requires: dbus-1-qt
%endif
Requires: libattr-devel libacl-devel
%if %suse_version > 1020
Requires: avahi-compat-mDNSResponder-devel libbz2-devel
%else
Requires: mDNSResponder-devel
%endif
Requires: kdelibs3-arts
Summary: KDE Base Package: Build Environment
Group: System/GUI/KDE
Requires: fam-devel pcre-devel libidn-devel arts-devel
%description devel
This package contains all necessary include files and libraries needed
to develop applications that require these.
%prep
echo %suse_version
%setup -q -n kdelibs-%{version}
%patch0
%patch1
%patch3
%patch5
%patch7
%patch10
%patch11
%patch12
%patch13
%patch15
%patch16
%patch17
%patch26
%patch27
%patch29
#%patch43
#disable it because of BIC
#%patch45
%if %suse_version > 1020
%patch50
%else
%patch950
%endif
%patch52
%patch34
%patch44
%patch40
%patch8
%patch9
tar xfvj %SOURCE10
# TODO!
%patch54
%patch55
%patch56
%patch57
%patch60
# 10.2 goes back to the version without suseadds
%if %suse_version > 1010
%patch65
%else
%if %suse_version > 1000
%patch66
%else
%patch65
%endif
%endif
%patch70
rm -rf admin
bunzip2 -cd %{SOURCE8} | tar xfv - --exclude=.cvsignore --exclude=CVS
install -m 755 %{SOURCE2} admin
%patch2
%patch80 -p 1
%patch81
%if %suse_version > 1000
%patch83
%endif
%patch85
%patch86
%patch88
%patch89
%patch90
%patch95
%patch97
%if %suse_version < 1030
%patch105 -p 1
%endif
%patch106
%patch108
%patch109
%patch110
%patch111
%patch112
%patch113
%patch114
%patch117
%patch122
%if %suse_version > 1010
%patch123
%endif
%patch124
%patch125
%patch126
%patch127
%patch128
%patch129
%patch130
%patch131
%patch132
%if %suse_version > 1020
%patch133
%patch134
%endif
%patch149
%patch150
%patch152
%patch153
%patch154
%patch155
%patch156
%if %suse_version > 1110
%patch157
%endif
%patch158
%patch159
%patch160
%patch161
%patch162 -p1
%patch163 -p1
%patch164 -p1
%patch201 -p1
%patch203 -p1
%patch204 -p1
%patch205 -p1
%patch206
%patch207 -p1
%patch210 -p1
%patch211 -p1
%patch212
tar xfvj %SOURCE12
#
# define KDE version exactly
#
myrelease=$(echo %release | cut -d. -f-1)
sed 's,#define KDE_VERSION_STRING "\(.*\)",#define KDE_VERSION_STRING "\1 \\"release '$myrelease'\\"",' kdecore/kdeversion.h > kdecore/kdeversion.h_ && mv kdecore/kdeversion.h_ kdecore/kdeversion.h
#
# create build enviroment
#
UNSERMAKE=yes make -f admin/Makefile.common cvs
%build
export PATH=$PWD/admin/:$PATH
FINAL="--enable-final"
CFLAGS="$CFLAGS -fno-strict-aliasing"
CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
%ifarch armv4l
FINAL=""
CXXFLAGS="$CXXFLAGS -O0"
%endif
FLAGS="$FLAGS --with-pcsc-dir=/usr "
FLAGS="$FLAGS --disable-rpath"
OPTIONS="$FLAGS $FINAL \
--prefix=/opt/kde3 \
--with-qt-dir=/usr/lib/qt3 \
--enable-threading \
--enable-mt \
--with-xinerama \
--with-ssl-dir=/usr/ssl \
--mandir=%_mandir \
--sysconfdir=%_sysconfdir \
--enable-new-ldflags"
#
# common_options
#
sed -e 's,@_lib@,%_lib,g' -e "s,@configkde@,$OPTIONS,g" \
%{SOURCE7} > ../common_options
. ../common_options
rm -rf $RPM_BUILD_ROOT
export PATH=/opt/kde3/bin:$PATH
if [ %_lib = lib64 ]; then
EXTRA_OPTIONS="--enable-libsuffix=64"
fi
%if %is_plus
EXTRA_OPTIONS="$EXTRA_OPTIONS --enable-dnotify"
%endif
export path_sudo=/usr/bin/sudo
#
# define the distribution exactly
#
test -e /.buildenv && . /.buildenv
%if %is_plus
# supplementary package
DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION UNSUPPORTED"
%else
# official build on released and maintained products
DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION"
%endif
sed 's,#define KDE_VERSION_STRING "\(.*\)",#define KDE_VERSION_STRING "\1 '"$ADD_VERSION"'",' kdecore/kdeversion.h > kdecore/kdeversion.h_ && mv kdecore/kdeversion.h_ kdecore/kdeversion.h
# find MIT kerberos
export PATH=/usr/lib/mit/bin:$PATH
# fast-malloc is not needed anymore
./configure $configkde $EXTRA_OPTIONS \
--enable-fast-malloc=no \
--with-distribution="$DISTRI"
do_make %{?jobs:-j %jobs}
#
xmlcatbin=/usr/bin/xmlcatalog
# CATALOG=docbook-simple.xml
# $xmlcatbin --noout --create $CATALOG
# $xmlcatbin --noout --add "public" \
# "-//OASIS//DTD Simplified DocBook XML V1.0//EN" \
# "file://%{xml_mod_dtd_dir}/sdocbook.dtd" $CATALOG
# $xmlcatbin --noout --add "system" \
# "http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd" \
# "file://%{xml_mod_dtd_dir}/sdocbook.dtd" $CATALOG
%define FOR_ROOT_CAT for-catalog-%{name}-%{version}.xml
CATALOG=/opt/kde3/share/apps/ksgmltools2/customization/catalog.xml
rm -f %{FOR_ROOT_CAT}.tmp
$xmlcatbin --noout --create %{FOR_ROOT_CAT}.tmp
# $xmlcatbin --noout --add "delegateSystem" \
# "http://www.oasis-open.org/docbook/xml/simple/" \
# "file:///$CATALOG" %{FOR_ROOT_CAT}.tmp
$xmlcatbin --noout --add "delegatePublic" \
"-//KDE//DTD DocBook XML V4.2" \
"file://$CATALOG" %{FOR_ROOT_CAT}.tmp
$xmlcatbin --noout --add "delegatePublic" \
"-//KDE//ELEMENTS" \
"file://$CATALOG" %{FOR_ROOT_CAT}.tmp
$xmlcatbin --noout --add "delegatePublic" \
"-//KDE//ENTITIES" \
"file://$CATALOG" %{FOR_ROOT_CAT}.tmp
# Create tag
sed '/<catalog/a\
<group id="%{name}-%{version}">
/<\/catalog/i\
</group>' \
%{FOR_ROOT_CAT}.tmp > %{FOR_ROOT_CAT}
%install
. ../common_options
mkdir -p $RPM_BUILD_ROOT/etc/opt/kde3/
install -m 0644 ../common_options \
$RPM_BUILD_ROOT/etc/opt/kde3/common_options
export PATH=$PWD/admin/:$PATH
do_make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET
mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/config.kcfg
install -D %SOURCE9 $RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/filesystems/file_broken.png
mv $RPM_BUILD_ROOT/etc/xdg/menus/applications.menu \
$RPM_BUILD_ROOT/etc/xdg/menus/applications.menu.kde
#
# lib64 compatibility symlink
#
%ifarch x86_64 ppc64 s390x mips64 sparc64
mkdir -p $RPM_BUILD_ROOT/opt/kde3/lib/kde3/
ln -sf ../../lib64/kde3/plugins \
$RPM_BUILD_ROOT/opt/kde3/lib/kde3/plugins-lib64
%endif
#
# add missing directories
#
for i in Applications Development Editors Edutainment Games Graphics Internet Multimedia Office Settings System Toys Utilities WordProcessing; do
install -d -m 0755 $RPM_BUILD_ROOT/opt/kde3/share/applnk/$i
done
rm -f locale.list
for i in $(find /usr/share/locale -mindepth 1 -maxdepth 1 -type d | sed 's:/usr/share/locale/::'); do
install -d -m 755 $RPM_BUILD_ROOT/opt/kde3/share/locale/$i
install -d -m 755 $RPM_BUILD_ROOT/opt/kde3/share/locale/$i/LC_MESSAGES
install -d -m 755 $RPM_BUILD_ROOT/opt/kde3/share/doc/HTML/$i
echo "%lang($i) %doc /opt/kde3/share/locale/$i" >> locale.list
done
%suse_update_desktop_file kresources X-KDE-settings-desktop
# unlike with other modules, kde_post_install shouldn't
# be put at the end of %install
kde_post_install
# now create a filesystem layer
for theme in hicolor locolor; do
for j in actions apps filesystems mimetypes; do
for i in 16 22 32 48 64 128; do
install -d -m 0755 $RPM_BUILD_ROOT/opt/kde3/share/icons/${theme}/${i}x${i}/${j}
done
install -d -m 0755 $RPM_BUILD_ROOT/opt/kde3/share/icons/${theme}/scalable/${j}
done
done
install -d -m 0755 $RPM_BUILD_ROOT/etc/opt/kde3/%_lib
install -d -m 0755 $RPM_BUILD_ROOT/etc/opt/kde3/share/config
install -d -m 0755 $RPM_BUILD_ROOT/opt/kde3/share/apps/kdelibs/
install -m 0644 %SOURCE6 $RPM_BUILD_ROOT/etc/
rm -f $RPM_BUILD_ROOT/opt/kde3/%_lib/libkdeinit_*.la
#
# add additional icon path
#
mkdir -p ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdelibs
rm -f admin/*.orig
cp -a admin ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdelibs/
# This is not needed on SUSE Linux! - Marcus Meissner <meissner@suse.de>
rm $RPM_BUILD_ROOT/opt/kde3/bin/kgrantpty
#
# our version is in kdebase3
#
rm -f $RPM_BUILD_ROOT/opt/kde3/bin/fileshare*
#
# no sources for man pages
#
rm -f $RPM_BUILD_ROOT/opt/kde3/share/doc/HTML/en/kdelibs/man-*
#
# install BitTorrent icons
#
tar xfvz %SOURCE11
for i in 16x16 22x22 32x32 48x48 64x64 128x128 ; do
install -m 0644 bt/$i/mimetypes/bt.png \
$RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg/$i/mimetypes/torrent.png
done
cp CATALOG.%{name} catalog.xml ${RPM_BUILD_ROOT}/opt/kde3/share/apps/ksgmltools2/customization/
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/xml
cp %{FOR_ROOT_CAT} ${RPM_BUILD_ROOT}%{_sysconfdir}/xml
# rm -f $RPM_BUILD_ROOT/opt/kde3/%_lib/libkdefakes.la
# rm -f $RPM_BUILD_ROOT/opt/kde3/%_lib/libkjava.la
%if %suse_version > 1020
rm -f $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/index.theme
%endif
# .desktop files in kdeaccessibility3 require the kttsd icon
for i in {16x16,22x22,32x32,48x48,64x64,128x128,scalable}; do mv $RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg/$i/apps/kttsd.* $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/$i/apps/;done
install -m 0644 %SOURCE14 $RPM_BUILD_ROOT/opt/kde3/share/mimelnk/application/
install -m 0644 %SOURCE15 $RPM_BUILD_ROOT/opt/kde3/share/mimelnk/application/
install -m 0644 %SOURCE16 $RPM_BUILD_ROOT/opt/kde3/share/mimelnk/application/
# fix bnc#396153
for i in 16x16 22x22 32x32 48x48 64x64 128x128; do
ln -s /opt/kde3/share/icons/crystalsvg/$i/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg/$i/filesystems/preferences-system-network.png
ln -s /opt/kde3/share/icons/crystalsvg/$i/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg/$i/filesystems/preferences-desktop.png
done
chmod a-x $RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/filesystems/file_broken.png
%if %suse_version > 1020
%fdupes -s $RPM_BUILD_ROOT
%endif
%if %suse_version > 1110
mkdir -p $RPM_BUILD_ROOT/etc/opt/kde3/share/applications
touch $RPM_BUILD_ROOT/etc/opt/kde3/share/applications/mimeinfo.cache
mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/applications
touch $RPM_BUILD_ROOT/opt/kde3/share/applications/mimeinfo.cache
%endif
# Create /etc/ld.so.conf.d/kdelibs3.conf
mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/kdelibs3.conf <<EOF
%ifarch s390x sparc64 x86_64 ppc64
/opt/kde3/lib64
%endif
/opt/kde3/lib
EOF
%post
%run_ldconfig
%run_permissions
%postun
rm -f usr/share/doc/KDE3-API/index.html
%run_ldconfig
%post arts
%run_ldconfig
%postun arts
%run_ldconfig
%post default-style
%run_ldconfig
%postun default-style
%run_ldconfig
%post doc
if [ -x %{regcat} ]; then
%{regcat} -a /opt/kde3/share/apps/ksgmltools2/customization/CATALOG.%{name} >/dev/null 2>&1
fi
if [ -x /usr/bin/edit-xml-catalog ]; then
edit-xml-catalog --group --catalog /etc/xml/suse-catalog.xml \
--add /etc/xml/%{FOR_ROOT_CAT}
fi
%postun doc
if [ "$1" = "0" -a -x %{regcat} ]; then
%{regcat} -r /opt/kde3/share/apps/ksgmltools2/customization/CATALOG.%{name} >/dev/null 2>&1
fi
# remove entries only on removal of file
if [ ! -f %{xml_sysconf_dir}/%{FOR_ROOT_CAT} -a -x /usr/bin/edit-xml-catalog ] ; then
edit-xml-catalog --group --catalog /etc/xml/suse-catalog.xml \
--del %{name}-%{version}
fi
exit 0
%clean
rm -rf ${RPM_BUILD_ROOT}
%files default-style
%defattr(-,root,root)
%doc AUTHORS COPYING COPYING.BSD COPYING.LIB NAMING README
/opt/kde3/%_lib/libkdefx.so.*
/opt/kde3/%_lib/kde3/plugins/styles/plastik.*
%files
%defattr(-,root,root)
%doc AUTHORS COPYING COPYING.BSD COPYING.LIB NAMING README
/etc/ld.so.conf.d/kdelibs3.conf
%dir /etc/opt/kde3
%dir /opt/kde3
%dir /opt/kde3/bin
%dir /opt/kde3/include
%dir /opt/kde3/share
%dir /opt/kde3/share/config.kcfg
%_mandir/man*/*
/opt/kde3/bin/checkXML
/opt/kde3/bin/dcop
/opt/kde3/bin/dcopclient
/opt/kde3/bin/dcopfind
/opt/kde3/bin/dcopobject
/opt/kde3/bin/dcopref
/opt/kde3/bin/dcops*
/opt/kde3/bin/dcopquit
/opt/kde3/bin/imagetops
/opt/kde3/bin/ka*
/opt/kde3/bin/kbuildsycoca
/opt/kde3/bin/kco*
/opt/kde3/bin/kcmshell
/opt/kde3/bin/kded
/opt/kde3/bin/kdeinit*
/opt/kde3/bin/start_kdeinit
/opt/kde3/bin/start_kdeinit_wrapper
/opt/kde3/bin/kde-config
/opt/kde3/bin/kde-menu
/opt/kde3/bin/kdesu_stub
/opt/kde3/bin/kdontchangethehostname
/opt/kde3/bin/kfile
/opt/kde3/bin/ki*
/opt/kde3/bin/kfmexec
/opt/kde3/bin/klauncher
/opt/kde3/bin/kmailservice
/opt/kde3/bin/ktradertest
/opt/kde3/bin/knotify
/opt/kde3/bin/kstartupconfig
/opt/kde3/bin/kdostartupconfig
%verify(not mode) /opt/kde3/bin/kpac_dhcp_helper
/opt/kde3/bin/ksendbugmail
/opt/kde3/bin/kshell
/opt/kde3/bin/ktelnetservice
/opt/kde3/bin/kwrapper
/opt/kde3/bin/lnusertemp
/opt/kde3/bin/make_driver_db_lpr
/opt/kde3/bin/khotnewstuff
/opt/kde3/bin/makekdewidgets
%dir /opt/kde3/%_lib
%dir /opt/kde3/%_lib/kde3
/opt/kde3/%_lib/kde3/dcopserver.*
/opt/kde3/%_lib/kde3/kaddprinterwizard.*
/opt/kde3/%_lib/kde3/kbuildsycoca.*
/opt/kde3/%_lib/kde3/kcmshell.*
/opt/kde3/%_lib/kde3/kcm_kresources.*
/opt/kde3/%_lib/kde3/kconf_update.*
/opt/kde3/%_lib/kde3/kcookiejar.*
/opt/kde3/%_lib/kde3/kded.*
/opt/kde3/%_lib/kde3/kded_proxyscout.*
/opt/kde3/%_lib/kde3/kfileaudiopreview.*
/opt/kde3/%_lib/kde3/klauncher.*
/opt/kde3/%_lib/kde3/knotify.*
/opt/kde3/%_lib/kde3/kabc*
/opt/kde3/%_lib/kde3/kbzip2filter.*
/opt/kde3/%_lib/kde3/kded_k*
/opt/kde3/%_lib/kde3/kdeprint_ext.*
/opt/kde3/%_lib/kde3/kdeprint_lp*
/opt/kde3/%_lib/kde3/kdeprint_rlpr.*
/opt/kde3/%_lib/kde3/kdeprint_tool_escputil.*
/opt/kde3/%_lib/kde3/kgzipfilter.*
/opt/kde3/%_lib/kde3/khtmlimagepart.*
/opt/kde3/%_lib/kde3/ki*
/opt/kde3/%_lib/kde3/kjavaappletviewer.*
/opt/kde3/%_lib/kde3/ktexteditor_*
/opt/kde3/%_lib/kde3/libk*
/opt/kde3/%_lib/kde3/kspell_*
/opt/kde3/%_lib/kde3/kstyle_plastik_config.*
/opt/kde3/%_lib/kde3/kstyle_highcontrast_config.*
/opt/kde3/%_lib/kde3/libshellscript.*
%exclude /opt/kde3/%_lib/kde3/plugins/styles/plastik.*
/opt/kde3/%_lib/kde3/plugins
/opt/kde3/%_lib/libDCOP.so.*
%exclude /opt/kde3/%_lib/libkdefx.so.*
/opt/kde3/%_lib/libk*.so.*
/opt/kde3/%_lib/libvcard.so.*
/opt/kde3/%_lib/libkdeinit*.so
/opt/kde3/%_lib/libnetworkstatus.so.*
/opt/kde3/%_lib/libconnectionmanager.so.*
/opt/kde3/%_lib/kde3/kded_networkstatus.*
/opt/kde3/share/applnk
%dir /opt/kde3/share/apps
/opt/kde3/share/apps/LICENSES
/opt/kde3/share/apps/ka*
/opt/kde3/share/apps/kc*
%dir /opt/kde3/share/apps/kdeprint
/opt/kde3/share/apps/kdeprint/apsdriver*
/opt/kde3/share/apps/kdeprint/filters
/opt/kde3/share/apps/kdeprint/icons
/opt/kde3/share/apps/kdeprint/lprngtooldriver1
/opt/kde3/share/apps/kdeprint/pics
%dir /opt/kde3/share/apps/kdeprint/plugins
/opt/kde3/share/apps/kdeprint/plugins/ext.print
/opt/kde3/share/apps/kdeprint/plugins/lp*.print
/opt/kde3/share/apps/kdeprint/plugins/rlpr.print
/opt/kde3/share/apps/kdeprint/s*
/opt/kde3/share/apps/kdeprint/t*
/opt/kde3/share/apps/kdeui
/opt/kde3/share/apps/kdewidgets
/opt/kde3/share/apps/khtml
/opt/kde3/share/apps/kio_uiserver
/opt/kde3/share/apps/kjava
/opt/kde3/share/apps/knotify
/opt/kde3/share/apps/kssl
/opt/kde3/share/apps/kstyle
/opt/kde3/share/apps/ktexteditor_*
/opt/kde3/share/apps/proxyscout
/opt/kde3/share/apps/knewstuff
/opt/kde3/share/autostart
/opt/kde3/share/config
/opt/kde3/share/emoticons
/opt/kde3/share/icons
/opt/kde3/share/locale
/opt/kde3/share/mimelnk
/opt/kde3/share/service*
%config /etc/kde3rc
/opt/kde3/share/applications
/opt/kde3/bin/cupsd*
/opt/kde3/bin/make_driver_db_cups
/opt/kde3/%_lib/kde3/kdeprint_cups.*
/opt/kde3/%_lib/kde3/cupsdconf.*
/opt/kde3/share/apps/kdeprint/cups*
/opt/kde3/share/apps/kdeprint/kde_logo.png
/opt/kde3/share/apps/kdeprint/plugins/cups.print
/opt/kde3/share/apps/kdeprint/preview*
%ifarch x86_64 ppc64 s390x mips64 sparc64
%dir /opt/kde3/lib
%dir /opt/kde3/lib/kde3
/opt/kde3/lib/kde3/plugins-lib64
%endif
/etc/xdg/menus
%if %suse_version > 1110
%dir /etc/opt/kde3
%dir /etc/opt/kde3/share
%dir /etc/opt/kde3/share/applications
%ghost /etc/opt/kde3/share/applications/mimeinfo.cache
%dir /opt/kde3
%dir /opt/kde3/share
%dir /opt/kde3/share/applications
%ghost /opt/kde3/share/applications/mimeinfo.cache
%endif
%files arts
%defattr(-,root,root)
/opt/kde3/bin/artsmessage
/opt/kde3/%_lib/libartskde.so.*
%files doc
%defattr(-,root,root)
%doc /opt/kde3/share/doc
/opt/kde3/bin/meinproc
/opt/kde3/share/apps/ksgmltools2
%config %{_sysconfdir}/xml/%{FOR_ROOT_CAT}
%files devel
%defattr(-,root,root)
%dir /opt/kde3/share/apps/kdelibs
%config /etc/opt/kde3/common_options
/opt/kde3/bin/dcopidl*
/opt/kde3/bin/kmimelist
/opt/kde3/bin/preparetips
/opt/kde3/bin/ksvgtopng
/opt/kde3/bin/kunittestmodrunner
#/opt/kde3/bin/MISC
/opt/kde3/include/*
/opt/kde3/share/apps/dcopidlng
/opt/kde3/share/apps/kdelibs/admin
/opt/kde3/%_lib/libartskde.la
/opt/kde3/%_lib/libkunittest.la
/opt/kde3/%_lib/libkunittest.so
/opt/kde3/%_lib/libartskde.so
/opt/kde3/%_lib/libDCOP.so
/opt/kde3/%_lib/libvcard.so
/opt/kde3/%_lib/libvcard.la
/opt/kde3/%_lib/libDCOP.la
/opt/kde3/%_lib/lib*.a
/opt/kde3/%_lib/libkabc_dir.la
/opt/kde3/%_lib/libkabc_dir.so
/opt/kde3/%_lib/libkabc_file.la
/opt/kde3/%_lib/libkabc_file.so
/opt/kde3/%_lib/libkabc.la
/opt/kde3/%_lib/libkabc_ldapkio.la
/opt/kde3/%_lib/libkabc_ldapkio.so
/opt/kde3/%_lib/libkabc.so
/opt/kde3/%_lib/libkatepartinterfaces.la
/opt/kde3/%_lib/libkatepartinterfaces.so
/opt/kde3/%_lib/libkdecore.la
/opt/kde3/%_lib/libkdecore.so
/opt/kde3/%_lib/libkdefakes.la
/opt/kde3/%_lib/libkdefakes.so
/opt/kde3/%_lib/libkdefx.la
/opt/kde3/%_lib/libkdefx.so
/opt/kde3/%_lib/libkdemm.la
/opt/kde3/%_lib/libkdemm.so
/opt/kde3/%_lib/libkdeprint.la
/opt/kde3/%_lib/libkdeprint_management.la
/opt/kde3/%_lib/libkdeprint_management.so
/opt/kde3/%_lib/libkdeprint.so
/opt/kde3/%_lib/libkdesasl.la
/opt/kde3/%_lib/libkdesasl.so
/opt/kde3/%_lib/libkdesu.la
/opt/kde3/%_lib/libkdesu.so
/opt/kde3/%_lib/libkdeui.la
/opt/kde3/%_lib/libkdeui.so
/opt/kde3/%_lib/libkdnssd.la
/opt/kde3/%_lib/libkdnssd.so
/opt/kde3/%_lib/libkhtml.la
/opt/kde3/%_lib/libkhtml.so
/opt/kde3/%_lib/libkimproxy.la
/opt/kde3/%_lib/libkimproxy.so
/opt/kde3/%_lib/libkio.la
/opt/kde3/%_lib/libkio.so
/opt/kde3/%_lib/libkjava.la
/opt/kde3/%_lib/libkjava.so
/opt/kde3/%_lib/libkjs.la
/opt/kde3/%_lib/libkjs.so
/opt/kde3/%_lib/libkmdi2.la
/opt/kde3/%_lib/libkmdi2.so
/opt/kde3/%_lib/libkmdi.la
/opt/kde3/%_lib/libkmdi.so
/opt/kde3/%_lib/libkmediaplayer.la
/opt/kde3/%_lib/libkmediaplayer.so
/opt/kde3/%_lib/libkmid.la
/opt/kde3/%_lib/libkmid.so
/opt/kde3/%_lib/libknewstuff.la
/opt/kde3/%_lib/libknewstuff.so
/opt/kde3/%_lib/libkntlm.la
/opt/kde3/%_lib/libkntlm.so
/opt/kde3/%_lib/libkparts.la
/opt/kde3/%_lib/libkparts.so
/opt/kde3/%_lib/libkresources.la
/opt/kde3/%_lib/libkresources.so
/opt/kde3/%_lib/libkscreensaver.la
/opt/kde3/%_lib/libkscreensaver.so
/opt/kde3/%_lib/libkscript.la
/opt/kde3/%_lib/libkscript.so
/opt/kde3/%_lib/libkspell2.la
/opt/kde3/%_lib/libkspell2.so
/opt/kde3/%_lib/libkspell.la
/opt/kde3/%_lib/libkspell.so
/opt/kde3/%_lib/libktexteditor.la
/opt/kde3/%_lib/libktexteditor.so
/opt/kde3/%_lib/libkutils.la
/opt/kde3/%_lib/libkutils.so
/opt/kde3/%_lib/libkwalletbackend.la
/opt/kde3/%_lib/libkwalletbackend.so
/opt/kde3/%_lib/libkwalletclient.la
/opt/kde3/%_lib/libkwalletclient.so
/opt/kde3/%_lib/libnetworkstatus.la
/opt/kde3/%_lib/libnetworkstatus.so
/opt/kde3/%_lib/libconnectionmanager.la
/opt/kde3/%_lib/libconnectionmanager.so
%changelog

@ -0,0 +1,344 @@
Index: khtml/khtmlview.h
===================================================================
--- khtml/khtmlview.h.orig
+++ khtml/khtmlview.h
@@ -314,6 +314,7 @@ private:
QStringList formCompletionItems(const QString &name) const;
void clearCompletionHistory(const QString& name);
void addFormCompletionItem(const QString &name, const QString &value);
+ void removeFormCompletionItem(const QString &name, const QString &value);
void addNonPasswordStorableSite( const QString& host );
bool nonPasswordStorableSite( const QString& host ) const;
Index: khtml/khtmlview.cpp
===================================================================
--- khtml/khtmlview.cpp.orig
+++ khtml/khtmlview.cpp
@@ -3088,6 +3088,16 @@ void KHTMLView::addFormCompletionItem(co
d->formCompletions->writeEntry(name, items);
}
+void KHTMLView::removeFormCompletionItem(const QString &name, const QString &value)
+{
+ if (!m_part->settings()->isFormCompletionEnabled())
+ return;
+
+ QStringList items = formCompletionItems(name);
+ if (items.remove(value))
+ d->formCompletions->writeEntry(name, items);
+}
+
void KHTMLView::addNonPasswordStorableSite(const QString& host)
{
if (!d->formCompletions) {
Index: khtml/rendering/render_form.h
===================================================================
--- khtml/rendering/render_form.h.orig
+++ khtml/rendering/render_form.h
@@ -272,10 +272,12 @@ private slots:
void spellCheckerMisspelling( const QString &text, const QStringList &, unsigned int pos);
void spellCheckerCorrected( const QString &, const QString &, unsigned int );
void spellCheckerFinished();
+ void slotRemoveFromHistory( const QString & );
private:
enum LineEditMenuID {
- ClearHistory
+ ClearHistory,
+ EditHistory
};
DOM::HTMLInputElementImpl* m_input;
KHTMLView* m_view;
Index: khtml/rendering/render_form.cpp
===================================================================
--- khtml/rendering/render_form.cpp.orig
+++ khtml/rendering/render_form.cpp
@@ -385,7 +385,9 @@ QPopupMenu *LineEditWidget::createPopupM
if (m_input->autoComplete()) {
popup->insertSeparator();
- int id = popup->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), ClearHistory );
+ int id = popup->insertItem( SmallIconSet("edit"), i18n("&Edit History..."), EditHistory );
+ popup->setItemEnabled( id, (compObj() && !compObj()->isEmpty()) );
+ id = popup->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), ClearHistory );
popup->setItemEnabled( id, (compObj() && !compObj()->isEmpty()) );
}
@@ -409,11 +411,25 @@ void LineEditWidget::extendedMenuActivat
m_view->clearCompletionHistory(m_input->name().string());
if (compObj())
compObj()->clear();
+ case EditHistory:
+ {
+ KHistoryComboEditor dlg( compObj() ? compObj()->items() : QStringList(), this );
+ connect( &dlg, SIGNAL( removeFromHistory(const QString&) ), SLOT( slotRemoveFromHistory(const QString&)) );
+ dlg.exec();
+ }
default:
break;
}
}
+void LineEditWidget::slotRemoveFromHistory(const QString &entry)
+{
+ m_view->removeFormCompletionItem(m_input->name().string(), entry);
+ if (compObj())
+ compObj()->removeItem(entry);
+}
+
+
bool LineEditWidget::event( QEvent *e )
{
if (KLineEdit::event(e))
Index: kdeui/kcombobox.h
===================================================================
--- kdeui/kcombobox.h.orig
+++ kdeui/kcombobox.h
@@ -24,8 +24,15 @@
#include <qlineedit.h>
#include <qcombobox.h>
+#include <qvbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qtoolbutton.h>
+#include <qheader.h>
#include <kcompletion.h>
+#include <kdialogbase.h>
+#include <klistview.h>
class QListBoxItem;
class QPopupMenu;
@@ -669,6 +676,12 @@ public:
*/
void reset() { slotReset(); }
+ /**
+ * When enabling it you have to connect to "removed" signal and save changes
+ */
+ void setHistoryEditorEnabled( bool enable );
+ bool isHistoryEditorEnabled() const;
+
public slots:
/**
* Adds an item to the end of the history list and to the completion list.
@@ -702,6 +715,8 @@ signals:
*/
void cleared();
+ void removed( const QString& item );
+
protected:
/**
* Handling key-events, the shortcuts to rotate the items.
@@ -741,10 +756,17 @@ private slots:
void slotClear();
/**
+ * Called from the popupmenu,
+ */
+ void slotEdit();
+
+ /**
* Appends our own context menu entry.
*/
void addContextMenuItems( QPopupMenu* );
+ void slotRemoveFromHistory( const QString & );
+
private:
void init( bool useCompletion );
void rotateUp();
@@ -774,6 +796,30 @@ private:
KHistoryComboPrivate* const d;
};
+class KDEUI_EXPORT KHistoryComboEditor : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ KHistoryComboEditor( const QStringList& entries, QWidget *parent = 0L );
+ ~KHistoryComboEditor();
+
+signals:
+ void removeFromHistory( const QString& );
+
+protected slots:
+ virtual void slotUser1(); // User1 is "Delete Entry" button
+ void slotSelectionChanged( QListViewItem * item );
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+
+private:
+ KListView *m_pListView;
+
+ class KHistoryComboEditorPrivate;
+ KHistoryComboEditorPrivate* const d;
+};
#endif
Index: kdeui/kcombobox.cpp
===================================================================
--- kdeui/kcombobox.cpp.orig
+++ kdeui/kcombobox.cpp
@@ -29,6 +29,7 @@
#include <kcursor.h>
#include <kiconloader.h>
#include <kicontheme.h>
+#include <klistviewsearchline.h>
#include <klineedit.h>
#include <klocale.h>
#include <knotifyclient.h>
@@ -343,10 +344,22 @@ void KComboBox::lineEditDeleted()
// *********************************************************************
// *********************************************************************
+class KHistoryCombo::KHistoryComboPrivate
+{
+public:
+ KHistoryComboPrivate() : bHistoryEditorEnabled(false)
+ {
+ }
+ ~KHistoryComboPrivate()
+ {
+ }
+
+ bool bHistoryEditorEnabled;
+};
// we are always read-write
KHistoryCombo::KHistoryCombo( QWidget *parent, const char *name )
- : KComboBox( true, parent, name ), d(0)
+ : KComboBox( true, parent, name ), d(new KHistoryComboPrivate)
{
init( true ); // using completion
}
@@ -354,7 +367,7 @@ KHistoryCombo::KHistoryCombo( QWidget *p
// we are always read-write
KHistoryCombo::KHistoryCombo( bool useCompletion,
QWidget *parent, const char *name )
- : KComboBox( true, parent, name ), d(0)
+ : KComboBox( true, parent, name ), d(new KHistoryComboPrivate)
{
init( useCompletion );
}
@@ -441,6 +454,10 @@ void KHistoryCombo::addContextMenuItems(
if ( menu )
{
menu->insertSeparator();
+ if (d->bHistoryEditorEnabled) {
+ int idedit = menu->insertItem( SmallIconSet("edit"), i18n("&Edit History..."), this, SLOT( slotEdit()) );
+ menu->setItemEnabled(idedit, count());
+ }
int id = menu->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), this, SLOT( slotClear()));
if (!count())
menu->setItemEnabled(id, false);
@@ -677,10 +694,104 @@ void KHistoryCombo::slotClear()
emit cleared();
}
+void KHistoryCombo::slotEdit()
+{
+ KHistoryComboEditor dlg( historyItems(), this );
+ connect( &dlg, SIGNAL( removeFromHistory(const QString&) ), SLOT( slotRemoveFromHistory(const QString&)) );
+ dlg.exec();
+}
+
+void KHistoryCombo::slotRemoveFromHistory(const QString &entry)
+{
+ removeFromHistory(entry);
+ emit removed(entry);
+}
+
+void KHistoryCombo::setHistoryEditorEnabled( bool enable )
+{
+ d->bHistoryEditorEnabled = enable;
+}
+
+bool KHistoryCombo::isHistoryEditorEnabled() const
+{
+ return d->bHistoryEditorEnabled;
+}
+
void KComboBox::virtual_hook( int id, void* data )
{ KCompletionBase::virtual_hook( id, data ); }
void KHistoryCombo::virtual_hook( int id, void* data )
{ KComboBox::virtual_hook( id, data ); }
+void KHistoryComboEditor::virtual_hook( int id, void* data )
+{ KDialogBase::virtual_hook( id, data ); }
+
+KHistoryComboEditor::KHistoryComboEditor( const QStringList& entries, QWidget *parent )
+: KDialogBase( parent, "khistorycomboeditor", true, i18n( "History Editor" ),
+ KDialogBase::Close | KDialogBase::User1, KDialogBase::User1, true,
+ KGuiItem( i18n( "&Delete Entry" ), "editdelete") ), d(0)
+{
+ QVBox* box = new QVBox( this );
+ box->setSpacing( KDialog::spacingHint() );
+ setMainWidget( box );
+
+ new QLabel( i18n( "This dialog allows you to delete unwanted history items." ), box );
+
+ // Add searchline
+ QHBox* searchbox = new QHBox( box );
+ searchbox->setSpacing( KDialog::spacingHint() );
+
+ QToolButton *clearSearch = new QToolButton(searchbox);
+ clearSearch->setTextLabel(i18n("Clear Search"), true);
+ clearSearch->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase"));
+ QLabel* slbl = new QLabel(i18n("&Search:"), searchbox);
+ KListViewSearchLine* listViewSearch = new KListViewSearchLine(searchbox);
+ slbl->setBuddy(listViewSearch);
+ connect(clearSearch, SIGNAL(pressed()), listViewSearch, SLOT(clear()));
+
+ // Add ListView
+ m_pListView = new KListView( box );
+ listViewSearch->setListView(m_pListView);
+ m_pListView->setAllColumnsShowFocus(true);
+ m_pListView->header()->hide();
+ m_pListView->addColumn("");
+ m_pListView->setRenameable( 0 );
+
+ box->setStretchFactor( m_pListView, 1 );
+
+ QStringList newlist = entries;
+ for ( QStringList::Iterator it = newlist.begin(); it != newlist.end(); ++it ) {
+ new QListViewItem( m_pListView, *it );
+ }
+
+ m_pListView->setMinimumSize( m_pListView->sizeHint() );
+
+ connect( m_pListView, SIGNAL( selectionChanged( QListViewItem * ) ),
+ this, SLOT( slotSelectionChanged( QListViewItem * ) ) );
+
+ enableButton( KDialogBase::User1, false );
+
+ resize( sizeHint() );
+}
+
+KHistoryComboEditor::~KHistoryComboEditor()
+{
+}
+
+void KHistoryComboEditor::slotUser1() // Delete button
+{
+ QListViewItem *item = m_pListView->selectedItem();
+
+ if ( item ) {
+ emit removeFromHistory( item->text(0) );
+ m_pListView->takeItem( item );
+ enableButton( KDialogBase::User1, false );
+ }
+}
+
+void KHistoryComboEditor::slotSelectionChanged( QListViewItem * item )
+{
+ enableButton( KDialogBase::User1, item );
+}
+
#include "kcombobox.moc"

@ -0,0 +1,44 @@
Index: kioslave/file/file.cc
===================================================================
--- kioslave/file/file.cc.orig
+++ kioslave/file/file.cc
@@ -69,6 +69,7 @@
#include <qvaluelist.h>
#include <qregexp.h>
+#include <dcopref.h>
#include <kshred.h>
#include <kdebug.h>
#include <kurl.h>
@@ -1609,6 +1610,31 @@ void FileProtocol::unmount( const QStrin
#endif /* HAVE_VOLMGT */
err = testLogFile( tmp );
+
+ if (err.contains("fstab") || err.contains("root")) {
+ QString olderr;
+ err = QString::null;
+
+ DCOPRef d("kded", "mediamanager");
+ d.setDCOPClient ( dcopClient() );
+ DCOPReply reply = d.call("properties", _point);
+ QString udi;
+
+ if ( reply.isValid() ) {
+ QStringList list = reply;
+ if (list.size())
+ udi = list[0];
+ }
+
+ if (!udi.isEmpty())
+ reply = d.call("unmount", udi);
+
+ if (udi.isEmpty() || !reply.isValid())
+ err = olderr;
+ else if (reply.isValid())
+ reply.get(err);
+ }
+
if ( err.isEmpty() )
finished();
else

@ -0,0 +1,240 @@
Index: kinit/wrapper.c
===================================================================
--- kinit/wrapper.c.orig
+++ kinit/wrapper.c
@@ -164,7 +164,9 @@ static int openSocket()
sock_file[strlen(sock_file)-1] = 0;
strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file));
- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1);
+ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
{
perror("Warning: Could not determine hostname: ");
return -1;
Index: kinit/lnusertemp.c
===================================================================
--- kinit/lnusertemp.c.orig
+++ kinit/lnusertemp.c
@@ -39,7 +39,7 @@
int check_tmp_dir(const char *tmp_dir);
int create_link(const char *file, const char *tmp_dir);
-int build_link(const char *tmp_prefix, const char *kde_prefix);
+int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname);
int check_tmp_dir(const char *tmp_dir)
{
@@ -89,7 +89,7 @@ int create_link(const char *file, const
}
-int build_link(const char *tmp_prefix, const char *kde_prefix)
+int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname)
{
struct passwd *pw_ent;
char kde_tmp_dir[PATH_MAX+1];
@@ -157,10 +157,21 @@ int build_link(const char *tmp_prefix, c
}
strncat(kde_tmp_dir, kde_prefix, PATH_MAX - strlen(kde_tmp_dir));
- if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0)
+
+ if( kdehostname )
+ {
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strncat(kde_tmp_dir+strlen(kde_tmp_dir), getenv("XAUTHLOCALHOSTNAME"), PATH_MAX - strlen(kde_tmp_dir) - 1);
+ else
+ return 0;
+ }
+ else
{
- perror("Aborting. Could not determine hostname: ");
- exit(255);
+ if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0)
+ {
+ perror("Could not determine hostname: ");
+ return 1;
+ }
}
kde_tmp_dir[sizeof(kde_tmp_dir)-1] = '\0';
@@ -266,7 +277,9 @@ int main(int argc, char **argv)
kde_prefix = "/cache-";
}
- res = build_link(tmp_prefix, kde_prefix);
+ res = build_link(tmp_prefix, kde_prefix, 1);
+ if( build_link(tmp_prefix, kde_prefix, 0))
+ res = 1;
free(tmp_prefix);
Index: kdecore/kstandarddirs.cpp
===================================================================
--- kdecore/kstandarddirs.cpp.orig
+++ kdecore/kstandarddirs.cpp
@@ -719,7 +719,10 @@ void KStandardDirs::createSpecialResourc
{
char hostname[256];
hostname[0] = 0;
- gethostname(hostname, 255);
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strlcpy(hostname, getenv("XAUTHLOCALHOSTNAME"), 255 );
+ else
+ gethostname(hostname, 255);
QString dir = QString("%1%2-%3").arg(localkdedir()).arg(type).arg(hostname);
char link[1024];
link[1023] = 0;
Index: kdecore/kcrash.cpp
===================================================================
--- kdecore/kcrash.cpp.orig
+++ kdecore/kcrash.cpp
@@ -466,7 +466,9 @@ static int openSocket()
sock_file[strlen(sock_file)-1] = 0;
strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file));
- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1);
+ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
{
perror("Warning: Could not determine hostname: ");
return -1;
Index: dcop/dcopserver_shutdown.c
===================================================================
--- dcop/dcopserver_shutdown.c.orig
+++ dcop/dcopserver_shutdown.c
@@ -95,7 +95,9 @@ static void getDCOPFile(char *dcop_file,
strncat(dcop_file, "/.DCOPserver_", n);
n -= strlen("/.DCOPserver_");
- if (gethostname(dcop_file+strlen(dcop_file), n) != 0)
+ if (getenv("XAUTHLOCALHOSTNAME"))
+ strncat(dcop_file+strlen(dcop_file), getenv("XAUTHLOCALHOSTNAME"), n);
+ else if (gethostname(dcop_file+strlen(dcop_file), n) != 0)
{
perror("Error. Could not determine hostname: ");
dcop_file[0] = '\0';
Index: dcop/dcopc.c
===================================================================
--- dcop/dcopc.c.orig
+++ dcop/dcopc.c
@@ -684,7 +684,9 @@ dcop_connect()
}
hostName[0] = '\0';
- if (gethostname(hostName, sizeof(hostName)))
+ if (getenv("XAUTHLOCALHOSTNAME"))
+ strlcpy(hostName, getenv("XAUTHLOCALHOSTNAME"),sizeof(hostName)-1);
+ else if (gethostname(hostName, sizeof(hostName)))
strcpy(hostName, "localhost");
else
hostName[sizeof(hostName)-1] = '\0';
Index: dcop/dcopclient.cpp
===================================================================
--- dcop/dcopclient.cpp.orig
+++ dcop/dcopclient.cpp
@@ -277,7 +277,9 @@ static QCString dcopServerFile(const QCS
{
char hostName[256];
hostName[0] = '\0';
- if (gethostname(hostName, sizeof(hostName)))
+ if (getenv("XAUTHLOCALHOSTNAME"))
+ fName += getenv("XAUTHLOCALHOSTNAME");
+ else if (gethostname(hostName, sizeof(hostName)))
{
fName += "localhost";
}
Index: dcop/KDE-ICE/Xtranssock.c
===================================================================
--- dcop/KDE-ICE/Xtranssock.c.orig
+++ dcop/KDE-ICE/Xtranssock.c
@@ -1444,6 +1444,7 @@ UnixHostReallyLocal (char *host)
{
char hostnamebuf[256];
+ char* xauthlocalname = getenv("XAUTHLOCALHOSTNAME");
TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf));
@@ -1451,6 +1452,10 @@ UnixHostReallyLocal (char *host)
{
return (1);
}
+ else if(xauthlocalname && strcmp (xauthlocalname, host) == 0)
+ {
+ return (1);
+ }
else
{
/*
Index: kded/khostname.cpp
===================================================================
--- kded/khostname.cpp.orig
+++ kded/khostname.cpp
@@ -111,7 +111,8 @@ static QCStringList split(const QCString
void KHostName::changeX()
{
- QString cmd = "xauth list";
+ const char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME");
+ QString cmd = "xauth -n list";
FILE *xFile = popen(QFile::encodeName(cmd), "r");
if (!xFile)
{
@@ -123,6 +124,7 @@ void KHostName::changeX()
char buf[1024+1];
while (!feof(xFile))
{
+ buf[1024]='\0';
QCString line = fgets(buf, 1024, xFile);
if (line.length())
line.truncate(line.length()-1); // Strip LF.
@@ -157,12 +159,17 @@ void KHostName::changeX()
QCString newNetId = newName+netId.mid(i);
QCString oldNetId = netId.left(i);
- if(oldNetId != oldName)
- continue;
+ if(oldNetId != oldName
+ && (!xauthlocalhostname || strcmp(xauthlocalhostname, oldNetId.data()) != 0))
+ continue;
- cmd = "xauth remove "+KProcess::quote(netId);
- system(QFile::encodeName(cmd));
- cmd = "xauth add ";
+ // don't nuke the xauth when XAUTHLOCALHOSTNAME points to it
+ if (!xauthlocalhostname || oldNetId != xauthlocalhostname)
+ {
+ cmd = "xauth -n remove "+KProcess::quote(netId);
+ system(QFile::encodeName(cmd));
+ }
+ cmd = "xauth -n add ";
cmd += KProcess::quote(newNetId);
cmd += " ";
cmd += KProcess::quote(authName);
@@ -276,7 +283,10 @@ void KHostName::changeDcop()
}
}
- // Remove old entries
+ // Remove old entries, but only if XAUTHLOCALHOSTNAME doesn't point
+ // to it
+ char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME");
+ if (!xauthlocalhostname || !oldNetId.contains(xauthlocalhostname))
{
QString cmd = "iceauth remove "+KProcess::quote("netid="+oldNetId);
system(QFile::encodeName(cmd));
@@ -368,9 +378,7 @@ int main(int argc, char **argv)
KHostName hn;
- if(!getenv("XAUTHLOCALHOSTNAME"))
- hn.changeX();
-
+ hn.changeX();
hn.changeDcop();
hn.changeStdDirs("socket");
hn.changeStdDirs("tmp");

@ -0,0 +1,10 @@
[Desktop Entry]
Encoding=UTF-8
Type=MimeType
MimeType=application/vnd.openxmlformats-officedocument.presentationml.presentation
Patterns=*.pptx;*.PPTX
Icon=presentation
Comment=Open XML Presentation Document
[Property::X-KDE-NativeExtension]
Type=QString
Value=.pptx

@ -0,0 +1,10 @@
[Desktop Entry]
Encoding=UTF-8
Type=MimeType
MimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Patterns=*.xlsx;*.XLSX
Icon=spreadsheet
Comment=Open XML Spreadsheet Document
[Property::X-KDE-NativeExtension]
Type=QString
Value=.xlsx

@ -0,0 +1,10 @@
[Desktop Entry]
Encoding=UTF-8
Type=MimeType
MimeType=application/vnd.openxmlformats-officedocument.wordprocessingml.document
Patterns=*.docx;*.DOCX
Icon=wordprocessing
Comment=Open XML Word Processing Document
[Property::X-KDE-NativeExtension]
Type=QString
Value=.docx

@ -0,0 +1,10 @@
Index: mimetypes/application/x-jar.desktop
===================================================================
--- mimetypes/application/x-jar.desktop.orig
+++ mimetypes/application/x-jar.desktop
@@ -87,4 +87,4 @@ Comment[zh_CN]=Java 归档
Comment[zh_HK]=Java 壓縮檔
Comment[zh_TW]=Java 壓縮檔案
Comment[zu]=Umqulu we-Java
-X-KDE-AutoEmbed=true
+X-KDE-AutoEmbed=false

@ -0,0 +1,16 @@
Index: kio/kio/kservice.cpp
===================================================================
--- kio/kio/kservice.cpp.orig
+++ kio/kio/kservice.cpp
@@ -249,7 +249,10 @@ KService::init( KDesktopFile *config )
m_bAllowAsDefault = config->readBoolEntry( "AllowDefault", true );
entryMap.remove("AllowDefault");
- m_initialPreference = config->readNumEntry( "InitialPreference", 1 );
+ m_initialPreference = config->readNumEntry( "X-KDE-InitialPreference", 1 );
+ entryMap.remove("X-KDE-InitialPreference");
+ if ( m_initialPreference == 1 )
+ m_initialPreference = config->readNumEntry( "InitialPreference", 1 );
entryMap.remove("InitialPreference");
// Store all additional entries in the property map.

@ -0,0 +1,543 @@
Index: kio/kio/krun.h
===================================================================
--- kio/kio/krun.h.orig
+++ kio/kio/krun.h
@@ -111,6 +111,8 @@ public:
*/
KRun( const KURL& url, QWidget* window, mode_t mode = 0,
bool isLocalFile = false, bool showProgressInfo = true );
+ KRun( const KURL& url, QWidget* window, const QCString& asn, mode_t mode = 0,
+ bool isLocalFile = false, bool showProgressInfo = true );
/**
* Destructor. Don't call it yourself, since a KRun object auto-deletes
@@ -210,6 +212,8 @@ public:
* @since 3.5.2
*/
static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles = false );
+ static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window,
+ const QCString& asn, bool tempFiles = false );
/**
* Open a list of URLs with a certain service (application).
*
@@ -226,6 +230,8 @@ public:
/// @since 3.5.3
/// @internal
static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles, const QString& suggestedFileName );
+ static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window,
+ const QCString& asn, bool tempFiles, const QString& suggestedFileName );
/**
* Open a list of URLs with.
@@ -269,6 +275,7 @@ public:
static pid_t runURL( const KURL& _url, const QString& _mimetype );
/// @since 3.5.3
/// @internal
+ static pid_t runURL( const KURL& _url, const QString& _mimetype, QWidget* window, const QCString& asn, bool tempFile, bool runExecutables, const QString& suggestedFileName );
static pid_t runURL( const KURL& _url, const QString& _mimetype, bool tempFile, bool runExecutables, const QString& suggestedFileName );
/**
@@ -299,6 +306,8 @@ public:
* of running command) if command was unsafe for map notification.
*/
static pid_t runCommand( const QString& cmd, const QString & execName, const QString & icon );
+ static pid_t runCommand( const QString& cmd, const QString & execName, const QString & icon,
+ QWidget* window, const QCString& asn );
/**
* Display the Open-With dialog for those URLs, and run the chosen application.
@@ -438,7 +447,7 @@ protected:
virtual void virtual_hook( int id, void* data );
private:
- void init (const KURL& url, QWidget* window, mode_t mode,
+ void init (const KURL& url, QWidget* window, const QCString& asn, mode_t mode,
bool isLocalFile, bool showProgressInfo);
private:
class KRunPrivate;
Index: kio/kio/krun.cpp
===================================================================
--- kio/kio/krun.cpp.orig
+++ kio/kio/krun.cpp
@@ -77,6 +77,7 @@ public:
QString m_localPath;
QString m_suggestedFileName;
QGuardedPtr <QWidget> m_window;
+ QCString m_asn;
};
pid_t KRun::runURL( const KURL& u, const QString& _mimetype )
@@ -109,14 +110,20 @@ bool KRun::isExecutableFile( const KURL&
return false;
}
-// This is called by foundMimeType, since it knows the mimetype of the URL
pid_t KRun::runURL( const KURL& u, const QString& _mimetype, bool tempFile, bool runExecutables, const QString& suggestedFileName )
{
+ return runURL( u, _mimetype, NULL, "", tempFile, runExecutables, suggestedFileName );
+}
+
+// This is called by foundMimeType, since it knows the mimetype of the URL
+pid_t KRun::runURL( const KURL& u, const QString& _mimetype, QWidget* window, const QCString& asn,
+ bool tempFile, bool runExecutables, const QString& suggestedFileName )
+{
bool noRun = false;
bool noAuth = false;
if ( _mimetype == "inode/directory-locked" )
{
- KMessageBoxWrapper::error( 0L,
+ KMessageBoxWrapper::error( window,
i18n("<qt>Unable to enter <b>%1</b>.\nYou do not have access rights to this location.</qt>").arg(u.htmlURL()) );
return 0;
}
@@ -133,7 +140,7 @@ pid_t KRun::runURL( const KURL& u, const
{
QString path = u.path();
shellQuote( path );
- return (KRun::runCommand(path)); // just execute the url as a command
+ return (KRun::runCommand(path, QString::null, QString::null, window, asn)); // just execute the url as a command
// ## TODO implement deleting the file if tempFile==true
}
else
@@ -155,14 +162,14 @@ pid_t KRun::runURL( const KURL& u, const
if ( noRun )
{
- KMessageBox::sorry( 0L,
+ KMessageBox::sorry( window,
i18n("<qt>The file <b>%1</b> is an executable program. "
"For safety it will not be started.</qt>").arg(u.htmlURL()));
return 0;
}
if ( noAuth )
{
- KMessageBoxWrapper::error( 0L,
+ KMessageBoxWrapper::error( window,
i18n("<qt>You do not have permission to run <b>%1</b>.</qt>").arg(u.htmlURL()) );
return 0;
}
@@ -182,7 +189,7 @@ pid_t KRun::runURL( const KURL& u, const
return displayOpenWithDialog( lst, tempFile, suggestedFileName );
}
- return KRun::run( *offer, lst, 0 /*window*/, tempFile, suggestedFileName );
+ return KRun::run( *offer, lst, window, asn, tempFile, suggestedFileName );
}
bool KRun::displayOpenWithDialog( const KURL::List& lst )
@@ -536,13 +543,13 @@ QString KRun::binaryName( const QString
}
static pid_t runCommandInternal( KProcess* proc, const KService* service, const QString& binName,
- const QString &execName, const QString & iconName )
+ const QString &execName, const QString & iconName, QWidget* window, QCString asn )
{
if (service && !service->desktopEntryPath().isEmpty()
&& !KDesktopFile::isAuthorizedDesktopFile( service->desktopEntryPath() ))
{
kdWarning() << "No authorization to execute " << service->desktopEntryPath() << endl;
- KMessageBox::sorry(0, i18n("You are not authorized to execute this file."));
+ KMessageBox::sorry(window, i18n("You are not authorized to execute this file."));
return 0;
}
QString bin = KRun::binaryName( binName, true );
@@ -550,10 +557,10 @@ static pid_t runCommandInternal( KProces
bool silent;
QCString wmclass;
KStartupInfoId id;
- bool startup_notify = KRun::checkStartupNotify( binName, service, &silent, &wmclass );
+ bool startup_notify = ( asn != "0" && KRun::checkStartupNotify( binName, service, &silent, &wmclass ));
if( startup_notify )
{
- id.initId();
+ id.initId( asn );
id.setupStartupEnv();
KStartupInfoData data;
data.setHostname();
@@ -572,6 +579,8 @@ static pid_t runCommandInternal( KProces
if( silent )
data.setSilent( KStartupInfoData::Yes );
data.setDesktop( KWin::currentDesktop());
+ if( window )
+ data.setLaunchedBy( window->winId());
KStartupInfo::sendStartup( id, data );
}
pid_t pid = KProcessRunner::run( proc, binName, id );
@@ -635,7 +644,8 @@ bool KRun::checkStartupNotify( const QSt
return true;
}
-static pid_t runTempService( const KService& _service, const KURL::List& _urls, bool tempFiles, const QString& suggestedFileName )
+static pid_t runTempService( const KService& _service, const KURL::List& _urls, QWidget* window,
+ const QCString& asn, bool tempFiles, const QString& suggestedFileName )
{
if (!_urls.isEmpty()) {
kdDebug(7010) << "runTempService: first url " << _urls.first().url() << endl;
@@ -654,7 +664,7 @@ static pid_t runTempService( const KServ
{
KURL::List singleUrl;
singleUrl.append(*it);
- runTempService( _service, singleUrl, tempFiles, suggestedFileName );
+ runTempService( _service, singleUrl, window, "", tempFiles, suggestedFileName );
}
KURL::List singleUrl;
singleUrl.append(_urls.first());
@@ -673,7 +683,7 @@ static pid_t runTempService( const KServ
proc->setWorkingDirectory(_service.path());
return runCommandInternal( proc, &_service, KRun::binaryName( _service.exec(), false ),
- _service.name(), _service.icon() );
+ _service.name(), _service.icon(), window, asn );
}
// WARNING: don't call this from processDesktopExec, since klauncher uses that too...
@@ -734,11 +744,22 @@ pid_t KRun::run( const KService& _servic
pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles )
{
- return run( _service, _urls, window, tempFiles, QString::null );
+ return run( _service, _urls, window, "", tempFiles, QString::null );
+}
+
+pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, const QCString& asn, bool tempFiles )
+{
+ return run( _service, _urls, window, asn, tempFiles, QString::null );
}
pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles, const QString& suggestedFileName )
{
+ return run( _service, _urls, window, "", tempFiles, suggestedFileName );
+}
+
+pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, const QCString& asn,
+ bool tempFiles, const QString& suggestedFileName )
+{
if (!_service.desktopEntryPath().isEmpty() &&
!KDesktopFile::isAuthorizedDesktopFile( _service.desktopEntryPath()))
{
@@ -759,7 +780,7 @@ pid_t KRun::run( const KService& _servic
if ( tempFiles || _service.desktopEntryPath().isEmpty() || !suggestedFileName.isEmpty() )
{
- return runTempService(_service, _urls, tempFiles, suggestedFileName);
+ return runTempService(_service, _urls, window, asn, tempFiles, suggestedFileName);
}
kdDebug(7010) << "KRun::run " << _service.desktopEntryPath() << endl;
@@ -773,9 +794,25 @@ pid_t KRun::run( const KService& _servic
QString error;
int pid = 0;
-
+
+ QCString myasn = asn;
+ // startServiceByDesktopPath() doesn't take QWidget*, add it to the startup info now
+ if( window != NULL )
+ {
+ if( myasn.isEmpty())
+ myasn = KStartupInfo::createNewStartupId();
+ if( myasn != "0" )
+ {
+ KStartupInfoId id;
+ id.initId( myasn );
+ KStartupInfoData data;
+ data.setLaunchedBy( window->winId());
+ KStartupInfo::sendChange( id, data );
+ }
+ }
+
int i = KApplication::startServiceByDesktopPath(
- _service.desktopEntryPath(), urls.toStringList(), &error, 0L, &pid
+ _service.desktopEntryPath(), urls.toStringList(), &error, 0L, &pid, myasn
);
if (i != 0)
@@ -800,33 +837,47 @@ pid_t KRun::run( const QString& _exec, c
pid_t KRun::runCommand( QString cmd )
{
- return KRun::runCommand( cmd, QString::null, QString::null );
+ return KRun::runCommand( cmd, QString::null, QString::null, NULL, "" );
}
pid_t KRun::runCommand( const QString& cmd, const QString &execName, const QString & iconName )
{
+ return KRun::runCommand( cmd, execName, iconName, NULL, "" );
+}
+
+pid_t KRun::runCommand( const QString& cmd, const QString &execName, const QString & iconName,
+ QWidget* window, const QCString& asn )
+{
kdDebug(7010) << "runCommand " << cmd << "," << execName << endl;
KProcess * proc = new KProcess;
proc->setUseShell(true);
*proc << cmd;
KService::Ptr service = KService::serviceByDesktopName( binaryName( execName, true ) );
- return runCommandInternal( proc, service.data(), binaryName( execName, false ), execName, iconName );
+ return runCommandInternal( proc, service.data(), binaryName( execName, false ), execName, iconName,
+ window, asn );
}
KRun::KRun( const KURL& url, mode_t mode, bool isLocalFile, bool showProgressInfo )
:m_timer(0,"KRun::timer")
{
- init (url, 0, mode, isLocalFile, showProgressInfo);
+ init (url, 0, "", mode, isLocalFile, showProgressInfo);
}
KRun::KRun( const KURL& url, QWidget* window, mode_t mode, bool isLocalFile,
bool showProgressInfo )
:m_timer(0,"KRun::timer")
{
- init (url, window, mode, isLocalFile, showProgressInfo);
+ init (url, window, "", mode, isLocalFile, showProgressInfo);
+}
+
+KRun::KRun( const KURL& url, QWidget* window, const QCString& asn, mode_t mode, bool isLocalFile,
+ bool showProgressInfo )
+ :m_timer(0,"KRun::timer")
+{
+ init (url, window, asn, mode, isLocalFile, showProgressInfo);
}
-void KRun::init ( const KURL& url, QWidget* window, mode_t mode, bool isLocalFile,
+void KRun::init ( const KURL& url, QWidget* window, const QCString& asn, mode_t mode, bool isLocalFile,
bool showProgressInfo )
{
m_bFault = false;
@@ -842,6 +893,7 @@ void KRun::init ( const KURL& url, QWidg
d = new KRunPrivate;
d->m_runExecutables = true;
d->m_window = window;
+ d->m_asn = asn;
setEnableExternalBrowser(true);
// Start the timer. This means we will return to the event
@@ -942,7 +994,7 @@ void KRun::init()
KService::Ptr service = KService::serviceByStorageId( exec );
if (service)
{
- run( *service, urls );
+ run( *service, urls, d->m_window, d->m_asn );
ok = true;
}
}
@@ -1235,7 +1287,7 @@ void KRun::foundMimeType( const QString&
{
KURL::List lst;
lst.append( m_strURL );
- m_bFinished = KRun::run( *serv, lst );
+ m_bFinished = KRun::run( *serv, lst, d->m_window, d->m_asn );
/// Note: the line above means that if that service failed, we'll
/// go to runURL to maybe find another service, even though a dialog
/// box was displayed. That's good if runURL tries another service,
@@ -1250,7 +1302,7 @@ void KRun::foundMimeType( const QString&
m_strURL.setPath( d->m_localPath );
}
- if (!m_bFinished && KRun::runURL( m_strURL, type, false, d->m_runExecutables, d->m_suggestedFileName )){
+ if (!m_bFinished && KRun::runURL( m_strURL, type, d->m_window, d->m_asn, false, d->m_runExecutables, d->m_suggestedFileName )){
m_bFinished = true;
}
else{
Index: kdecore/kstartupinfo.cpp
===================================================================
--- kdecore/kstartupinfo.cpp.orig
+++ kdecore/kstartupinfo.cpp
@@ -1109,7 +1109,7 @@ unsigned long KStartupInfoId::timestamp(
struct KStartupInfoDataPrivate
{
KStartupInfoDataPrivate() : desktop( 0 ), wmclass( "" ), hostname( "" ),
- silent( KStartupInfoData::Unknown ), timestamp( -1U ), screen( -1 ) {}
+ silent( KStartupInfoData::Unknown ), timestamp( -1U ), screen( -1 ), xinerama( -1 ), launched_by( 0 ) {}
QString bin;
QString name;
QString description;
@@ -1121,6 +1121,8 @@ struct KStartupInfoDataPrivate
KStartupInfoData::TriState silent;
unsigned long timestamp;
int screen;
+ int xinerama;
+ WId launched_by;
};
QString KStartupInfoData::to_text() const
@@ -1151,6 +1153,10 @@ QString KStartupInfoData::to_text() cons
ret += QString::fromLatin1( " TIMESTAMP=%1" ).arg( d->timestamp );
if( d->screen != -1 )
ret += QString::fromLatin1( " SCREEN=%1" ).arg( d->screen );
+ if( d->xinerama != -1 )
+ ret += QString::fromLatin1( " XINERAMA=%1" ).arg( d->xinerama );
+ if( d->launched_by != 0 )
+ ret += QString::fromLatin1( " LAUNCHED_BY=%1" ).arg( d->launched_by );
return ret;
}
@@ -1169,6 +1175,8 @@ KStartupInfoData::KStartupInfoData( cons
const QString silent_str = QString::fromLatin1( "SILENT=" );
const QString timestamp_str = QString::fromLatin1( "TIMESTAMP=" );
const QString screen_str = QString::fromLatin1( "SCREEN=" );
+ const QString xinerama_str = QString::fromLatin1( "XINERAMA=" );
+ const QString launched_by_str = QString::fromLatin1( "LAUNCHED_BY=" );
for( QStringList::Iterator it = items.begin();
it != items.end();
++it )
@@ -1199,6 +1207,10 @@ KStartupInfoData::KStartupInfoData( cons
d->timestamp = get_unum( *it );
else if( ( *it ).startsWith( screen_str ))
d->screen = get_num( *it );
+ else if( ( *it ).startsWith( xinerama_str ))
+ d->xinerama = get_num( *it );
+ else if( ( *it ).startsWith( launched_by_str ))
+ d->launched_by = get_num( *it );
}
}
@@ -1242,6 +1254,10 @@ void KStartupInfoData::update( const KSt
d->timestamp = data_P.timestamp();
if( data_P.screen() != -1 )
d->screen = data_P.screen();
+ if( data_P.xinerama() != -1 && xinerama() != -1 ) // don't overwrite
+ d->xinerama = data_P.xinerama();
+ if( data_P.launchedBy() != 0 && launchedBy() != 0 ) // don't overwrite
+ d->launched_by = data_P.launchedBy();
}
KStartupInfoData::KStartupInfoData()
@@ -1412,6 +1428,26 @@ int KStartupInfoData::screen() const
return d->screen;
}
+void KStartupInfoData::setXinerama( int xinerama )
+ {
+ d->xinerama = xinerama;
+ }
+
+int KStartupInfoData::xinerama() const
+ {
+ return d->xinerama;
+ }
+
+void KStartupInfoData::setLaunchedBy( WId window )
+ {
+ d->launched_by = window;
+ }
+
+WId KStartupInfoData::launchedBy() const
+ {
+ return d->launched_by;
+ }
+
static
long get_num( const QString& item_P )
{
Index: kdecore/netwm_def.h
===================================================================
--- kdecore/netwm_def.h.orig
+++ kdecore/netwm_def.h
@@ -610,6 +610,7 @@ public:
WM2WindowRole = 1<<11, ///< @since 3.3
WM2ClientMachine = 1<<12, ///< @since 3.3
WM2ShowingDesktop = 1<<13, ///< @since 3.5
+ WM2FullPlacement = 1<<14,
WM2DesktopLayout = 1<<15 ///< @since 3.5.8
};
Index: kdecore/netwm.cpp
===================================================================
--- kdecore/netwm.cpp.orig
+++ kdecore/netwm.cpp
@@ -145,6 +145,9 @@ static Atom net_wm_state_stays_on_top =
// used to determine whether application window is managed or not
static Atom xa_wm_state = 0;
+// ability flags
+static Atom net_wm_full_placement = 0;
+
static Bool netwm_atoms_created = False;
const unsigned long netwm_sendevent_mask = (SubstructureRedirectMask|
SubstructureNotifyMask);
@@ -236,7 +239,7 @@ static int wcmp(const void *a, const voi
}
-static const int netAtomCount = 84;
+static const int netAtomCount = 85;
static void create_atoms(Display *d) {
static const char * const names[netAtomCount] =
{
@@ -330,7 +333,9 @@ static void create_atoms(Display *d) {
"_KDE_NET_WM_TEMPORARY_RULES",
"WM_STATE",
- "WM_PROTOCOLS"
+ "WM_PROTOCOLS",
+
+ "_NET_WM_FULL_PLACEMENT"
};
Atom atoms[netAtomCount], *atomsp[netAtomCount] =
@@ -425,7 +430,9 @@ static void create_atoms(Display *d) {
&kde_net_wm_temporary_rules,
&xa_wm_state,
- &wm_protocols
+ &wm_protocols,
+
+ &net_wm_full_placement
};
assert( !netwm_atoms_created );
@@ -1355,6 +1362,8 @@ void NETRootInfo::setSupported() {
if (p->properties[ PROTOCOLS2 ] & WM2KDETemporaryRules)
atoms[pnum++] = kde_net_wm_temporary_rules;
+ if (p->properties[ PROTOCOLS2 ] & WM2FullPlacement)
+ atoms[pnum++] = net_wm_full_placement;
XChangeProperty(p->display, p->root, net_supported, XA_ATOM, 32,
PropModeReplace, (unsigned char *) atoms, pnum);
@@ -1587,6 +1596,8 @@ void NETRootInfo::updateSupportedPropert
else if( atom == kde_net_wm_temporary_rules )
p->properties[ PROTOCOLS2 ] |= WM2KDETemporaryRules;
+ else if( atom == net_wm_full_placement )
+ p->properties[ PROTOCOLS2 ] |= WM2FullPlacement;
}
extern Time qt_x_user_time;
Index: kdecore/kstartupinfo.h
===================================================================
--- kdecore/kstartupinfo.h.orig
+++ kdecore/kstartupinfo.h
@@ -635,6 +635,30 @@ class KDECORE_EXPORT KStartupInfoData
* This is usually not necessary to set, as it's set by default to qt_xscreen().
*/
void setScreen( int screen );
+
+ /**
+ * The Xinerama screen for the startup notification, -1 if unknown.
+ */
+ int xinerama() const;
+
+ /**
+ * Sets the Xinerama screen for the startup notification ( i.e. the screeen on which
+ * the starting application should appear ).
+ * @param xinerama the Xinerama screen for the startup notification
+ */
+ void setXinerama( int xinerama );
+
+ /**
+ * The toplevel window of the application that caused this startup notification,
+ * 0 if unknown.
+ */
+ WId launchedBy() const;
+
+ /**
+ * Sets the toplevel window of the application that caused this startup notification.
+ * @param window window ID of the toplevel window that is responsible for this startup
+ */
+ void setLaunchedBy( WId window );
/**
* Updates the notification data from the given data. Some data, such as the desktop

@ -0,0 +1,44 @@
Index: catalog.xml
===================================================================
--- /dev/null
+++ catalog.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
+"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"
+ prefer="public">
+<public publicId="-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
+ uri="dtd/kdex.dtd" />
+<public publicId="-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN"
+ uri="dtd/rdbhier2.elements" />
+<public publicId="-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN"
+ uri="dtd/rdbpool.elements" />
+<public publicId="-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN"
+ uri="dtd/modifications.elements" />
+
+<public publicId="-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN"
+ uri="entities/general.entities" />
+<public publicId="-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN"
+ uri="entities/contributor.entities" />
+
+<public publicId="-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN"
+ uri="entities/l10n.entities" />
+
+<public publicId="-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN"
+ uri="obsolete/kdex.dtd" />
+<public publicId="-//KDE//ENTITIES DocBook XML General Entity Declarations V1.1//EN"
+ uri="obsolete/general.entities" />
+<public publicId="-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.0//EN"
+ uri="obsolete/rdbpool.elements" />
+<public publicId="-//KDE//ELEMENTS DocBook XML Modifications V1.0//EN"
+ uri="obsolete/modifications.elements" />
+
+
+<public publicId="-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN"
+ uri="obsolete/kdex-412-10.dtd" />
+
+
+<public publicId="-//KDE//DTD DocBook XML V4.1-Based Variant V1.0//EN"
+ uri="obsolete/kdex-412-10.dtd" />
+</catalog>

@ -0,0 +1,47 @@
http://www.kde.org/info/security/advisory-20091027-1.txt
Index: xmlhttprequest.cpp
===================================================================
--- khtml/ecma/xmlhttprequest.cpp (revision 954808)
+++ khtml/ecma/xmlhttprequest.cpp (working copy)
@@ -342,17 +342,17 @@
{
aborted = false;
+ const QString protocol = url.protocol().lower();
+ // Abandon the request when the protocol is other than "http",
+ // instead of blindly doing a KIO::get on other protocols like file:/.
+ if (!protocol.startsWith("http") && !protocol.startsWith("webdav"))
+ {
+ abort();
+ return;
+ }
+
if (method == "post") {
- QString protocol = url.protocol().lower();
- // Abondon the request when the protocol is other than "http",
- // instead of blindly changing it to a "get" request.
- if (!protocol.startsWith("http") && !protocol.startsWith("webdav"))
- {
- abort();
- return;
- }
-
// FIXME: determine post encoding correctly by looking in headers
// for charset.
QByteArray buf;
@@ -763,11 +763,11 @@
if (obj.isValid() && obj.inherits(&DOMDocument::info)) {
DOM::Node docNode = static_cast<KJS::DOMDocument *>(obj.imp())->toNode();
DOM::DocumentImpl *doc = static_cast<DOM::DocumentImpl *>(docNode.handle());
-
+
try {
body = doc->toString().string();
// FIXME: also need to set content type, including encoding!
-
+
} catch(DOM::DOMException& e) {
Object err = Error::create(exec, GeneralError, "Exception serializing document");
exec->setException(err);
Loading…
Cancel
Save