summaryrefslogtreecommitdiffstats
path: root/redhat
diff options
context:
space:
mode:
Diffstat (limited to 'redhat')
-rw-r--r--redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-ftbfs.patch10
-rw-r--r--redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-libsuffix.patch11
-rw-r--r--redhat/applications/kbiff/kbiff-14.0.0-ftbfs.patch11
-rw-r--r--redhat/applications/kdbg/kdbg-14.0.0.spec152
-rw-r--r--redhat/applications/tdenetworkmanager/tdenetworkmanager-14.0.0.spec (renamed from redhat/applications/knetworkmanager9/knetworkmanager9-14.0.0.spec)9
-rw-r--r--redhat/applications/tdepowersave/tdepowersave-14.0.0.spec (renamed from redhat/applications/kpowersave-nohal/kpowersave-nohal-14.0.0.spec)11
-rw-r--r--redhat/dependencies/avahi-tqt/avahi-tqt-14.0.0.spec2
-rw-r--r--redhat/dependencies/sip4-tqt/sip4-tqt.spec136
-rw-r--r--redhat/extras/trinity-desktop/trinity-desktop-14.0.0.spec19
-rw-r--r--redhat/tdebase/tdebase-14.0.0-bookmark_global_copy.patch27
-rw-r--r--redhat/tdebase/tdebase-14.0.0-default_menu_icon.patch20
-rw-r--r--redhat/tdebase/tdebase-14.0.0-displayconfig_translation.patch37
-rw-r--r--redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch20
-rw-r--r--redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch~20
-rw-r--r--redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch1002
-rw-r--r--redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch~1002
-rw-r--r--redhat/tdebase/tdebase-14.0.0-kickoff_default_favs.patch16
-rw-r--r--redhat/tdebase/tdebase-14.0.0-kickoff_xdg_dirs.patch45
-rw-r--r--redhat/tdebase/tdebase-14.0.0-konsole_wordseps.patch48
-rw-r--r--redhat/tdebase/tdebase-14.0.0-open_terminal_here.patch11
-rw-r--r--redhat/tdebase/tdebase-14.0.0-suspend_unmount.patch151
-rw-r--r--redhat/tdebase/tdebase-14.0.0-vibrate_dialog.patch186
-rw-r--r--redhat/tdebase/tdebase-14.0.0.spec49
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch2
-rw-r--r--redhat/tdelibs/tdelibs-14.0.0-cups_by_default.patch33
-rw-r--r--redhat/tdelibs/tdelibs-14.0.0-fix_battery_charge.patch18
-rw-r--r--redhat/tdelibs/tdelibs-14.0.0-xdg_dirs_set_path.patch150
-rw-r--r--redhat/tdelibs/tdelibs-14.0.0.spec39
28 files changed, 3209 insertions, 28 deletions
diff --git a/redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-ftbfs.patch b/redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-ftbfs.patch
new file mode 100644
index 000000000..8c4b63482
--- /dev/null
+++ b/redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-ftbfs.patch
@@ -0,0 +1,10 @@
+--- trinity-gtk3-tqt-engine-14.0.0~pre82+f0afd14d/tdegtk/Makefile.am.ORI 2013-07-07 15:07:12.912770044 +0200
++++ trinity-gtk3-tqt-engine-14.0.0~pre82+f0afd14d/tdegtk/Makefile.am 2013-07-07 15:11:43.224706604 +0200
+@@ -55,6 +55,6 @@
+ libtqtcairo_la_CFLAGS = $(TDEGTK_CFLAGS) $(CAIRO_CFLAGS) $(GTK3_CFLAGS)
+ libtqtcairo_la_CXXFLAGS = $(TDEGTK_CXXFLAGS) $(TDEGTK_CFLAGS) $(CAIRO_CFLAGS) $(GTK3_CFLAGS)
+
+-libtqtcairo_la_LIBADD = $(TDEGTK_LIBADD)
++libtqtcairo_la_LIBADD = $(TDEGTK_LIBADD) $(LIB_QT) $(LIB_TDEUI)
+
+ libtqtcairo_la_LDFLAGS = $(TDEGTK_LDFLAGS) $(CAIRO_LIBS) $(GTK3_LIBS)
diff --git a/redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-libsuffix.patch b/redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-libsuffix.patch
new file mode 100644
index 000000000..ce8bffee9
--- /dev/null
+++ b/redhat/applications/gtk3-tqt-engine/gtk3-tqt-engine-14.0.0-libsuffix.patch
@@ -0,0 +1,11 @@
+--- trinity-gtk3-tqt-engine-14.0.0~pre82+f0afd14d/tdegtk/Makefile.am 2013-07-07 15:16:58.922069997 +0200
++++ trinity-gtk3-tqt-engine-14.0.0~pre82+f0afd14d/tdegtk/Makefile.am.libsuffix 2013-07-07 15:23:35.272293968 +0200
+@@ -36,7 +36,7 @@
+ $(srcdir)/tdegtk-baseengine.cpp \
+ $(srcdir)/tdegtk-theme.cpp
+
+-enginedir = $(GTK3_PREFIX)/lib/gtk-3.0/$(GTK3_VERSION)/theming-engines
++enginedir = $(GTK3_PREFIX)/lib64/gtk-3.0/$(GTK3_VERSION)/theming-engines
+ engine_LTLIBRARIES = libtdegtk.la
+
+ libtdegtk_la_SOURCES = $(source_h) $(source_c)
diff --git a/redhat/applications/kbiff/kbiff-14.0.0-ftbfs.patch b/redhat/applications/kbiff/kbiff-14.0.0-ftbfs.patch
new file mode 100644
index 000000000..789918cdc
--- /dev/null
+++ b/redhat/applications/kbiff/kbiff-14.0.0-ftbfs.patch
@@ -0,0 +1,11 @@
+--- trinity-kbiff-14.0.0~pre6+b63c54d4/kbiff/Makefile.am.ORI 2013-07-07 13:17:16.270257111 +0200
++++ trinity-kbiff-14.0.0~pre6+b63c54d4/kbiff/Makefile.am 2013-07-07 13:17:41.911536825 +0200
+@@ -24,7 +24,7 @@
+
+ # the libraries to link against. Be aware of the order. First the libraries,
+ # that depend on the following ones.
+-kbiff_la_LIBADD = $(LIB_KFILE) $(LIB_KIO)
++kbiff_la_LIBADD = $(LIB_KFILE) $(LIB_KIO) $(LIB_QT) $(LIB_TDECORE) -lDCOP $(LIB_TDEUI)
+
+ # this option you can leave out. Just, if you use "make dist", you need it
+ noinst_HEADERS = setupdlg.h kbiff.h kbiffmonitor.h notify.h kbiffurl.h \
diff --git a/redhat/applications/kdbg/kdbg-14.0.0.spec b/redhat/applications/kdbg/kdbg-14.0.0.spec
new file mode 100644
index 000000000..a3553ff45
--- /dev/null
+++ b/redhat/applications/kdbg/kdbg-14.0.0.spec
@@ -0,0 +1,152 @@
+# Default version for this component
+%define tde_pkg kdbg
+%define tde_version 14.0.0
+
+# If TDE is built in a specific prefix (e.g. /opt/trinity), the release will be suffixed with ".opt".
+%if "%{?tde_prefix}" != "/usr"
+%define _variant .opt
+%endif
+
+# TDE specific building variables
+%define tde_bindir %{tde_prefix}/bin
+%define tde_datadir %{tde_prefix}/share
+%define tde_docdir %{tde_datadir}/doc
+%define tde_includedir %{tde_prefix}/include
+%define tde_libdir %{tde_prefix}/%{_lib}
+%define tde_mandir %{tde_datadir}/man
+
+%define tde_tdeappdir %{tde_datadir}/applications/tde
+%define tde_tdedocdir %{tde_docdir}/tde
+%define tde_tdeincludedir %{tde_includedir}/tde
+%define tde_tdelibdir %{tde_libdir}/trinity
+
+%define _docdir %{tde_docdir}
+
+
+Name: trinity-%{tde_pkg}
+Summary: graphical debugger interface [Trinity]
+Version: 2.2.2
+Release: %{?!preversion:1}%{?preversion:0_%{preversion}}%{?dist}%{?_variant}
+
+License: GPLv2+
+Group: Applications/Utilities
+
+Vendor: Trinity Project
+Packager: Francois Andriot <[email protected]>
+URL: http://www.trinitydesktop.org/
+
+Prefix: %{_prefix}
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+#Source0: %{name}-%{tde_version}%{?preversion:~%{preversion}}.tar.gz
+Source0: kdbg-master.tar.gz
+Source1: admin-master.tar.gz
+
+BuildRequires: trinity-tqtinterface-devel >= %{tde_version}
+BuildRequires: trinity-tdelibs-devel >= %{tde_version}
+BuildRequires: trinity-tdebase-devel >= %{tde_version}
+BuildRequires: desktop-file-utils
+BuildRequires: gettext
+
+
+%description
+KDbg is a graphical user interface to gdb, the GNU debugger. It provides
+an intuitive interface for setting breakpoints, inspecting variables,
+stepping through code and much more. KDbg requires TDE but you can of
+course debug any program.
+
+KDbg can also debug XSLT (XML stylesheet translation) scripts by
+interfacing with xsldbg. For this the package kxsldbg must be installed.
+
+Features include the following:
+* Inspection of variable values in a tree structure.
+* Direct member: For certain compound data types the most important
+ member values are displayed next to the variable name, so that it is
+ not necessary to expand the subtree of that variable in order to see
+ the member value. KDbg can also display Qt's QString values, which
+ are Unicode strings.
+* Debugger at your finger tips: The basic debugger functions (step,
+ next, run, finish, until, set/clear/enable/disable breakpoint) are
+ bound to function keys F5 through F10. Quick and easy.
+* View source code, search text, set program arguments and environment
+ variables, display arbitrary expressions.
+* Debugging of core dumps, attaching to running processes is possible.
+* Conditional breakpoints.
+
+%if 0%{?suse_version} || 0%{?pclinuxos}
+%debug_package
+%endif
+
+##########
+
+%prep
+#setup -q -n %{name}-%{tde_version}%{?preversion:~%{preversion}}
+%setup -q -a 1 -n kdbg-master
+rmdir admin
+mv admin-master admin
+
+%__cp -f "/usr/share/aclocal/libtool.m4" "admin/libtool.m4.in"
+%__cp -f "/usr/share/libtool/config/ltmain.sh" "admin/ltmain.sh" || %__cp -f "/usr/share/libtool/ltmain.sh" "admin/ltmain.sh"
+%__make -f "admin/Makefile.common"
+
+
+%build
+unset QTDIR QTINC QTLIB
+export PATH="%{tde_bindir}:${PATH}"
+export LDFLAGS="-L%{tde_libdir} -I%{tde_includedir}"
+
+%configure \
+ --prefix=%{tde_prefix} \
+ --exec-prefix=%{tde_prefix} \
+ --bindir=%{tde_bindir} \
+ --datadir=%{tde_datadir} \
+ --includedir=%{tde_tdeincludedir} \
+ --docdir=%{tde_tdedocdir} \
+ --libdir=%{tde_libdir} \
+ --disable-rpath
+
+%__make %{?_smp_mflags}
+
+
+%install
+export PATH="%{tde_bindir}:${PATH}"
+%__rm -rf %{buildroot}
+%__make install DESTDIR=%{buildroot}
+
+%find_lang %{tde_pkg}
+
+
+%clean
+%__rm -rf %{buildroot}
+
+
+%post
+update-desktop-database %{tde_appdir} > /dev/null
+touch --no-create %{tde_datadir}/icons/hicolor || :
+gtk-update-icon-cache --quiet %{tde_datadir}/icons/hicolor || :
+gtk-update-icon-cache --quiet %{tde_datadir}/icons/locolor || :
+
+
+%postun
+update-desktop-database %{tde_appdir} > /dev/null
+touch --no-create %{tde_datadir}/icons/hicolor || :
+gtk-update-icon-cache --quiet %{tde_datadir}/icons/hicolor || :
+gtk-update-icon-cache --quiet %{tde_datadir}/icons/locolor || :
+
+
+%files -f %{tde_pkg}.lang
+%defattr(-,root,root,-)
+%{tde_bindir}/kdbg
+%{tde_tdeappdir}/kdbg.desktop
+%{tde_datadir}/apps/kdbg/
+%{tde_datadir}/config/kdbgrc
+%lang(de) %{tde_tdedocdir}/HTML/de/kdbg/
+%lang(en) %{tde_tdedocdir}/HTML/en/kdbg/
+%lang(ru) %{tde_tdedocdir}/HTML/ru/kdbg/
+%{tde_datadir}/icons/hicolor/*/apps/kdbg.png
+%{tde_datadir}/icons/locolor/*/apps/kdbg.png
+
+
+%changelog
+* Fri Jul 05 2013 Francois Andriot <[email protected]> - 2.2.2-1
+- Initial release for TDE 14.0.0
diff --git a/redhat/applications/knetworkmanager9/knetworkmanager9-14.0.0.spec b/redhat/applications/tdenetworkmanager/tdenetworkmanager-14.0.0.spec
index 6dbe572f5..ed472f8f4 100644
--- a/redhat/applications/knetworkmanager9/knetworkmanager9-14.0.0.spec
+++ b/redhat/applications/tdenetworkmanager/tdenetworkmanager-14.0.0.spec
@@ -1,5 +1,5 @@
# Default version for this component
-%define tde_pkg knetworkmanager9
+%define tde_pkg tdenetworkmanager
%define tde_version 14.0.0
# If TDE is built in a specific prefix (e.g. /opt/trinity), the release will be suffixed with ".opt".
@@ -32,7 +32,8 @@ Summary: Trinity applet for Network Manager
Group: Applications/Internet
License: GPLv2+
-URL: http://en.opensuse.org/Projects/KNetworkManager
+#URL: http://en.opensuse.org/Projects/KNetworkManager
+URL: http://www.trinitydesktop.org/
Source0: %{name}-%{tde_version}%{?preversion:~%{preversion}}.tar.gz
@@ -44,6 +45,10 @@ BuildRequires: trinity-tdebase-devel >= %{tde_version}
BuildRequires: desktop-file-utils
BuildRequires: gettext
+
+Obsoletes: trinity-knetworkmanager < %{version}-%{release}
+Provides: trinity-knetworkmanager = %{version}-%{release}
+
%if 0%{?rhel} || 0%{?fedora}
Requires: NetworkManager-gnome
%else
diff --git a/redhat/applications/kpowersave-nohal/kpowersave-nohal-14.0.0.spec b/redhat/applications/tdepowersave/tdepowersave-14.0.0.spec
index c32f525e0..070ee3021 100644
--- a/redhat/applications/kpowersave-nohal/kpowersave-nohal-14.0.0.spec
+++ b/redhat/applications/tdepowersave/tdepowersave-14.0.0.spec
@@ -1,5 +1,5 @@
# Default version for this component
-%define tdecomp kpowersave-nohal
+%define tdecomp tdepowersave
%define tde_version 14.0.0
# If TDE is built in a specific prefix (e.g. /opt/trinity), the release will be suffixed with ".opt".
@@ -48,9 +48,11 @@ BuildRequires: trinity-tdelibs-devel >= %{tde_version}
BuildRequires: trinity-tdebase-devel >= %{tde_version}
BuildRequires: desktop-file-utils
+Obsoletes: trinity-kpowersave < %{version}-%{release}
+Provides: trinity-kpowersave = %{version}-%{release}
%description
-KPowersave is a TDE systray applet which allows to control the power
+TDEPowersave is a TDE systray applet which allows to control the power
management settings and policies of your computer.
Current feature list:
@@ -87,6 +89,7 @@ settings for:
%prep
%setup -q -n %{name}-%{tde_version}%{?preversion:~%{preversion}}
+
%build
unset QTDIR QTINC QTLIB
export PATH="%{tde_bindir}:${PATH}"
@@ -125,6 +128,7 @@ update-desktop-database %{tde_appdir} > /dev/null
touch --no-create %{tde_datadir}/icons/hicolor || :
gtk-update-icon-cache --quiet %{tde_datadir}/icons/hicolor || :
+
%postun
update-desktop-database %{tde_appdir} > /dev/null
/sbin/ldconfig
@@ -147,6 +151,7 @@ gtk-update-icon-cache --quiet %{tde_datadir}/icons/hicolor || :
%{tde_datadir}/autostart/kpowersave-autostart.desktop
%{tde_datadir}/config/kpowersaverc
+
%changelog
* Thu Jul 04 2013 Francois Andriot <[email protected]> - 0.7.3-5
- Initial release for TDE 14.0.0
@@ -155,7 +160,7 @@ gtk-update-icon-cache --quiet %{tde_datadir}/icons/hicolor || :
- Initial release for TDE 3.5.13.2
* Wed Oct 03 2012 Francois Andriot <[email protected]> - 0.7.3-3
-- Initial build for TDE 3.5.13.1
+- Initial release for TDE 3.5.13.1
* Sat Nov 26 2011 Francois Andriot <[email protected]> - 0.7.3-2
- Add missing /sbin/ldconfig
diff --git a/redhat/dependencies/avahi-tqt/avahi-tqt-14.0.0.spec b/redhat/dependencies/avahi-tqt/avahi-tqt-14.0.0.spec
index 2e09f82b3..17acc05e1 100644
--- a/redhat/dependencies/avahi-tqt/avahi-tqt-14.0.0.spec
+++ b/redhat/dependencies/avahi-tqt/avahi-tqt-14.0.0.spec
@@ -33,6 +33,8 @@ BuildRequires: trinity-tqt3-devel >= 3.5.0
BuildRequires: trinity-tqtinterface-devel >= %{version}
BuildRequires: gettext-devel
BuildRequires: libtool
+
+# DBUS support
%if 0%{?suse_version}
BuildRequires: dbus-1-devel
%else
diff --git a/redhat/dependencies/sip4-tqt/sip4-tqt.spec b/redhat/dependencies/sip4-tqt/sip4-tqt.spec
new file mode 100644
index 000000000..2de637176
--- /dev/null
+++ b/redhat/dependencies/sip4-tqt/sip4-tqt.spec
@@ -0,0 +1,136 @@
+# Some distribution already provides this package.
+# Mageia 3
+
+%{!?python_sitearch:%global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
+
+# Always install under standard prefix
+%define tde_prefix /usr
+
+%define tde_includedir %{tde_prefix}/include
+%define tde_libdir %{tde_prefix}/%{_lib}
+
+Name: trinity-sip4-tqt
+Epoch: 2
+Version: 14.0.0
+Release: %{?!preversion:1}%{?preversion:0_%{preversion}}%{?dist}%{?_variant}
+License: GPL
+Summary: Python/C++ bindings generator runtime library
+Group: System Environment/Libraries
+
+Vendor: Trinity Project
+Packager: Francois Andriot <[email protected]>
+
+Prefix: %{tde_prefix}
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+Source0: %{name}-%{version}%{?preversion:~%{preversion}}.tar.gz
+
+BuildRequires: trinity-tqtinterface-devel >= %{version}
+
+# TDE specific building variables
+BuildRequires: cmake >= 2.8
+BuildRequires: trinity-tqt3-devel >= %{version}
+
+%description
+
+##########
+
+%package -n python-sip
+Summary: Python/C++ bindings generator runtime library
+Epoch: 2
+
+%description -n python-sip
+SIP is a tool for generating bindings for C++ classes with some ideas
+borrowed from SWIG, but capable of tighter bindings because of its
+specificity towards C++ and Python.
+
+%post -n python-sip
+/sbin/ldconfig || :
+
+%postun -n python-sip
+/sbin/ldconfig || :
+
+%files -n python-sip
+%defattr(-,root,root,-)
+%{python_sitearch}/sip.so
+%{python_sitearch}/sipconfig.py
+%{python_sitearch}/sipdistutils.py
+
+
+##########
+
+%package -n python-sip-devel
+Summary: Python/C++ bindings generator development files
+Group: Development/Libraries
+Requires: python-sip = %{version}-%{release}
+
+%description -n python-sip-devel
+SIP is a tool for generating bindings for C++ classes with some ideas
+borrowed from SWIG, but capable of tighter bindings because of its
+specificity towards C++ and Python.
+
+SIP was originally designed to generate Python bindings for KDE and so
+has explicit support for the signal slot mechanism used by the Qt/KDE
+class libraries.
+
+Features:
+- connecting Qt signals to Python functions and class methods
+- connecting Python signals to Qt slots
+- overloading virtual member functions with Python class methods
+- protected member functions
+- abstract classes
+- enumerated types
+- global class instances
+- static member functions.
+
+This package contains the code generator tool and the development headers
+needed to develop Python bindings with sip.
+
+%post -n python-sip-devel
+/sbin/ldconfig || :
+
+%postun -n python-sip-devel
+/sbin/ldconfig || :
+
+%files -n python-sip-devel
+%defattr(-,root,root,-)
+%{_bindir}/sip
+%{_includedir}/python*/sip.h
+
+##########
+
+%if 0%{?suse_version} || 0%{?pclinuxos}
+%debug_package
+%endif
+
+
+%prep
+%setup -q -n %{name}-%{version}%{?preversion:~%{preversion}}
+
+
+%build
+unset QTDIR QTINC QTLIB
+export PKG_CONFIG_PATH="%{tde_libdir}/pkgconfig"
+
+mkdir build
+cd build
+python ../configure.py \
+ -d %{python_sitearch} \
+ -u STRIP="" \
+ CFLAGS="${RPM_OPT_FLAGS} -I%{_includedir}/tqt -I%{_includedir}/tqt3" \
+ CFLAGS_RELEASE="" \
+ CXXFLAGS="${RPM_OPT_FLAGS} -I%{_includedir}/tqt -I%{_includedir}/tqt3" \
+ CXXFLAGS_RELEASE=""
+
+
+%install
+%__rm -rf %{?buildroot}
+%__make install DESTDIR=%{?buildroot} -C build
+
+%clean
+%__rm -rf %{?buildroot}
+
+
+%changelog
+* Thu Feb 16 2012 Francois Andriot <[email protected]> - 14.0.0-1
+- Initial build for TDE R14, using 'tqt3' instead of 'qt3'
diff --git a/redhat/extras/trinity-desktop/trinity-desktop-14.0.0.spec b/redhat/extras/trinity-desktop/trinity-desktop-14.0.0.spec
index ad8a60b9e..eb7a65689 100644
--- a/redhat/extras/trinity-desktop/trinity-desktop-14.0.0.spec
+++ b/redhat/extras/trinity-desktop/trinity-desktop-14.0.0.spec
@@ -125,6 +125,7 @@ Requires: trinity-kcmldap
Requires: trinity-kcmldapcontroller
Requires: trinity-kcmldapmanager
Requires: trinity-kcpuload
+Requires: trinity-kdbg
Requires: trinity-kdiff3
Requires: trinity-kdirstat
Requires: trinity-keep
@@ -159,8 +160,6 @@ Requires: trinity-potracegui
Requires: trinity-smb4k
Requires: trinity-smartcardauth
Requires: trinity-soundkonverter
-Requires: trinity-tde-guidance
-Requires: trinity-tde-guidance-powermanager
Requires: trinity-tde-style-lipstik
Requires: trinity-tde-style-qtcurve
Requires: trinity-tde-systemsettings
@@ -180,7 +179,7 @@ Requires: trinity-gtk3-tqt-engine
# Disabled applications for RHEL5
%if 0%{?rhel} >= 6 || 0%{?fedora} >= 15 || 0%{?mgaversion} || 0%{?mdkversion} || 0%{?suse_version}
# On RHEL 5, HAL version is too old for kpowersave .
-Requires: trinity-kpowersave-nohal
+Requires: trinity-tdekpowersave
# On RHEL 5, GTK2 version is too old for GTK stuff ...
Requires: trinity-gtk-qt-engine
# On RHEL 5, lilypond is not available, so no rosegarden :'-(
@@ -189,6 +188,14 @@ Requires: trinity-rosegarden
Requires: trinity-kpilot
%endif
+# These python stuff have not been ported to TQT3 and still rely on HAL
+#Requires: trinity-tde-guidance
+#Requires: trinity-tde-guidance-powermanager
+Obsoletes: trinity-guidance
+Obsoletes: trinity-guidance-powermanager
+Obsoletes: trinity-tde-guidance
+Obsoletes: trinity-tde-guidance-powermanager
+
# This one causes several crashes . Obsolete.
#Requires: trinity-kgtk-qt3
Obsoletes: trinity-kgtk-qt3
@@ -198,11 +205,13 @@ Obsoletes: trinity-kgtk-qt3
Obsoletes: trinity-kerry
# RHEL 6 only: knetworkmanager8
-# knetworkmanager9 is too unstable for now.
%if 0%{?rhel} == 6
Requires: trinity-knetworkmanager8
%endif
-Requires: trinity-knetworkmanager9
+# Other distros: tdenetworkmanager (knetworkmanager9)
+%if 0%{?mgaversion} || 0%{?mdkversion} || 0%{?suse_version} || 0%{?fedora}
+Requires: trinity-tdenetworkmanager
+%endif
# RHEL 4
%if 0%{?rhel} >= 5 || 0%{?fedora} >= 15 || 0%{?mgaversion} || 0%{?mdkversion} || 0%{?suse_version}
diff --git a/redhat/tdebase/tdebase-14.0.0-bookmark_global_copy.patch b/redhat/tdebase/tdebase-14.0.0-bookmark_global_copy.patch
new file mode 100644
index 000000000..0f8a68045
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-bookmark_global_copy.patch
@@ -0,0 +1,27 @@
+--- ./libkonq/konqbookmarkmanager.h.ori 2013-05-08 23:26:03.558587419 +0200
++++ ./libkonq/konqbookmarkmanager.h 2013-05-08 23:29:25.317517880 +0200
+@@ -3,6 +3,8 @@
+
+ #include <kbookmarkmanager.h>
+ #include <kstandarddirs.h>
++#include <kurl.h>
++#include <tdeio/job.h>
+ #include <libkonq_export.h>
+
+ class LIBKONQ_EXPORT KonqBookmarkManager
+@@ -11,7 +13,14 @@
+ static KBookmarkManager * self() {
+ if ( !s_bookmarkManager )
+ {
+- TQString bookmarksFile = locateLocal("data", TQString::fromLatin1("konqueror/bookmarks.xml"));
++ TQString globalBookmarkFile = locate( "data", TQString::fromLatin1( "konqueror/bookmarks.xml" ) );
++ TQString bookmarksFile = locateLocal( "data", TQString::fromLatin1("konqueror/bookmarks.xml" ), true);
++ if ( globalBookmarkFile != TQString::null && bookmarksFile == TQString::null ) {
++ TDEIO::file_copy(
++ KURL::fromPathOrURL( globalBookmarkFile ),
++ KURL::fromPathOrURL( bookmarksFile ), -1, false, false
++ );
++ }
+ s_bookmarkManager = KBookmarkManager::managerForFile( bookmarksFile );
+ }
+ return s_bookmarkManager;
diff --git a/redhat/tdebase/tdebase-14.0.0-default_menu_icon.patch b/redhat/tdebase/tdebase-14.0.0-default_menu_icon.patch
new file mode 100644
index 000000000..d2e7bb520
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-default_menu_icon.patch
@@ -0,0 +1,20 @@
+--- trinity-tdebase-14.0.0~pre737+02bf1e69/starttde.ORI 2013-07-07 20:01:47.656584924 +0200
++++ trinity-tdebase-14.0.0~pre737+02bf1e69/starttde 2013-07-07 20:04:37.039608089 +0200
+@@ -347,6 +347,17 @@
+ fi
+ fi
+
++# Default Start Button icon for TDE
++if [ ! -e $tdehome/share/config/kickerrc ]; then
++ if [ -r "%{tde_starticon}" ]; then
++ cat <<EOF >$tdehome/share/config/kickerrc
++[KMenu]
++CustomIcon=%{tde_starticon}
++EOF
++ fi
++fi
++
++
+ # XCursor mouse theme needs to be applied here to work even for kded or ksmserver.
+ if test -n "$kcminputrc_mouse_cursortheme" -o -n "$kcminputrc_mouse_cursorsize" ; then
+ kapplymousetheme "$kcminputrc_mouse_cursortheme" "$kcminputrc_mouse_cursorsize"
diff --git a/redhat/tdebase/tdebase-14.0.0-displayconfig_translation.patch b/redhat/tdebase/tdebase-14.0.0-displayconfig_translation.patch
new file mode 100644
index 000000000..8440308ec
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-displayconfig_translation.patch
@@ -0,0 +1,37 @@
+--- trinity-tdebase-3.5.13.2~pre100+073a32f9/kcontrol/displayconfig/displayconfig.desktop.ORI 2013-05-11 14:53:30.914170537 +0200
++++ trinity-tdebase-3.5.13.2~pre100+073a32f9/kcontrol/displayconfig/displayconfig.desktop 2013-05-11 14:53:59.495582944 +0200
+@@ -2,6 +2,7 @@
+ Categories=Qt;TDE;X-TDE-settings-system;
+ Comment=Configure display
+ Comment[en_US]=Configure display
++Comment[fr]=Configuration de l'affichage
+ DocPath=kcontrol/displayconfig.html
+ Exec=tdecmshell displayconfig
+ GenericName=
+@@ -11,6 +12,7 @@
+ MimeType=
+ Name=Monitor & Display
+ Name[en_US]=Monitor & Display
++Name[fr]=Moniteurs & Affichage
+ NoDisplay=false
+ Path=
+ StartupNotify=true
+--- trinity-tdebase-3.5.13.2~pre100+073a32f9/kcontrol/iccconfig/iccconfig.desktop.ORI 2013-05-11 21:21:04.241337141 +0200
++++ trinity-tdebase-3.5.13.2~pre100+073a32f9/kcontrol/iccconfig/iccconfig.desktop 2013-05-11 21:21:44.782537929 +0200
+@@ -12,6 +12,7 @@
+ Categories=Qt;TDE;X-TDE-settings-hardware;
+ Comment=Configure display ICC profile
+ Comment[en_US]=Configure display ICC profile
++Comment[fr]=Configurer les profils de couleurs ICC
+ DocPath=kcontrol/iccconfig.html
+ GenericName=
+ GenericName[en_US]=
+@@ -19,5 +20,6 @@
+ MimeType=
+ Name=ICC Color Profile
+ Name[en_US]=ICC Color Profile
++Name[fr]=Profils de couleurs ICC
+
+-NoDisplay=false
+\ Pas de fin de ligne à la fin du fichier
++NoDisplay=false
diff --git a/redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch b/redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch
new file mode 100644
index 000000000..0d73de5a4
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch
@@ -0,0 +1,20 @@
+--- ./kcontrol/kcontrol/KControl.desktop~ 2013-01-09 02:12:13.000000000 +0100
++++ ./kcontrol/kcontrol/KControl.desktop 2013-05-08 17:55:54.250733219 +0200
+@@ -5,7 +5,7 @@
+ DocPath=kcontrol/index.html
+ X-TDE-StartupNotify=true
+
+-Name=Control Center
++Name=Trinity Control Center
+ Name[af]=Beheer Sentrum
+ Name[ar]=مركز التحكم
+ Name[az]=İdarə Mərkəzi
+@@ -28,7 +28,7 @@
+ Name[eu]=Kontrol gunea
+ Name[fa]=مرکز کنترل
+ Name[fi]=Ohjauskeskus
+-Name[fr]=Centre de configuration de TDE
++Name[fr]=Centre de configuration de Trinity
+ Name[fy]=Konfiguraasjesintrum
+ Name[ga]=Lárionad Rialaithe
+ Name[gl]=Centro de Control
diff --git a/redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch~ b/redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch~
new file mode 100644
index 000000000..cdef8e5a7
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-kcontrol_menu_entry.patch~
@@ -0,0 +1,20 @@
+--- ./kcontrol/kcontrol/KControl.desktop~ 2013-01-09 02:12:13.000000000 +0100
++++ ./kcontrol/kcontrol/KControl.desktop 2013-05-08 17:55:54.250733219 +0200
+@@ -5,7 +5,7 @@
+ DocPath=kcontrol/index.html
+ X-KDE-StartupNotify=true
+
+-Name=Control Center
++Name=Trinity Control Center
+ Name[af]=Beheer Sentrum
+ Name[ar]=مركز التحكم
+ Name[az]=İdarə Mərkəzi
+@@ -28,7 +28,7 @@
+ Name[eu]=Kontrol gunea
+ Name[fa]=مرکز کنترل
+ Name[fi]=Ohjauskeskus
+-Name[fr]=Centre de configuration de KDE
++Name[fr]=Centre de configuration de Trinity
+ Name[fy]=Konfiguraasjesintrum
+ Name[ga]=Lárionad Rialaithe
+ Name[gl]=Centro de Control
diff --git a/redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch b/redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch
new file mode 100644
index 000000000..4349589b2
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch
@@ -0,0 +1,1002 @@
+diff -p -up kdebase-3.5.9/kcontrol/background/crossfade.h.crossfade-efect kdebase-3.5.9/kcontrol/background/crossfade.h
+--- kdebase-3.5.9/kcontrol/background/crossfade.h.crossfade-efect 2008-03-11 09:17:29.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/crossfade.h 2008-03-11 09:17:29.000000000 -0300
+@@ -0,0 +1,56 @@
++/* vi: ts=8 sts=4 sw=4
++ * kate: space-indent on; tab-width 8; indent-width 4; indent-mode cstyle;
++ *
++ * This file is part of the KDE project, module kdesktop.
++ * Copyright (C) 1999,2000 Geert Jansen <[email protected]>
++ *
++ * You can Freely distribute this program under the GNU General Public
++ * License. See the file "COPYING" for the exact licensing terms.
++ */
++
++#ifndef __crossfade_h_Included__
++#define __crossfade_h_Included__
++
++#include <tqtimer.h>
++#include <tqpainter.h>
++#include <tqpixmap.h>
++#include <X11/X.h>
++#include <X11/Xlib.h>
++#include <X11/Xatom.h>
++#include <X11/extensions/Xrender.h>
++#include <kdebug.h>
++#include <unistd.h>
++
++
++
++inline TQPixmap crossFade(const TQPixmap &pix1, const TQPixmap &pix2, double r_alpha,
++ bool sync = false){
++
++ TQPixmap pix = TQPixmap(1,1,8);
++ int mw,mh;
++ mw = pix1.width();
++ mh = pix1.height();
++
++ int alpha = 0xffff * (1-r_alpha);
++
++ XRenderColor clr = { 0, 0, 0, alpha };
++ XRenderPictureAttributes pa;
++ pa.repeat = True;
++ Picture pic = XRenderCreatePicture(pix.x11Display(), pix.handle(),
++ XRenderFindStandardFormat (pix.x11Display(), PictStandardA8),
++ CPRepeat, &pa);
++ XRenderFillRectangle(pix.x11Display(), PictOpSrc, pic,
++ &clr, 0, 0, 1, 1);
++ TQPixmap dst(pix1);
++ dst.detach();
++ XRenderComposite(pix.x11Display(), PictOpOver, pix2.x11RenderHandle(),
++ pic, dst.x11RenderHandle(),0,0, 0,0, 0,0, mw,mh);
++
++ if (sync) {
++ XSync(pix.x11Display(), false);
++ }
++ XRenderFreePicture(pix.x11Display(), pic);
++ return dst;
++}
++
++#endif // __crossfade_h_Included__
+--- ./kcontrol/background/CMakeLists.txt.ORI 2013-05-08 18:36:33.605165935 +0200
++++ ./kcontrol/background/CMakeLists.txt 2013-05-08 18:37:55.448537081 +0200
+@@ -28,7 +28,7 @@
+ ##### bgnd (static) #############################
+
+ tde_add_library( bgnd STATIC_PIC AUTOMOC
+- SOURCES bgrender.cpp bgsettings.cpp
++ SOURCES bgrender.cpp bgsettings.cpp KCrossBGRender.cc
+ LINK ${LIBART_LIBRARIES}
+ )
+
+--- ./kcontrol/background/bgrender.cpp.ORI 2013-05-08 18:39:20.212849124 +0200
++++ ./kcontrol/background/bgrender.cpp 2013-05-08 18:44:04.200187009 +0200
+@@ -10,6 +10,8 @@
+
+ #include <config.h>
+
++#include "KCrossBGRender.h"
++
+ #include <time.h>
+ #include <stdlib.h>
+ #include <utime.h>
+@@ -1061,7 +1063,7 @@
+ }
+
+
+-KBackgroundRenderer * KVirtualBGRenderer::renderer(unsigned screen)
++KCrossBGRender * KVirtualBGRenderer::renderer(unsigned screen)
+ {
+ return m_renderer[screen];
+ }
+@@ -1220,7 +1222,8 @@
+ for (unsigned i=0; i<m_numRenderers; ++i)
+ {
+ int eScreen = m_bCommonScreen ? 0 : i;
+- KBackgroundRenderer * r = new KBackgroundRenderer( m_desk, eScreen, m_bDrawBackgroundPerScreen, m_pConfig );
++ //KBackgroundRenderer * r = new KBackgroundRenderer( m_desk, eScreen, m_bDrawBackgroundPerScreen, m_pConfig );
++ KCrossBGRender *r = new KCrossBGRender(m_desk, eScreen, m_bDrawBackgroundPerScreen, m_pConfig);
+ m_renderer.insert( i, r );
+ r->setSize(renderSize(i));
+ connect( r, TQT_SIGNAL(imageDone(int,int)), this, TQT_SLOT(screenDone(int,int)) );
+@@ -1250,7 +1253,8 @@
+ Q_UNUSED(_desk);
+ Q_UNUSED(_screen);
+
+- const KBackgroundRenderer * sender = dynamic_cast<const KBackgroundRenderer*>(this->sender());
++ //const KBackgroundRenderer * sender = dynamic_cast<const KBackgroundRenderer*>(this->sender());
++ const KCrossBGRender * sender = dynamic_cast<const KCrossBGRender*>(this->sender());
+ int screen = m_renderer.find(sender);
+ if (screen == -1)
+ //??
+--- kdebase-3.5.9/kcontrol/background/KCrossBGRender.h.crossfade-efect 2008-03-11 09:17:29.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/KCrossBGRender.h 2008-03-11 10:50:24.000000000 -0300
+@@ -0,0 +1,76 @@
++/*
++ * Copyright (C) 2008 Danilo Cesar Lemes de Paula <[email protected]>
++ * Copyright (C) 2008 Gustavo Boiko <[email protected]>
++ * Mandriva Conectiva
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License version 2 as published by the Free Software Foundation.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB. If not, write to
++ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++*/
++
++#ifndef __KCrossBGRender_h_Included__
++#define __KCrossBGRender_h_Included__
++
++
++#include <tqvaluelist.h>
++#include <tqpixmap.h>
++#include <tqvaluelist.h>
++#include <tqdatetime.h>
++
++#include "bgrender.h"
++
++class TQDomElement;
++
++typedef struct crossEvent{
++ bool transition;
++ TQString pix1;
++ TQString pix2;
++ TQTime stime; //start time
++ TQTime etime; //end time
++} KBGCrossEvent;
++
++
++class KCrossBGRender: public KBackgroundRenderer{
++
++TQ_OBJECT
++
++public:
++ KCrossBGRender(int desk, int screen, bool drawBackgroundPerScreen, TDEConfig *config=0);
++ ~KCrossBGRender();
++
++ bool needWallpaperChange();
++ void changeWallpaper(bool init=false);
++ TQPixmap pixmap();
++ bool usingCrossXml(){return useCrossEfect;};
++
++
++private:
++ TQPixmap pix;
++ int secs;
++ TQString xmlFileName;
++ bool useCrossEfect;
++
++ int actualPhase;
++
++ void createStartTime(TQDomElement e);
++ void createTransition(TQDomElement e);
++ void createStatic(TQDomElement e);
++ bool setCurrentEvent(bool init = false);
++ void initCrossFade(TQString xml);
++ void fixEnabled();
++ TQPixmap getCurrentPixmap();
++ KBGCrossEvent current;
++ TQValueList<KBGCrossEvent> timeList;
++};
++
++#endif // __KCrossBGRender_h_Included__
+--- ./kcontrol/background/bgrender.h.ORI 2013-05-08 18:46:41.122053931 +0200
++++ ./kcontrol/background/bgrender.h 2013-05-08 18:49:07.510128486 +0200
+@@ -28,6 +28,7 @@
+ class KTempFile;
+ class KShellProcess;
+ class TDEStandardDirs;
++class KCrossBGRender;
+
+ /**
+ * This class renders a desktop background to a TQImage. The operation is
+@@ -127,7 +128,7 @@
+ KVirtualBGRenderer(int desk, TDEConfig *config=0l);
+ ~KVirtualBGRenderer();
+
+- KBackgroundRenderer * renderer(unsigned screen);
++ KCrossBGRender * renderer(unsigned screen);
+ unsigned numRenderers() const { return m_numRenderers; }
+
+ TQPixmap pixmap();
+@@ -173,7 +174,8 @@
+ TQSize m_size;
+
+ TQMemArray<bool> m_bFinished;
+- TQPtrVector<KBackgroundRenderer> m_renderer;
++ //TQPtrVector<KBackgroundRenderer> m_renderer;
++ TQPtrVector<KCrossBGRender> m_renderer;
+ TQPixmap *m_pPixmap;
+ };
+
+diff -p -up kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc.crossfade-efect kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc
+--- kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc.crossfade-efect 2008-03-11 09:17:29.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc 2008-03-11 10:54:41.000000000 -0300
+@@ -0,0 +1,362 @@
++/*
++ * Copyright (C) 2008 Danilo Cesar Lemes de Paula <[email protected]>
++ * Copyright (C) 2008 Gustavo Boiko <[email protected]>
++ * Mandriva Conectiva
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License version 2 as published by the Free Software Foundation.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB. If not, write to
++ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#include <tqdom.h>
++#include <tqfile.h>
++
++#include <kdebug.h>
++
++#include "KCrossBGRender.h"
++//#include "crossfade.h"
++#include <tqapplication.h>
++#include <kimageeffect.h>
++
++
++KCrossBGRender::KCrossBGRender(int desk, int screen, bool drawBackgroundPerScreen, TDEConfig *config): KBackgroundRenderer(desk,screen,drawBackgroundPerScreen,config)
++{
++ useCrossEfect = false;
++ if ( wallpaperList()[0].endsWith("xml",false) ) {
++ initCrossFade(wallpaperList()[0]);
++ }
++}
++
++
++void KCrossBGRender::initCrossFade(TQString xmlFile)
++{
++ useCrossEfect = true;
++ if (xmlFile.isEmpty()){
++ useCrossEfect = false;
++ return;
++ }
++ secs = 0;
++ timeList.empty();
++
++ // read the XMLfile
++ TQDomDocument xmldoc = TQDomDocument(xmlFile);
++ TQFile file( xmlFile );
++ if ( !file.open( IO_ReadOnly ) ) {
++ useCrossEfect = false;
++ return;
++ }
++ if ( !xmldoc.setContent( &file ) ) {
++ useCrossEfect = false;
++ file.close();
++ return;
++ }
++ file.close();
++
++ TQDomElement docElem = xmldoc.documentElement();
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement(); // try to convert the node to an element.
++ if( !e.isNull() ) {
++ if (e.tagName() == "starttime") {
++ createStartTime(e);
++ } else if (e.tagName() == "transition") {
++ createTransition(e);
++ } else if (e.tagName() == "static") {
++ createStatic(e);
++ }
++ }
++ n = n.nextSibling();
++ }
++
++ // Setting "now" state
++ setCurrentEvent(true);
++ pix = getCurrentPixmap();
++
++ useCrossEfect = true;
++}
++
++
++KCrossBGRender::~KCrossBGRender(){
++}
++
++TQPixmap KCrossBGRender::pixmap() {
++ fixEnabled();
++ if (!useCrossEfect){
++ TQPixmap p = KBackgroundRenderer::pixmap();
++ kdDebug() << "Inherited " << p.size() << endl;
++ if (p.width() == 0 && p.height() == 0){
++ p.convertFromImage(image());
++ }
++ return p;
++ }
++
++ return pix;
++}
++
++bool KCrossBGRender::needWallpaperChange(){
++ if (!useCrossEfect) {
++ return KBackgroundRenderer::needWallpaperChange();
++ }
++
++ bool forceChange = setCurrentEvent(); // If we change the current state
++ if (forceChange){ // do not matter what hapens
++ actualPhase = 0; // we need to change background
++ return true;
++ }
++
++ // Return false if it's not a transition
++ if (!current.transition) {
++ return false;
++ }
++
++ double timeLeft, timeTotal;
++ TQTime now = TQTime::currentTime();
++
++ timeLeft = now.secsTo(current.etime);
++ if (timeLeft < 0) {
++ timeLeft += 86400; // before midnight
++ }
++ timeTotal = current.stime.secsTo(current.etime);
++ if (timeTotal < 0) {
++ timeTotal += 86400;
++ }
++
++ double passed = timeTotal - timeLeft;
++ double timeCell = timeTotal/60; //Time cell size
++
++ //kdDebug() << "\ntimeleft:" << timeLeft << " timeTotal:" << timeTotal
++ // << "\npassed:" << passed << " timeCell:" << timeCell
++ // << "\nactualPhase: " << actualPhase << endl;
++
++ int aux = passed/timeCell;
++ if(actualPhase != aux){
++ //kdDebug() << "needWallpaperChange() => returned true" << endl;
++ actualPhase = passed/timeCell;
++ return true;
++ }
++
++ //kdDebug() << "needWallpaperChange() => returned false" << endl;
++ return false;
++}
++
++/*
++ * This method change the enabledEffect flag to TRUE of FALSE, according
++ * with multiWallpaperMode and FileName (it needs to be a XML)
++ */
++void KCrossBGRender::fixEnabled(){
++
++
++ TQString w = wallpaperList()[0];
++ useCrossEfect = false;
++ if(multiWallpaperMode() == Random || multiWallpaperMode() == InOrder){
++
++ if ( w != xmlFileName ){
++ // New XML File
++ xmlFileName = w;
++ if (w.endsWith("xml",false)){
++ initCrossFade(wallpaperList()[0]);
++ //useCrossEfect = true;
++ }else{
++ // Not, it's not a xml file
++ useCrossEfect = false;
++ }
++ }else if (w.endsWith("xml",false)){
++ //xmlFile doesn't change
++ //but it's there
++ useCrossEfect = true;
++ }else{
++ // it's not a XML file
++ useCrossEfect = false;
++ }
++ }
++}
++
++void KCrossBGRender::changeWallpaper(bool init){
++
++
++
++ fixEnabled();
++
++ if (!useCrossEfect){
++ KBackgroundRenderer::changeWallpaper(init);
++ return;
++ }
++
++ pix = getCurrentPixmap();
++
++
++}
++
++
++bool KCrossBGRender::setCurrentEvent(bool init){
++ TQTime now = TQTime::currentTime();
++
++
++ //Verify if is need to change
++ if (!(init || now <= current.stime || now >= current.etime )) {
++ return false;
++ }
++
++ TQValueList<KBGCrossEvent>::iterator it;
++ for ( it = timeList.begin(); it != timeList.end(); ++it ){
++
++ // Look for time
++ if ( ((*it).stime <= now && now <= (*it).etime) || //normal situation
++ ((*it).etime <= (*it).stime && (now >= (*it).stime ||
++ now <= (*it).etime) ) )
++ {
++ current = *it;
++ actualPhase = 0;
++
++ //kdDebug() << "Cur: " << current.stime << "< now <" << current.etime << endl;
++ return true;
++ }
++ }
++}
++
++TQPixmap KCrossBGRender::getCurrentPixmap()
++{
++ float alpha;
++ TQPixmap ret;
++ TQImage tmp;
++ TQImage p1;
++ if (!tmp.load(current.pix1))
++ return TQPixmap();
++
++ // scale the pixmap to fit in the screen
++ //p1 = TQPixmap(QApplication::desktop()->screenGeometry().size());
++ //TQPainter p(&p1);
++ //p.drawPixmap(p1.rect(), tmp);
++ //
++ p1 = tmp.smoothScale(TQApplication::desktop()->screenGeometry().size());
++
++ if (current.transition){
++ TQTime now = TQTime::currentTime();
++ double timeLeft,timeTotal;
++
++ TQImage p2;
++
++ if (!tmp.load(current.pix2) )
++ return NULL;
++
++ p2 = tmp.smoothScale(TQApplication::desktop()->screenGeometry().size());
++ //TQPainter p(&p2);
++ //p.drawPixmap(p2.rect(), tmp);
++
++ timeLeft = now.secsTo(current.etime);
++ if (timeLeft < 0)
++ timeLeft += 86400;
++ timeTotal = current.stime.secsTo(current.etime);
++ if (timeTotal < 0)
++ timeTotal += 86400;
++
++ alpha = (timeTotal - timeLeft)/timeTotal;
++
++ //ret = crossFade(p2,p1,alpha);
++ tmp = KImageEffect::blend(p2,p1,alpha);
++ ret.convertFromImage(tmp);
++ return ret;
++ }else{
++ ret.convertFromImage(p1);
++ return ret;
++ }
++
++
++}
++
++void KCrossBGRender::createStartTime(TQDomElement docElem)
++{
++ int hour;
++ int minutes;
++
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement();
++ if( !e.isNull() ) {
++ if (e.tagName() == "hour"){
++ hour = e.text().toInt();
++ }else if ( e.tagName() == "minute" ){
++ minutes = e.text().toInt();
++ }
++
++ }
++
++ n = n.nextSibling();
++ }
++ secs = hour*60*60 + minutes*60;
++}
++void KCrossBGRender::createTransition(TQDomElement docElem)
++{
++ int duration;
++ TQString from;
++ TQString to;
++
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement();
++ if( !e.isNull() ) {
++ if (e.tagName() == "duration"){
++ duration = e.text().toFloat();
++ }else if ( e.tagName() == "from" ){
++ from = e.text();
++ }
++ else if ( e.tagName() == "to" ){
++ to = e.text();
++ }
++
++ }
++ n = n.nextSibling();
++ }
++ TQTime startTime(0,0,0);
++ startTime = startTime.addSecs(secs);
++ TQTime endTime(0,0,0);
++ endTime = endTime.addSecs(secs+duration);
++
++ secs += duration;
++
++ KBGCrossEvent l = {true, from, to, startTime,endTime};
++
++ timeList.append(l);
++
++}
++void KCrossBGRender::createStatic(TQDomElement docElem)
++{
++ int duration;
++ TQString file;
++
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement();
++ if( !e.isNull() ) {
++ if (e.tagName() == "duration"){
++ duration = e.text().toFloat();
++ }else if ( e.tagName() == "file" ){
++ file = e.text();
++ }
++
++ }
++ n = n.nextSibling();
++ }
++
++ TQTime startTime(0,0,0);
++ startTime = startTime.addSecs(secs);
++ TQTime endTime(0,0,0);
++ endTime = endTime.addSecs(secs+duration);
++
++ secs += duration;
++
++ KBGCrossEvent l = {false, file, NULL, startTime,endTime};
++ timeList.append(l);
++}
++
++#include "KCrossBGRender.moc"
+--- ./tdm/kfrontend/krootimage.h.ORI 2013-05-08 18:54:48.631599139 +0200
++++ ./tdm/kfrontend/krootimage.h 2013-05-08 18:55:02.365339708 +0200
+@@ -27,6 +27,7 @@
+ #include <tqtimer.h>
+
+ #include <bgrender.h>
++#include <KCrossBGRender.h>
+
+
+ class MyApplication : public TDEApplication
+--- ./kdesktop/bgmanager.cc.ORI 2013-05-08 18:56:29.915684768 +0200
++++ ./kdesktop/bgmanager.cc 2013-05-08 19:12:04.451954803 +0200
+@@ -16,10 +16,16 @@
+ #include "bgsettings.h"
+ #include "kdesktopapp.h"
+
++//FIXME
++#include "KCrossBGRender.h"
++#include "crossfade.h"
++
+ #include <assert.h>
+
+ #include <tqtimer.h>
+ #include <tqscrollview.h>
++#include <tqpainter.h>
++#include <tqdesktopwidget.h>
+
+ #include <kiconloader.h>
+ #include <tdeconfig.h>
+@@ -34,6 +40,8 @@
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
++#include <X11/extensions/Xrender.h>
++#include <unistd.h>
+
+ #ifndef None
+ #define None 0L
+@@ -47,7 +55,8 @@
+
+ #include "pixmapserver.h"
+
+-template class TQPtrVector<KBackgroundRenderer>;
++//template class TQPtrVector<KBackgroundRenderer>;
++template class TQPtrVector<KCrossBGRender>;
+ template class TQPtrVector<KBackgroundCacheEntry>;
+ template class TQMemArray<int>;
+
+@@ -108,6 +117,12 @@
+ connect(m_pTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
+ m_pTimer->start( 60000 );
+
++ /*CrossFade's config*/
++ m_crossTimer = new TQTimer(this);
++ connect(m_crossTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotCrossFadeTimeout()));
++ /*Ends here*/
++
++
+ connect(m_pKwinmodule, TQT_SIGNAL(currentDesktopChanged(int)),
+ TQT_SLOT(slotChangeDesktop(int)));
+ connect(m_pKwinmodule, TQT_SIGNAL(numberOfDesktopsChanged(int)),
+@@ -577,6 +592,36 @@
+
+
+ /*
++ * This slot is called when the Timeout is executed
++ */
++void KBackgroundManager::slotCrossFadeTimeout()
++{
++ KVirtualBGRenderer *r = m_Renderer[fadeDesk];
++ if (crossInit) {
++ mBenchmark.start();
++ }
++
++ if (mAlpha <= 0.0 || mBenchmark.elapsed() > 300 ) {
++ bool do_cleanup = true;
++ mAlpha = 1;
++ m_crossTimer->stop();
++ KPixmap pixm(mNextScreen);
++ setPixmap(&pixm, r->hash(), fadeDesk);
++ return;
++ }
++ // Reset Timer
++ mBenchmark.start();
++
++ TQPixmap dst = crossFade(*mOldScreen, mNextScreen, mAlpha, crossInit);
++ KPixmap pixm(dst);
++ setPixmap(&pixm, r->hash(), fadeDesk);
++
++ mAlpha -=0.03;
++ crossInit = false;
++}
++
++
++/*
+ * This slot is called when a renderer is done.
+ */
+ void KBackgroundManager::slotImageDone(int desk)
+@@ -592,6 +637,10 @@
+ KPixmap *pm = new KPixmap();
+ KVirtualBGRenderer *r = m_Renderer[desk];
+ bool do_cleanup = true;
++ fadeDesk = desk;
++ mAlpha = 1.0;
++ int width,height;
++
+
+ *pm = r->pixmap();
+ // If current: paint it
+@@ -603,7 +652,41 @@
+ //setPixmap(viewport_background, r->hash(), desk);
+ //delete viewport_background;
+
+- setPixmap(pm, r->hash(), desk);
++ //START
++ if (m_Renderer[effectiveDesktop()]->renderer(0)->crossFadeBg() && !m_Renderer[effectiveDesktop()]->renderer(0)->usingCrossXml()){
++ int mode = m_Renderer[effectiveDesktop()]->renderer(0)->wallpaperMode();
++ width = TQApplication::desktop()->screenGeometry().width(); //m_pDesktop->width();
++ height = TQApplication::desktop()->screenGeometry().height();// m_pDesktop->height();
++
++ if (mode == KBackgroundSettings::NoWallpaper || mode == KBackgroundSettings::Tiled || mode == KBackgroundSettings::CenterTiled ){
++ mNextScreen = TQPixmap(width,height);
++ TQPainter p (&mNextScreen);
++ p.drawTiledPixmap(0,0,width,height,*pm);
++ } else {
++ mNextScreen = TQPixmap(*pm);
++ }
++
++ if (m_pDesktop){
++ mOldScreen = const_cast<TQPixmap *>( m_pDesktop->backgroundPixmap() );
++ }else{
++ mOldScreen = const_cast<TQPixmap *>(
++ TQApplication::desktop()->screen()->backgroundPixmap() );
++ }
++
++ //TODO Find a way to discover if CrossFade effect needs to run
++ if (mOldScreen){
++ crossInit = true;
++ m_crossTimer->start(70);
++ } else{
++ setPixmap(pm, r->hash(), desk);
++ }
++ }else{
++ setPixmap(pm, r->hash(), desk);
++ }
++ //ENDS HERE */
++
++ //setPixmap(pm, r->hash(), desk);
++
+ if (!m_bBgInitDone)
+ {
+ m_bBgInitDone = true;
+@@ -801,7 +884,8 @@
+ TQString KBackgroundManager::currentWallpaper(int desk)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
++ //KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
++ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);
+
+ return r->currentWallpaper();
+ }
+@@ -818,7 +902,7 @@
+ // DCOP exported
+ void KBackgroundManager::setExport(int _export)
+ {
+- kdDebug() << "KBackgroundManager enabling exports.\n";
++// kdDebug() << "KBackgroundManager enabling exports.\n";
+ applyExport(_export);
+ slotChangeDesktop(0);
+ }
+@@ -843,7 +927,7 @@
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+ for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i)
+ {
+- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i);
++ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i);
+ r->stop();
+ r->setWallpaperMode(mode);
+ r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
+@@ -856,7 +940,7 @@
+ void KBackgroundManager::setWallpaper(TQString wallpaper)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(0);
++ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(0);
+ int mode = r->wallpaperMode();
+ if (mode == KBackgroundSettings::NoWallpaper)
+ mode = KBackgroundSettings::Tiled;
+@@ -869,7 +953,7 @@
+ TQStringList KBackgroundManager::wallpaperFiles(int desk)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
++ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);
+
+ return r->wallpaperFiles();
+ }
+@@ -880,7 +964,7 @@
+ TQStringList KBackgroundManager::wallpaperList(int desk)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);;
++ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);;
+
+ return r->wallpaperList();
+ }
+@@ -907,7 +991,7 @@
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+ for (unsigned i=0; i < m_Renderer[sdesk]->numRenderers(); ++i)
+ {
+- KBackgroundRenderer *r = m_Renderer[sdesk]->renderer(i);
++ KCrossBGRender *r = m_Renderer[sdesk]->renderer(i);
+
+ setCommon(false); // Force each desktop to have it's own wallpaper
+
+@@ -974,7 +1058,7 @@
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+ for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i)
+ {
+- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i);
++ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i);
+ r->stop();
+
+ if (isColorA)
+--- ./kdesktop/bgmanager.h.ORI 2013-05-08 19:13:25.120426716 +0200
++++ ./kdesktop/bgmanager.h 2013-05-08 19:15:12.071398460 +0200
+@@ -13,6 +13,7 @@
+ #include <tqstring.h>
+ #include <tqptrvector.h>
+
++#include <tqdatetime.h>
+ #include <KBackgroundIface.h>
+
+ #if defined(Q_WS_X11) && defined(HAVE_XRENDER) && TQT_VERSION >= 0x030300
+@@ -89,6 +90,7 @@
+ void desktopResized();
+ void clearRoot();
+ void saveImages();
++ void slotCrossFadeTimeout();
+ void slotCmBackgroundChanged(bool);
+
+ private:
+@@ -131,6 +133,15 @@
+ KPixmapServer *m_pPixmapServer;
+
+ unsigned long m_xrootpmap;
++
++ /*CrossFade vars*/
++ TQTimer * m_crossTimer;
++ double mAlpha;
++ TQPixmap mNextScreen;
++ TQPixmap * mOldScreen;
++ int fadeDesk;
++ TQTime mBenchmark;
++ bool crossInit;
+ };
+
+ #endif // __BGManager_h_Included__
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog_ui.ui.ORI 2013-05-15 12:13:14.000000000 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog_ui.ui 2013-05-15 12:20:25.000000000 +0000
+@@ -376,6 +376,17 @@
+ &lt;/ul&gt;&lt;/qt&gt;</string>
+ </property>
+ </widget>
++ <widget class="TQCheckBox" row="8" column="1">
++ <property name="name">
++ <cstring>m_cbCrossFadeBg</cstring>
++ </property>
++ <property name="text">
++ <string>Cross-fading background</string>
++ </property>
++ <property name="whatsThis" stdset="0">
++ <string>Enables a smooth fading effect when changing background image.</string>
++ </property>
++ </widget>
+ <widget class="TQComboBox" row="5" column="1">
+ <property name="name">
+ <cstring>m_comboBlend</cstring>
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdefaults.h.ORI 2013-05-15 13:42:20.933760867 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdefaults.h 2013-05-15 13:42:38.305365721 +0000
+@@ -34,5 +34,6 @@
+ #define _defBlendMode KBackgroundSettings::NoBlending
+ #define _defBlendBalance 100
+ #define _defReverseBlending false
++#define _defCrossFadeBg false
+
+ #endif // __BGDefaults_h_Included__
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.h.ORI 2013-05-15 13:37:34.228282617 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.h 2013-05-15 13:39:31.884606381 +0000
+@@ -198,6 +198,9 @@
+ void setReverseBlending(bool value);
+ bool reverseBlending() const { return m_ReverseBlending; }
+
++ void setCrossFadeBg(bool value);
++ bool crossFadeBg() const { return m_CrossFadeBg; }
++
+ void setBlendBalance(int value);
+ int blendBalance() const { return m_BlendBalance; }
+
+@@ -273,6 +276,7 @@
+ int m_BlendMode, defBlendMode;
+ int m_BlendBalance, defBlendBalance;
+ bool m_ReverseBlending, defReverseBlending;
++ bool m_CrossFadeBg, defCrossFadeBg;
+ int m_MinOptimizationDepth;
+ bool m_bShm;
+ bool m_bDrawBackgroundPerScreen;
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.cpp.ORI 2013-05-15 13:39:59.408980208 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.cpp 2013-05-15 13:46:15.197432823 +0000
+@@ -437,6 +437,7 @@
+ defBlendMode = _defBlendMode;
+ defBlendBalance = _defBlendBalance;
+ defReverseBlending = _defReverseBlending;
++ defCrossFadeBg = _defCrossFadeBg;
+
+ m_MinOptimizationDepth = _defMinOptimizationDepth;
+ m_bShm = _defShm;
+@@ -537,6 +538,7 @@
+ m_BlendMode = settings->m_BlendMode;
+ m_BlendBalance = settings->m_BlendBalance;
+ m_ReverseBlending = settings->m_ReverseBlending;
++ m_CrossFadeBg = settings->m_CrossFadeBg;
+ m_MinOptimizationDepth = settings->m_MinOptimizationDepth;
+ m_bShm = settings->m_bShm;
+ m_MultiMode = settings->m_MultiMode;
+@@ -633,6 +635,15 @@
+ }
+
+
++void KBackgroundSettings::setCrossFadeBg(bool value)
++{
++ if (m_CrossFadeBg == value)
++ return;
++ dirty = hashdirty = true;
++ m_CrossFadeBg = value;
++}
++
++
+ void KBackgroundSettings::setWallpaper(TQString wallpaper)
+ {
+ dirty = hashdirty = true;
+@@ -774,6 +785,8 @@
+
+ m_ReverseBlending = m_pConfig->readBoolEntry( "ReverseBlending", defReverseBlending);
+
++ m_CrossFadeBg = m_pConfig->readBoolEntry( "CrossFadeBg", defCrossFadeBg);
++
+ // Multiple wallpaper config
+ m_WallpaperList = m_pConfig->readPathListEntry("WallpaperList");
+
+@@ -834,6 +847,7 @@
+ m_pConfig->writeEntry("BlendMode", m_BlMRevMap[m_BlendMode]);
+ m_pConfig->writeEntry("BlendBalance", m_BlendBalance);
+ m_pConfig->writeEntry("ReverseBlending", m_ReverseBlending);
++ m_pConfig->writeEntry("CrossFadeBg", m_CrossFadeBg);
+ m_pConfig->writeEntry("MinOptimizationDepth", m_MinOptimizationDepth);
+ m_pConfig->writeEntry("UseSHM", m_bShm);
+
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.h.ORI 2013-05-15 13:56:09.397921090 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.h 2013-05-15 13:56:17.377739605 +0000
+@@ -80,6 +80,7 @@
+ void slotBlendReverse(bool b);
+ void desktopResized();
+ void setBlendingEnabled(bool);
++ void slotCrossFadeBg(bool);
+
+ protected:
+ void getEScreen();
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.cpp.ORI 2013-05-15 13:53:49.809095324 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.cpp 2013-05-15 13:53:54.636985486 +0000
+@@ -174,6 +174,10 @@
+ connect(m_cbBlendReverse, TQT_SIGNAL(toggled(bool)),
+ TQT_SLOT(slotBlendReverse(bool)));
+
++ // Crossfading background
++ connect(m_cbCrossFadeBg, TQT_SIGNAL(toggled(bool)),
++ TQT_SLOT(slotCrossFadeBg(bool)));
++
+ // advanced options
+ connect(m_buttonAdvanced, TQT_SIGNAL(clicked()),
+ TQT_SLOT(slotAdvanced()));
+@@ -304,6 +308,7 @@
+ m_cbBlendReverse->setEnabled( false );
+ m_buttonAdvanced->setEnabled( false );
+ m_buttonGetNew->setEnabled( false );
++ m_cbCrossFadeBg->setEnabled( false );
+ }
+
+ void BGDialog::load( bool useDefaults )
+@@ -781,6 +786,8 @@
+ m_cbBlendReverse->setChecked(r->reverseBlending());
+ m_sliderBlend->setValue( r->blendBalance() / 10 );
+
++ m_cbCrossFadeBg->setChecked(r->crossFadeBg());
++
+ m_comboBlend->blockSignals(false);
+ m_sliderBlend->blockSignals(false);
+
+@@ -1295,6 +1302,17 @@
+ eRenderer()->start(true);
+ }
+
++void BGDialog::slotCrossFadeBg(bool b)
++{
++ if (b == eRenderer()->crossFadeBg())
++ return;
++ emit changed(true);
++
++ eRenderer()->stop();
++ eRenderer()->setCrossFadeBg(b);
++ eRenderer()->start(true);
++}
++
+ void BGDialog::desktopResized()
+ {
+ for (unsigned i = 0; i < m_renderer.size(); ++i)
diff --git a/redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch~ b/redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch~
new file mode 100644
index 000000000..3b4e86819
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-kdesktop_crossfade.patch~
@@ -0,0 +1,1002 @@
+diff -p -up kdebase-3.5.9/kcontrol/background/crossfade.h.crossfade-efect kdebase-3.5.9/kcontrol/background/crossfade.h
+--- kdebase-3.5.9/kcontrol/background/crossfade.h.crossfade-efect 2008-03-11 09:17:29.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/crossfade.h 2008-03-11 09:17:29.000000000 -0300
+@@ -0,0 +1,56 @@
++/* vi: ts=8 sts=4 sw=4
++ * kate: space-indent on; tab-width 8; indent-width 4; indent-mode cstyle;
++ *
++ * This file is part of the KDE project, module kdesktop.
++ * Copyright (C) 1999,2000 Geert Jansen <[email protected]>
++ *
++ * You can Freely distribute this program under the GNU General Public
++ * License. See the file "COPYING" for the exact licensing terms.
++ */
++
++#ifndef __crossfade_h_Included__
++#define __crossfade_h_Included__
++
++#include <tqtimer.h>
++#include <tqpainter.h>
++#include <tqpixmap.h>
++#include <X11/X.h>
++#include <X11/Xlib.h>
++#include <X11/Xatom.h>
++#include <X11/extensions/Xrender.h>
++#include <kdebug.h>
++#include <unistd.h>
++
++
++
++inline TQPixmap crossFade(const TQPixmap &pix1, const TQPixmap &pix2, double r_alpha,
++ bool sync = false){
++
++ TQPixmap pix = TQPixmap(1,1,8);
++ int mw,mh;
++ mw = pix1.width();
++ mh = pix1.height();
++
++ int alpha = 0xffff * (1-r_alpha);
++
++ XRenderColor clr = { 0, 0, 0, alpha };
++ XRenderPictureAttributes pa;
++ pa.repeat = True;
++ Picture pic = XRenderCreatePicture(pix.x11Display(), pix.handle(),
++ XRenderFindStandardFormat (pix.x11Display(), PictStandardA8),
++ CPRepeat, &pa);
++ XRenderFillRectangle(pix.x11Display(), PictOpSrc, pic,
++ &clr, 0, 0, 1, 1);
++ TQPixmap dst(pix1);
++ dst.detach();
++ XRenderComposite(pix.x11Display(), PictOpOver, pix2.x11RenderHandle(),
++ pic, dst.x11RenderHandle(),0,0, 0,0, 0,0, mw,mh);
++
++ if (sync) {
++ XSync(pix.x11Display(), false);
++ }
++ XRenderFreePicture(pix.x11Display(), pic);
++ return dst;
++}
++
++#endif // __crossfade_h_Included__
+--- ./kcontrol/background/CMakeLists.txt.ORI 2013-05-08 18:36:33.605165935 +0200
++++ ./kcontrol/background/CMakeLists.txt 2013-05-08 18:37:55.448537081 +0200
+@@ -28,7 +28,7 @@
+ ##### bgnd (static) #############################
+
+ tde_add_library( bgnd STATIC_PIC AUTOMOC
+- SOURCES bgrender.cpp bgsettings.cpp
++ SOURCES bgrender.cpp bgsettings.cpp KCrossBGRender.cc
+ LINK ${LIBART_LIBRARIES}
+ )
+
+--- ./kcontrol/background/bgrender.cpp.ORI 2013-05-08 18:39:20.212849124 +0200
++++ ./kcontrol/background/bgrender.cpp 2013-05-08 18:44:04.200187009 +0200
+@@ -10,6 +10,8 @@
+
+ #include <config.h>
+
++#include "KCrossBGRender.h"
++
+ #include <time.h>
+ #include <stdlib.h>
+ #include <utime.h>
+@@ -1061,7 +1063,7 @@
+ }
+
+
+-KBackgroundRenderer * KVirtualBGRenderer::renderer(unsigned screen)
++KCrossBGRender * KVirtualBGRenderer::renderer(unsigned screen)
+ {
+ return m_renderer[screen];
+ }
+@@ -1220,7 +1222,8 @@
+ for (unsigned i=0; i<m_numRenderers; ++i)
+ {
+ int eScreen = m_bCommonScreen ? 0 : i;
+- KBackgroundRenderer * r = new KBackgroundRenderer( m_desk, eScreen, m_bDrawBackgroundPerScreen, m_pConfig );
++ //KBackgroundRenderer * r = new KBackgroundRenderer( m_desk, eScreen, m_bDrawBackgroundPerScreen, m_pConfig );
++ KCrossBGRender *r = new KCrossBGRender(m_desk, eScreen, m_bDrawBackgroundPerScreen, m_pConfig);
+ m_renderer.insert( i, r );
+ r->setSize(renderSize(i));
+ connect( r, TQT_SIGNAL(imageDone(int,int)), this, TQT_SLOT(screenDone(int,int)) );
+@@ -1250,7 +1253,8 @@
+ Q_UNUSED(_desk);
+ Q_UNUSED(_screen);
+
+- const KBackgroundRenderer * sender = dynamic_cast<const KBackgroundRenderer*>(this->sender());
++ //const KBackgroundRenderer * sender = dynamic_cast<const KBackgroundRenderer*>(this->sender());
++ const KCrossBGRender * sender = dynamic_cast<const KCrossBGRender*>(this->sender());
+ int screen = m_renderer.find(sender);
+ if (screen == -1)
+ //??
+--- kdebase-3.5.9/kcontrol/background/KCrossBGRender.h.crossfade-efect 2008-03-11 09:17:29.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/KCrossBGRender.h 2008-03-11 10:50:24.000000000 -0300
+@@ -0,0 +1,76 @@
++/*
++ * Copyright (C) 2008 Danilo Cesar Lemes de Paula <[email protected]>
++ * Copyright (C) 2008 Gustavo Boiko <[email protected]>
++ * Mandriva Conectiva
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License version 2 as published by the Free Software Foundation.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB. If not, write to
++ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++*/
++
++#ifndef __KCrossBGRender_h_Included__
++#define __KCrossBGRender_h_Included__
++
++
++#include <tqvaluelist.h>
++#include <tqpixmap.h>
++#include <tqvaluelist.h>
++#include <tqdatetime.h>
++
++#include "bgrender.h"
++
++class TQDomElement;
++
++typedef struct crossEvent{
++ bool transition;
++ TQString pix1;
++ TQString pix2;
++ TQTime stime; //start time
++ TQTime etime; //end time
++} KBGCrossEvent;
++
++
++class KCrossBGRender: public KBackgroundRenderer{
++
++TQ_OBJECT
++
++public:
++ KCrossBGRender(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config=0);
++ ~KCrossBGRender();
++
++ bool needWallpaperChange();
++ void changeWallpaper(bool init=false);
++ TQPixmap pixmap();
++ bool usingCrossXml(){return useCrossEfect;};
++
++
++private:
++ TQPixmap pix;
++ int secs;
++ TQString xmlFileName;
++ bool useCrossEfect;
++
++ int actualPhase;
++
++ void createStartTime(TQDomElement e);
++ void createTransition(TQDomElement e);
++ void createStatic(TQDomElement e);
++ bool setCurrentEvent(bool init = false);
++ void initCrossFade(TQString xml);
++ void fixEnabled();
++ TQPixmap getCurrentPixmap();
++ KBGCrossEvent current;
++ TQValueList<KBGCrossEvent> timeList;
++};
++
++#endif // __KCrossBGRender_h_Included__
+--- ./kcontrol/background/bgrender.h.ORI 2013-05-08 18:46:41.122053931 +0200
++++ ./kcontrol/background/bgrender.h 2013-05-08 18:49:07.510128486 +0200
+@@ -28,6 +28,7 @@
+ class KTempFile;
+ class KShellProcess;
+ class KStandardDirs;
++class KCrossBGRender;
+
+ /**
+ * This class renders a desktop background to a TQImage. The operation is
+@@ -127,7 +128,7 @@
+ KVirtualBGRenderer(int desk, KConfig *config=0l);
+ ~KVirtualBGRenderer();
+
+- KBackgroundRenderer * renderer(unsigned screen);
++ KCrossBGRender * renderer(unsigned screen);
+ unsigned numRenderers() const { return m_numRenderers; }
+
+ TQPixmap pixmap();
+@@ -173,7 +174,8 @@
+ TQSize m_size;
+
+ TQMemArray<bool> m_bFinished;
+- TQPtrVector<KBackgroundRenderer> m_renderer;
++ //TQPtrVector<KBackgroundRenderer> m_renderer;
++ TQPtrVector<KCrossBGRender> m_renderer;
+ TQPixmap *m_pPixmap;
+ };
+
+diff -p -up kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc.crossfade-efect kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc
+--- kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc.crossfade-efect 2008-03-11 09:17:29.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc 2008-03-11 10:54:41.000000000 -0300
+@@ -0,0 +1,362 @@
++/*
++ * Copyright (C) 2008 Danilo Cesar Lemes de Paula <[email protected]>
++ * Copyright (C) 2008 Gustavo Boiko <[email protected]>
++ * Mandriva Conectiva
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License version 2 as published by the Free Software Foundation.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this library; see the file COPYING.LIB. If not, write to
++ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#include <tqdom.h>
++#include <tqfile.h>
++
++#include <kdebug.h>
++
++#include "KCrossBGRender.h"
++//#include "crossfade.h"
++#include <tqapplication.h>
++#include <kimageeffect.h>
++
++
++KCrossBGRender::KCrossBGRender(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config): KBackgroundRenderer(desk,screen,drawBackgroundPerScreen,config)
++{
++ useCrossEfect = false;
++ if ( wallpaperList()[0].endsWith("xml",false) ) {
++ initCrossFade(wallpaperList()[0]);
++ }
++}
++
++
++void KCrossBGRender::initCrossFade(TQString xmlFile)
++{
++ useCrossEfect = true;
++ if (xmlFile.isEmpty()){
++ useCrossEfect = false;
++ return;
++ }
++ secs = 0;
++ timeList.empty();
++
++ // read the XMLfile
++ TQDomDocument xmldoc = TQDomDocument(xmlFile);
++ TQFile file( xmlFile );
++ if ( !file.open( IO_ReadOnly ) ) {
++ useCrossEfect = false;
++ return;
++ }
++ if ( !xmldoc.setContent( &file ) ) {
++ useCrossEfect = false;
++ file.close();
++ return;
++ }
++ file.close();
++
++ TQDomElement docElem = xmldoc.documentElement();
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement(); // try to convert the node to an element.
++ if( !e.isNull() ) {
++ if (e.tagName() == "starttime") {
++ createStartTime(e);
++ } else if (e.tagName() == "transition") {
++ createTransition(e);
++ } else if (e.tagName() == "static") {
++ createStatic(e);
++ }
++ }
++ n = n.nextSibling();
++ }
++
++ // Setting "now" state
++ setCurrentEvent(true);
++ pix = getCurrentPixmap();
++
++ useCrossEfect = true;
++}
++
++
++KCrossBGRender::~KCrossBGRender(){
++}
++
++TQPixmap KCrossBGRender::pixmap() {
++ fixEnabled();
++ if (!useCrossEfect){
++ TQPixmap p = KBackgroundRenderer::pixmap();
++ kdDebug() << "Inherited " << p.size() << endl;
++ if (p.width() == 0 && p.height() == 0){
++ p.convertFromImage(image());
++ }
++ return p;
++ }
++
++ return pix;
++}
++
++bool KCrossBGRender::needWallpaperChange(){
++ if (!useCrossEfect) {
++ return KBackgroundRenderer::needWallpaperChange();
++ }
++
++ bool forceChange = setCurrentEvent(); // If we change the current state
++ if (forceChange){ // do not matter what hapens
++ actualPhase = 0; // we need to change background
++ return true;
++ }
++
++ // Return false if it's not a transition
++ if (!current.transition) {
++ return false;
++ }
++
++ double timeLeft, timeTotal;
++ TQTime now = TQTime::currentTime();
++
++ timeLeft = now.secsTo(current.etime);
++ if (timeLeft < 0) {
++ timeLeft += 86400; // before midnight
++ }
++ timeTotal = current.stime.secsTo(current.etime);
++ if (timeTotal < 0) {
++ timeTotal += 86400;
++ }
++
++ double passed = timeTotal - timeLeft;
++ double timeCell = timeTotal/60; //Time cell size
++
++ //kdDebug() << "\ntimeleft:" << timeLeft << " timeTotal:" << timeTotal
++ // << "\npassed:" << passed << " timeCell:" << timeCell
++ // << "\nactualPhase: " << actualPhase << endl;
++
++ int aux = passed/timeCell;
++ if(actualPhase != aux){
++ //kdDebug() << "needWallpaperChange() => returned true" << endl;
++ actualPhase = passed/timeCell;
++ return true;
++ }
++
++ //kdDebug() << "needWallpaperChange() => returned false" << endl;
++ return false;
++}
++
++/*
++ * This method change the enabledEffect flag to TRUE of FALSE, according
++ * with multiWallpaperMode and FileName (it needs to be a XML)
++ */
++void KCrossBGRender::fixEnabled(){
++
++
++ TQString w = wallpaperList()[0];
++ useCrossEfect = false;
++ if(multiWallpaperMode() == Random || multiWallpaperMode() == InOrder){
++
++ if ( w != xmlFileName ){
++ // New XML File
++ xmlFileName = w;
++ if (w.endsWith("xml",false)){
++ initCrossFade(wallpaperList()[0]);
++ //useCrossEfect = true;
++ }else{
++ // Not, it's not a xml file
++ useCrossEfect = false;
++ }
++ }else if (w.endsWith("xml",false)){
++ //xmlFile doesn't change
++ //but it's there
++ useCrossEfect = true;
++ }else{
++ // it's not a XML file
++ useCrossEfect = false;
++ }
++ }
++}
++
++void KCrossBGRender::changeWallpaper(bool init){
++
++
++
++ fixEnabled();
++
++ if (!useCrossEfect){
++ KBackgroundRenderer::changeWallpaper(init);
++ return;
++ }
++
++ pix = getCurrentPixmap();
++
++
++}
++
++
++bool KCrossBGRender::setCurrentEvent(bool init){
++ TQTime now = TQTime::currentTime();
++
++
++ //Verify if is need to change
++ if (!(init || now <= current.stime || now >= current.etime )) {
++ return false;
++ }
++
++ TQValueList<KBGCrossEvent>::iterator it;
++ for ( it = timeList.begin(); it != timeList.end(); ++it ){
++
++ // Look for time
++ if ( ((*it).stime <= now && now <= (*it).etime) || //normal situation
++ ((*it).etime <= (*it).stime && (now >= (*it).stime ||
++ now <= (*it).etime) ) )
++ {
++ current = *it;
++ actualPhase = 0;
++
++ //kdDebug() << "Cur: " << current.stime << "< now <" << current.etime << endl;
++ return true;
++ }
++ }
++}
++
++TQPixmap KCrossBGRender::getCurrentPixmap()
++{
++ float alpha;
++ TQPixmap ret;
++ TQImage tmp;
++ TQImage p1;
++ if (!tmp.load(current.pix1))
++ return TQPixmap();
++
++ // scale the pixmap to fit in the screen
++ //p1 = TQPixmap(QApplication::desktop()->screenGeometry().size());
++ //TQPainter p(&p1);
++ //p.drawPixmap(p1.rect(), tmp);
++ //
++ p1 = tmp.smoothScale(TQApplication::desktop()->screenGeometry().size());
++
++ if (current.transition){
++ TQTime now = TQTime::currentTime();
++ double timeLeft,timeTotal;
++
++ TQImage p2;
++
++ if (!tmp.load(current.pix2) )
++ return NULL;
++
++ p2 = tmp.smoothScale(TQApplication::desktop()->screenGeometry().size());
++ //TQPainter p(&p2);
++ //p.drawPixmap(p2.rect(), tmp);
++
++ timeLeft = now.secsTo(current.etime);
++ if (timeLeft < 0)
++ timeLeft += 86400;
++ timeTotal = current.stime.secsTo(current.etime);
++ if (timeTotal < 0)
++ timeTotal += 86400;
++
++ alpha = (timeTotal - timeLeft)/timeTotal;
++
++ //ret = crossFade(p2,p1,alpha);
++ tmp = KImageEffect::blend(p2,p1,alpha);
++ ret.convertFromImage(tmp);
++ return ret;
++ }else{
++ ret.convertFromImage(p1);
++ return ret;
++ }
++
++
++}
++
++void KCrossBGRender::createStartTime(TQDomElement docElem)
++{
++ int hour;
++ int minutes;
++
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement();
++ if( !e.isNull() ) {
++ if (e.tagName() == "hour"){
++ hour = e.text().toInt();
++ }else if ( e.tagName() == "minute" ){
++ minutes = e.text().toInt();
++ }
++
++ }
++
++ n = n.nextSibling();
++ }
++ secs = hour*60*60 + minutes*60;
++}
++void KCrossBGRender::createTransition(TQDomElement docElem)
++{
++ int duration;
++ TQString from;
++ TQString to;
++
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement();
++ if( !e.isNull() ) {
++ if (e.tagName() == "duration"){
++ duration = e.text().toFloat();
++ }else if ( e.tagName() == "from" ){
++ from = e.text();
++ }
++ else if ( e.tagName() == "to" ){
++ to = e.text();
++ }
++
++ }
++ n = n.nextSibling();
++ }
++ TQTime startTime(0,0,0);
++ startTime = startTime.addSecs(secs);
++ TQTime endTime(0,0,0);
++ endTime = endTime.addSecs(secs+duration);
++
++ secs += duration;
++
++ KBGCrossEvent l = {true, from, to, startTime,endTime};
++
++ timeList.append(l);
++
++}
++void KCrossBGRender::createStatic(TQDomElement docElem)
++{
++ int duration;
++ TQString file;
++
++ TQDomNode n = docElem.firstChild();
++ while( !n.isNull() ) {
++ TQDomElement e = n.toElement();
++ if( !e.isNull() ) {
++ if (e.tagName() == "duration"){
++ duration = e.text().toFloat();
++ }else if ( e.tagName() == "file" ){
++ file = e.text();
++ }
++
++ }
++ n = n.nextSibling();
++ }
++
++ TQTime startTime(0,0,0);
++ startTime = startTime.addSecs(secs);
++ TQTime endTime(0,0,0);
++ endTime = endTime.addSecs(secs+duration);
++
++ secs += duration;
++
++ KBGCrossEvent l = {false, file, NULL, startTime,endTime};
++ timeList.append(l);
++}
++
++#include "KCrossBGRender.moc"
+--- ./kdm/kfrontend/krootimage.h.ORI 2013-05-08 18:54:48.631599139 +0200
++++ ./kdm/kfrontend/krootimage.h 2013-05-08 18:55:02.365339708 +0200
+@@ -27,6 +27,7 @@
+ #include <tqtimer.h>
+
+ #include <bgrender.h>
++#include <KCrossBGRender.h>
+
+
+ class MyApplication : public KApplication
+--- ./kdesktop/bgmanager.cc.ORI 2013-05-08 18:56:29.915684768 +0200
++++ ./kdesktop/bgmanager.cc 2013-05-08 19:12:04.451954803 +0200
+@@ -16,10 +16,16 @@
+ #include "bgsettings.h"
+ #include "kdesktopapp.h"
+
++//FIXME
++#include "KCrossBGRender.h"
++#include "crossfade.h"
++
+ #include <assert.h>
+
+ #include <tqtimer.h>
+ #include <tqscrollview.h>
++#include <tqpainter.h>
++#include <tqdesktopwidget.h>
+
+ #include <kiconloader.h>
+ #include <kconfig.h>
+@@ -34,6 +40,8 @@
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
++#include <X11/extensions/Xrender.h>
++#include <unistd.h>
+
+ #ifndef None
+ #define None 0L
+@@ -47,7 +55,8 @@
+
+ #include "pixmapserver.h"
+
+-template class TQPtrVector<KBackgroundRenderer>;
++//template class TQPtrVector<KBackgroundRenderer>;
++template class TQPtrVector<KCrossBGRender>;
+ template class TQPtrVector<KBackgroundCacheEntry>;
+ template class TQMemArray<int>;
+
+@@ -108,6 +117,12 @@
+ connect(m_pTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout()));
+ m_pTimer->start( 60000 );
+
++ /*CrossFade's config*/
++ m_crossTimer = new TQTimer(this);
++ connect(m_crossTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotCrossFadeTimeout()));
++ /*Ends here*/
++
++
+ connect(m_pKwinmodule, TQT_SIGNAL(currentDesktopChanged(int)),
+ TQT_SLOT(slotChangeDesktop(int)));
+ connect(m_pKwinmodule, TQT_SIGNAL(numberOfDesktopsChanged(int)),
+@@ -577,6 +592,36 @@
+
+
+ /*
++ * This slot is called when the Timeout is executed
++ */
++void KBackgroundManager::slotCrossFadeTimeout()
++{
++ KVirtualBGRenderer *r = m_Renderer[fadeDesk];
++ if (crossInit) {
++ mBenchmark.start();
++ }
++
++ if (mAlpha <= 0.0 || mBenchmark.elapsed() > 300 ) {
++ bool do_cleanup = true;
++ mAlpha = 1;
++ m_crossTimer->stop();
++ KPixmap pixm(mNextScreen);
++ setPixmap(&pixm, r->hash(), fadeDesk);
++ return;
++ }
++ // Reset Timer
++ mBenchmark.start();
++
++ TQPixmap dst = crossFade(*mOldScreen, mNextScreen, mAlpha, crossInit);
++ KPixmap pixm(dst);
++ setPixmap(&pixm, r->hash(), fadeDesk);
++
++ mAlpha -=0.03;
++ crossInit = false;
++}
++
++
++/*
+ * This slot is called when a renderer is done.
+ */
+ void KBackgroundManager::slotImageDone(int desk)
+@@ -592,6 +637,10 @@
+ KPixmap *pm = new KPixmap();
+ KVirtualBGRenderer *r = m_Renderer[desk];
+ bool do_cleanup = true;
++ fadeDesk = desk;
++ mAlpha = 1.0;
++ int width,height;
++
+
+ *pm = r->pixmap();
+ // If current: paint it
+@@ -603,7 +652,41 @@
+ //setPixmap(viewport_background, r->hash(), desk);
+ //delete viewport_background;
+
+- setPixmap(pm, r->hash(), desk);
++ //START
++ if (m_Renderer[effectiveDesktop()]->renderer(0)->crossFadeBg() && !m_Renderer[effectiveDesktop()]->renderer(0)->usingCrossXml()){
++ int mode = m_Renderer[effectiveDesktop()]->renderer(0)->wallpaperMode();
++ width = TQApplication::desktop()->screenGeometry().width(); //m_pDesktop->width();
++ height = TQApplication::desktop()->screenGeometry().height();// m_pDesktop->height();
++
++ if (mode == KBackgroundSettings::NoWallpaper || mode == KBackgroundSettings::Tiled || mode == KBackgroundSettings::CenterTiled ){
++ mNextScreen = TQPixmap(width,height);
++ TQPainter p (&mNextScreen);
++ p.drawTiledPixmap(0,0,width,height,*pm);
++ } else {
++ mNextScreen = TQPixmap(*pm);
++ }
++
++ if (m_pDesktop){
++ mOldScreen = const_cast<TQPixmap *>( m_pDesktop->backgroundPixmap() );
++ }else{
++ mOldScreen = const_cast<TQPixmap *>(
++ TQApplication::desktop()->screen()->backgroundPixmap() );
++ }
++
++ //TODO Find a way to discover if CrossFade effect needs to run
++ if (mOldScreen){
++ crossInit = true;
++ m_crossTimer->start(70);
++ } else{
++ setPixmap(pm, r->hash(), desk);
++ }
++ }else{
++ setPixmap(pm, r->hash(), desk);
++ }
++ //ENDS HERE */
++
++ //setPixmap(pm, r->hash(), desk);
++
+ if (!m_bBgInitDone)
+ {
+ m_bBgInitDone = true;
+@@ -801,7 +884,8 @@
+ TQString KBackgroundManager::currentWallpaper(int desk)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
++ //KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
++ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);
+
+ return r->currentWallpaper();
+ }
+@@ -818,7 +902,7 @@
+ // DCOP exported
+ void KBackgroundManager::setExport(int _export)
+ {
+- kdDebug() << "KBackgroundManager enabling exports.\n";
++// kdDebug() << "KBackgroundManager enabling exports.\n";
+ applyExport(_export);
+ slotChangeDesktop(0);
+ }
+@@ -843,7 +927,7 @@
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+ for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i)
+ {
+- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i);
++ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i);
+ r->stop();
+ r->setWallpaperMode(mode);
+ r->setMultiWallpaperMode(KBackgroundSettings::NoMulti);
+@@ -856,7 +940,7 @@
+ void KBackgroundManager::setWallpaper(TQString wallpaper)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(0);
++ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(0);
+ int mode = r->wallpaperMode();
+ if (mode == KBackgroundSettings::NoWallpaper)
+ mode = KBackgroundSettings::Tiled;
+@@ -869,7 +953,7 @@
+ TQStringList KBackgroundManager::wallpaperFiles(int desk)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);
++ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);
+
+ return r->wallpaperFiles();
+ }
+@@ -880,7 +964,7 @@
+ TQStringList KBackgroundManager::wallpaperList(int desk)
+ {
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+- KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);;
++ KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);;
+
+ return r->wallpaperList();
+ }
+@@ -907,7 +991,7 @@
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+ for (unsigned i=0; i < m_Renderer[sdesk]->numRenderers(); ++i)
+ {
+- KBackgroundRenderer *r = m_Renderer[sdesk]->renderer(i);
++ KCrossBGRender *r = m_Renderer[sdesk]->renderer(i);
+
+ setCommon(false); // Force each desktop to have it's own wallpaper
+
+@@ -974,7 +1058,7 @@
+ //TODO Is the behaviour of this function appropriate for multiple screens?
+ for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i)
+ {
+- KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i);
++ KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i);
+ r->stop();
+
+ if (isColorA)
+--- ./kdesktop/bgmanager.h.ORI 2013-05-08 19:13:25.120426716 +0200
++++ ./kdesktop/bgmanager.h 2013-05-08 19:15:12.071398460 +0200
+@@ -13,6 +13,7 @@
+ #include <tqstring.h>
+ #include <tqptrvector.h>
+
++#include <qdatetime.h>
+ #include <KBackgroundIface.h>
+
+ #if defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
+@@ -89,6 +90,7 @@
+ void desktopResized();
+ void clearRoot();
+ void saveImages();
++ void slotCrossFadeTimeout();
+ void slotCmBackgroundChanged(bool);
+
+ private:
+@@ -131,6 +133,15 @@
+ KPixmapServer *m_pPixmapServer;
+
+ unsigned long m_xrootpmap;
++
++ /*CrossFade vars*/
++ TQTimer * m_crossTimer;
++ double mAlpha;
++ TQPixmap mNextScreen;
++ TQPixmap * mOldScreen;
++ int fadeDesk;
++ TQTime mBenchmark;
++ bool crossInit;
+ };
+
+ #endif // __BGManager_h_Included__
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog_ui.ui.ORI 2013-05-15 12:13:14.000000000 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog_ui.ui 2013-05-15 12:20:25.000000000 +0000
+@@ -376,6 +376,17 @@
+ &lt;/ul&gt;&lt;/qt&gt;</string>
+ </property>
+ </widget>
++ <widget class="TQCheckBox" row="8" column="1">
++ <property name="name">
++ <cstring>m_cbCrossFadeBg</cstring>
++ </property>
++ <property name="text">
++ <string>Cross-fading background</string>
++ </property>
++ <property name="whatsThis" stdset="0">
++ <string>Enables a smooth fading effect when changing background image.</string>
++ </property>
++ </widget>
+ <widget class="TQComboBox" row="5" column="1">
+ <property name="name">
+ <cstring>m_comboBlend</cstring>
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdefaults.h.ORI 2013-05-15 13:42:20.933760867 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdefaults.h 2013-05-15 13:42:38.305365721 +0000
+@@ -34,5 +34,6 @@
+ #define _defBlendMode KBackgroundSettings::NoBlending
+ #define _defBlendBalance 100
+ #define _defReverseBlending false
++#define _defCrossFadeBg false
+
+ #endif // __BGDefaults_h_Included__
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.h.ORI 2013-05-15 13:37:34.228282617 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.h 2013-05-15 13:39:31.884606381 +0000
+@@ -198,6 +198,9 @@
+ void setReverseBlending(bool value);
+ bool reverseBlending() const { return m_ReverseBlending; }
+
++ void setCrossFadeBg(bool value);
++ bool crossFadeBg() const { return m_CrossFadeBg; }
++
+ void setBlendBalance(int value);
+ int blendBalance() const { return m_BlendBalance; }
+
+@@ -273,6 +276,7 @@
+ int m_BlendMode, defBlendMode;
+ int m_BlendBalance, defBlendBalance;
+ bool m_ReverseBlending, defReverseBlending;
++ bool m_CrossFadeBg, defCrossFadeBg;
+ int m_MinOptimizationDepth;
+ bool m_bShm;
+ bool m_bDrawBackgroundPerScreen;
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.cpp.ORI 2013-05-15 13:39:59.408980208 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgsettings.cpp 2013-05-15 13:46:15.197432823 +0000
+@@ -437,6 +437,7 @@
+ defBlendMode = _defBlendMode;
+ defBlendBalance = _defBlendBalance;
+ defReverseBlending = _defReverseBlending;
++ defCrossFadeBg = _defCrossFadeBg;
+
+ m_MinOptimizationDepth = _defMinOptimizationDepth;
+ m_bShm = _defShm;
+@@ -537,6 +538,7 @@
+ m_BlendMode = settings->m_BlendMode;
+ m_BlendBalance = settings->m_BlendBalance;
+ m_ReverseBlending = settings->m_ReverseBlending;
++ m_CrossFadeBg = settings->m_CrossFadeBg;
+ m_MinOptimizationDepth = settings->m_MinOptimizationDepth;
+ m_bShm = settings->m_bShm;
+ m_MultiMode = settings->m_MultiMode;
+@@ -633,6 +635,15 @@
+ }
+
+
++void KBackgroundSettings::setCrossFadeBg(bool value)
++{
++ if (m_CrossFadeBg == value)
++ return;
++ dirty = hashdirty = true;
++ m_CrossFadeBg = value;
++}
++
++
+ void KBackgroundSettings::setWallpaper(TQString wallpaper)
+ {
+ dirty = hashdirty = true;
+@@ -774,6 +785,8 @@
+
+ m_ReverseBlending = m_pConfig->readBoolEntry( "ReverseBlending", defReverseBlending);
+
++ m_CrossFadeBg = m_pConfig->readBoolEntry( "CrossFadeBg", defCrossFadeBg);
++
+ // Multiple wallpaper config
+ m_WallpaperList = m_pConfig->readPathListEntry("WallpaperList");
+
+@@ -834,6 +847,7 @@
+ m_pConfig->writeEntry("BlendMode", m_BlMRevMap[m_BlendMode]);
+ m_pConfig->writeEntry("BlendBalance", m_BlendBalance);
+ m_pConfig->writeEntry("ReverseBlending", m_ReverseBlending);
++ m_pConfig->writeEntry("CrossFadeBg", m_CrossFadeBg);
+ m_pConfig->writeEntry("MinOptimizationDepth", m_MinOptimizationDepth);
+ m_pConfig->writeEntry("UseSHM", m_bShm);
+
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.h.ORI 2013-05-15 13:56:09.397921090 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.h 2013-05-15 13:56:17.377739605 +0000
+@@ -80,6 +80,7 @@
+ void slotBlendReverse(bool b);
+ void desktopResized();
+ void setBlendingEnabled(bool);
++ void slotCrossFadeBg(bool);
+
+ protected:
+ void getEScreen();
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.cpp.ORI 2013-05-15 13:53:49.809095324 +0000
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/background/bgdialog.cpp 2013-05-15 13:53:54.636985486 +0000
+@@ -174,6 +174,10 @@
+ connect(m_cbBlendReverse, TQT_SIGNAL(toggled(bool)),
+ TQT_SLOT(slotBlendReverse(bool)));
+
++ // Crossfading background
++ connect(m_cbCrossFadeBg, TQT_SIGNAL(toggled(bool)),
++ TQT_SLOT(slotCrossFadeBg(bool)));
++
+ // advanced options
+ connect(m_buttonAdvanced, TQT_SIGNAL(clicked()),
+ TQT_SLOT(slotAdvanced()));
+@@ -304,6 +308,7 @@
+ m_cbBlendReverse->setEnabled( false );
+ m_buttonAdvanced->setEnabled( false );
+ m_buttonGetNew->setEnabled( false );
++ m_cbCrossFadeBg->setEnabled( false );
+ }
+
+ void BGDialog::load( bool useDefaults )
+@@ -781,6 +786,8 @@
+ m_cbBlendReverse->setChecked(r->reverseBlending());
+ m_sliderBlend->setValue( r->blendBalance() / 10 );
+
++ m_cbCrossFadeBg->setChecked(r->crossFadeBg());
++
+ m_comboBlend->blockSignals(false);
+ m_sliderBlend->blockSignals(false);
+
+@@ -1295,6 +1302,17 @@
+ eRenderer()->start(true);
+ }
+
++void BGDialog::slotCrossFadeBg(bool b)
++{
++ if (b == eRenderer()->crossFadeBg())
++ return;
++ emit changed(true);
++
++ eRenderer()->stop();
++ eRenderer()->setCrossFadeBg(b);
++ eRenderer()->start(true);
++}
++
+ void BGDialog::desktopResized()
+ {
+ for (unsigned i = 0; i < m_renderer.size(); ++i)
diff --git a/redhat/tdebase/tdebase-14.0.0-kickoff_default_favs.patch b/redhat/tdebase/tdebase-14.0.0-kickoff_default_favs.patch
new file mode 100644
index 000000000..4b6d5d6c8
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-kickoff_default_favs.patch
@@ -0,0 +1,16 @@
+--- trinity-tdebase-3.5.13.2~pre86+807a5445/kicker/kicker/ui/default-favs.ORI 2013-05-09 22:50:36.607264087 +0200
++++ trinity-tdebase-3.5.13.2~pre86+807a5445/kicker/kicker/ui/default-favs 2013-05-09 22:50:46.935039753 +0200
+@@ -1,9 +1,7 @@
+-MozillaFirefox.desktop
+-tde-Kontact.desktop
+-writer.desktop
+-tde-amarok.desktop
+-tde-digikam.desktop
+ tde-Home.desktop
++tde-konqbrowser.desktop
++tde-Kfind.desktop
++tde-kate.desktop
++tde-konsole.desktop
+ tde-KControl.desktop
+ tde-Help.desktop
+-tde-konsole.desktop
diff --git a/redhat/tdebase/tdebase-14.0.0-kickoff_xdg_dirs.patch b/redhat/tdebase/tdebase-14.0.0-kickoff_xdg_dirs.patch
new file mode 100644
index 000000000..0a692c42b
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-kickoff_xdg_dirs.patch
@@ -0,0 +1,45 @@
+--- ./kicker/kicker/ui/k_new_mnu.cpp.ori 2013-05-08 21:56:01.084691260 +0200
++++ ./kicker/kicker/ui/k_new_mnu.cpp 2013-05-08 21:58:02.086130445 +0200
+@@ -1428,6 +1428,42 @@
+ m_systemView->insertItem( "folder_man", i18n( "My Documents" ), documentPath, documentPath, nId++, index++ );
+ }
+
++ if ( TDEStandardDirs::exists( TDEGlobalSettings::picturesPath() + "/" ) )
++ {
++ TQString picturesPath = TDEGlobalSettings::picturesPath();
++ if ( picturesPath.endsWith( "/" ) )
++ picturesPath = picturesPath.left( picturesPath.length() - 1 );
++ if (picturesPath!=TQDir::homeDirPath())
++ m_systemView->insertItem( "folder_image", i18n( "My Images" ), picturesPath, picturesPath, nId++, index++ );
++ }
++
++ if ( TDEStandardDirs::exists( TDEGlobalSettings::musicPath() + "/" ) )
++ {
++ TQString musicPath = TDEGlobalSettings::musicPath();
++ if ( musicPath.endsWith( "/" ) )
++ musicPath = musicPath.left( musicPath.length() - 1 );
++ if (musicPath!=TQDir::homeDirPath())
++ m_systemView->insertItem( "folder_sound", i18n( "My Music" ), musicPath, musicPath, nId++, index++ );
++ }
++
++ if ( TDEStandardDirs::exists( TDEGlobalSettings::videosPath() + "/" ) )
++ {
++ TQString videosPath = TDEGlobalSettings::videosPath();
++ if ( videosPath.endsWith( "/" ) )
++ videosPath = videosPath.left( videosPath.length() - 1 );
++ if (videosPath!=TQDir::homeDirPath())
++ m_systemView->insertItem( "folder_video", i18n( "My Videos" ), videosPath, videosPath, nId++, index++ );
++ }
++
++ if ( TDEStandardDirs::exists( TDEGlobalSettings::downloadPath() + "/" ) )
++ {
++ TQString downloadPath = TDEGlobalSettings::downloadPath();
++ if ( downloadPath.endsWith( "/" ) )
++ downloadPath = downloadPath.left( downloadPath.length() - 1 );
++ if (downloadPath!=TQDir::homeDirPath())
++ m_systemView->insertItem( "folder_inbox", i18n( "My Downloads" ), downloadPath, downloadPath, nId++, index++ );
++ }
++
+ m_systemView->insertItem( "network", i18n( "Network Folders" ),
+ "remote:/", "remote:/", nId++, index++ );
+
diff --git a/redhat/tdebase/tdebase-14.0.0-konsole_wordseps.patch b/redhat/tdebase/tdebase-14.0.0-konsole_wordseps.patch
new file mode 100644
index 000000000..8bec27061
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-konsole_wordseps.patch
@@ -0,0 +1,48 @@
+diff -Nuar trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/kcontrol/konsole/kcmkonsole.cpp trinity-tdebase-14.0.0~pre737+02bf1e69/kcontrol/konsole/kcmkonsole.cpp
+--- trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/kcontrol/konsole/kcmkonsole.cpp 2013-07-10 07:56:40.070802259 +0200
++++ trinity-tdebase-14.0.0~pre737+02bf1e69/kcontrol/konsole/kcmkonsole.cpp 2013-07-10 07:58:53.680465150 +0200
+@@ -107,7 +107,7 @@
+ dialog->frameCB->setChecked(config.readBoolEntry("has frame",true));
+ dialog->line_spacingSB->setValue(config.readUnsignedNumEntry( "LineSpacing", 0 ));
+ dialog->silence_secondsSB->setValue(config.readUnsignedNumEntry( "SilenceSeconds", 10 ));
+- dialog->word_connectorLE->setText(config.readEntry("wordseps",":@-./_~"));
++ dialog->word_connectorLE->setText(config.readEntry("wordseps",":@-./_~+"));
+
+ dialog->SchemaEditor1->setSchema(config.readEntry("schema"));
+
+diff -Nuar trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/konsole/konsole/konsole.cpp trinity-tdebase-14.0.0~pre737+02bf1e69/konsole/konsole/konsole.cpp
+--- trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/konsole/konsole/konsole.cpp 2013-07-10 07:56:40.112802782 +0200
++++ trinity-tdebase-14.0.0~pre737+02bf1e69/konsole/konsole/konsole.cpp 2013-07-10 07:58:53.698465376 +0200
+@@ -1573,7 +1573,7 @@
+ b_warnQuit=config->readBoolEntry( "WarnQuit", true );
+ b_allowResize=config->readBoolEntry( "AllowResize", false);
+ b_bidiEnabled = config->readBoolEntry("EnableBidi",false);
+- s_word_seps= config->readEntry("wordseps",":@-./_~");
++ s_word_seps= config->readEntry("wordseps",":@-./_~+");
+ b_framevis = config->readBoolEntry("has frame",true);
+ TQPtrList<TEWidget> tes = activeTEs();
+ for (TEWidget *_te = tes.first(); _te; _te = tes.next()) {
+diff -Nuar trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/konsole/konsole/konsole_part.cpp trinity-tdebase-14.0.0~pre737+02bf1e69/konsole/konsole/konsole_part.cpp
+--- trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/konsole/konsole/konsole_part.cpp 2013-07-10 07:56:40.112802782 +0200
++++ trinity-tdebase-14.0.0~pre737+02bf1e69/konsole/konsole/konsole_part.cpp 2013-07-10 07:58:53.684465202 +0200
+@@ -565,7 +565,7 @@
+ n_keytab=config->readNumEntry("keytab",0); // act. the keytab for this session
+ n_scroll = TQMIN(config->readUnsignedNumEntry("scrollbar",TEWidget::SCRRIGHT),2);
+ m_histSize = config->readNumEntry("history",DEFAULT_HISTORY_SIZE);
+- s_word_seps= config->readEntry("wordseps",":@-./_~");
++ s_word_seps= config->readEntry("wordseps",":@-./_~+");
+
+ n_encoding = config->readNumEntry("encoding",0);
+
+diff -Nuar trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/konsole/konsole/TEWidget.cpp trinity-tdebase-14.0.0~pre737+02bf1e69/konsole/konsole/TEWidget.cpp
+--- trinity-tdebase-14.0.0~pre737+02bf1e69.ORI/konsole/konsole/TEWidget.cpp 2013-07-10 07:56:40.112802782 +0200
++++ trinity-tdebase-14.0.0~pre737+02bf1e69/konsole/konsole/TEWidget.cpp 2013-07-10 07:58:53.690465276 +0200
+@@ -352,7 +352,7 @@
+ ,preserve_line_breaks(true)
+ ,column_selection_mode(false)
+ ,scrollLoc(SCRNONE)
+-,word_characters(":@-./_~")
++,word_characters(":@-./_~+")
+ ,m_bellMode(BELLSYSTEM)
+ ,blinking(false)
+ ,cursorBlinking(false)
diff --git a/redhat/tdebase/tdebase-14.0.0-open_terminal_here.patch b/redhat/tdebase/tdebase-14.0.0-open_terminal_here.patch
new file mode 100644
index 000000000..503d1543e
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-open_terminal_here.patch
@@ -0,0 +1,11 @@
+--- trinity-tdebase-14.0.0~pre737+02bf1e69/kdesktop/krootwm.c.ORI 2013-07-07 19:52:01.913986986 +0200
++++ trinity-tdebase-14.0.0~pre737+02bf1e69/kdesktop/krootwm.cc 2013-07-07 19:52:49.676516510 +0200
+@@ -760,7 +760,7 @@
+ TDEConfigGroupSaver gs(TDEGlobal::config(), "General");
+ TQString terminal = TDEGlobal::config()->readPathEntry("TerminalApplication", "konsole");
+
+- *p << terminal << "--workdir=" + TDEGlobalSettings::desktopPath() + "/";
++ *p << terminal;
+
+ p->start(TDEProcess::DontCare);
+
diff --git a/redhat/tdebase/tdebase-14.0.0-suspend_unmount.patch b/redhat/tdebase/tdebase-14.0.0-suspend_unmount.patch
new file mode 100644
index 000000000..01d9e479b
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-suspend_unmount.patch
@@ -0,0 +1,151 @@
+--- ./tdeioslave/media/libmediacommon/medium.cpp.ori 2013-05-08 22:57:09.317384423 +0200
++++ ./tdeioslave/media/libmediacommon/medium.cpp 2013-05-08 22:57:36.730837358 +0200
+@@ -46,6 +46,7 @@
+ loadUserLabel();
+
+ m_halmounted = false;
++ m_isHotplug = false;
+ }
+
+ Medium::Medium()
+@@ -69,6 +70,7 @@
+ m_properties+= "false"; /* HIDDEN */
+
+ m_halmounted = false;
++ m_isHotplug = false;
+ }
+
+ const Medium Medium::create(const TQStringList &properties)
+--- ./tdeioslave/media/libmediacommon/medium.h.ORI 2013-05-08 22:59:10.772959829 +0200
++++ ./tdeioslave/media/libmediacommon/medium.h 2013-05-08 22:59:56.602044404 +0200
+@@ -92,6 +92,9 @@
+ void setHalMounted(bool flag) const { m_halmounted = flag; }
+ bool halMounted() const { return m_halmounted; }
+
++ void setIsHotplug( bool state ) { m_isHotplug = state; }
++ bool isHotplug() const { return m_isHotplug; }
++
+ //private:
+ Medium();
+
+@@ -100,6 +103,8 @@
+
+ TQStringList m_properties;
+ mutable bool m_halmounted;
++
++ bool m_isHotplug;
+
+ friend class TQValueListNode<const Medium>;
+ };
+--- ./tdeioslave/media/mediamanager/mediamanager.cpp.ori 2013-05-08 23:00:39.673183801 +0200
++++ ./tdeioslave/media/mediamanager/mediamanager.cpp 2013-05-08 23:04:47.639224260 +0200
+@@ -354,6 +354,57 @@
+ emit mediumChanged(name);
+ }
+
++TQString MediaManager::unmountAllSuspend()
++{
++ TQPtrList<Medium> list = m_mediaList.list();
++
++ TQPtrList<Medium>::const_iterator it = list.begin();
++ TQPtrList<Medium>::const_iterator end = list.end();
++
++ TQString result;
++
++ for (; it!=end; ++it)
++ {
++ if ( (*it)->isMounted() && (*it)->isHotplug() )
++ {
++ TQString tmp = unmount( (*it)->id() );
++ if ( !tmp.isEmpty() ) { // umount failed
++ result = tmp;
++ } else {
++ m_suspendResumeMountList.append( (*it)->id() );
++ }
++ }
++ }
++
++ // return last error
++ return result;
++}
++
++TQString MediaManager::remountAllResume()
++{
++ TQString result;
++
++ for (TQStringList::const_iterator it = m_suspendResumeMountList.begin();
++ it != m_suspendResumeMountList.end();
++ ++it)
++ {
++ const Medium *m = m_mediaList.findById(*it);
++
++ if ( m && m->needMounting() )
++ {
++ TQString tmp = mount( *it );
++ if ( !tmp.isEmpty() ) { // mount failed
++ result = tmp;
++ }
++ }
++ }
++
++ m_suspendResumeMountList.clear();
++
++ // return last error
++ return result;
++}
++
+
+ extern "C" {
+ KDE_EXPORT KDEDModule *create_mediamanager(const TQCString &obj)
+--- ./tdeioslave/media/mediamanager/mediamanager.h.ORI 2013-05-08 23:05:36.250251036 +0200
++++ ./tdeioslave/media/mediamanager/mediamanager.h 2013-05-08 23:07:27.650019601 +0200
+@@ -60,6 +60,20 @@
+ bool removableUnplug(const TQString &devNode);
+ bool removableCamera(const TQString &devNode);
+
++ /**
++ * Unmount manually all partitions when going to suspend
++ *
++ * @return last error if any
++ */
++ TQString unmountAllSuspend();
++
++ /**
++ * Remount previously unmounted partitions in unmountAllSuspend()
++ *
++ * @return last error if any
++ */
++ TQString remountAllResume();
++
+ k_dcop_signals:
+ void mediumAdded(const TQString &name, bool allowNotification);
+ void mediumRemoved(const TQString &name, bool allowNotification);
+@@ -89,6 +103,7 @@
+ TDEBackend *m_tdebackend;
+ MediaDirNotify m_dirNotify;
+ FstabBackend *m_fstabbackend;
++ TQStringList m_suspendResumeMountList;
+ };
+
+ #endif
+--- ./tdeioslave/media/mediamanager/halbackend.cpp.ori 2013-05-08 23:08:12.196126863 +0200
++++ ./tdeioslave/media/mediamanager/halbackend.cpp 2013-05-08 23:08:51.096347073 +0200
+@@ -541,6 +541,7 @@
+ libhal_volume_is_mounted(halVolume) ); /* Mounted ? */
+ }
+
++ medium->setIsHotplug( libhal_drive_is_hotpluggable(halDrive) );
+
+ char* name = libhal_volume_policy_compute_display_name(halDrive, halVolume, m_halStoragePolicy);
+ TQString volume_name = TQString::fromUtf8(name);
+--- ./tdeioslave/media/mediamanager/halbackend.h.ORI 2013-05-08 23:09:35.761451488 +0200
++++ ./tdeioslave/media/mediamanager/halbackend.h 2013-05-08 23:10:21.608531952 +0200
+@@ -89,6 +89,8 @@
+ TQString decrypt(const TQString &id, const TQString &password);
+ TQString undecrypt(const TQString &id);
+
++ static bool isHotplug( const TQString & id );
++
+ private:
+ /**
+ * Append a device in the media list. This function will check if the device
diff --git a/redhat/tdebase/tdebase-14.0.0-vibrate_dialog.patch b/redhat/tdebase/tdebase-14.0.0-vibrate_dialog.patch
new file mode 100644
index 000000000..881de1d5c
--- /dev/null
+++ b/redhat/tdebase/tdebase-14.0.0-vibrate_dialog.patch
@@ -0,0 +1,186 @@
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/screensaver/scrnsave.h.ORI 2013-05-14 22:12:18.159235590 +0200
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/screensaver/scrnsave.h 2013-05-14 22:12:56.657422259 +0200
+@@ -58,6 +58,7 @@
+ void slotLock( bool );
+ void slotDelaySaverStart( bool );
+ void slotUseTSAK( bool );
++ void slotVibrateUnlock( bool );
+ void slotUseUnmanagedLockWindows( bool );
+ void slotHideActiveWindowsFromSaver( bool );
+ void processLockouts();
+@@ -101,6 +102,7 @@
+ TQGroupBox *mSettingsGroup;
+ TQCheckBox *mDelaySaverStartCheckBox;
+ TQCheckBox *mUseTSAKCheckBox;
++ TQCheckBox *mVibrateUnlockCheckBox;
+ TQCheckBox *mUseUnmanagedLockWindowsCheckBox;
+ TQCheckBox *mHideActiveWindowsFromSaverCheckBox;
+
+@@ -119,6 +121,7 @@
+ bool mImmutable;
+ bool mDelaySaverStart;
+ bool mUseTSAK;
++ bool mVibrateUnlock;
+ bool mUseUnmanagedLockWindows;
+ bool mHideActiveWindowsFromSaver;
+
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/screensaver/scrnsave.cpp.vibrate_dialog 2013-04-26 22:15:23.000000000 +0200
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kcontrol/screensaver/scrnsave.cpp 2013-05-14 22:24:37.354375502 +0200
+@@ -270,6 +270,13 @@
+ settingsGroupLayout->addWidget(mHideActiveWindowsFromSaverCheckBox, 3, 1);
+ TQWhatsThis::add( mHideActiveWindowsFromSaverCheckBox, i18n("Hide all active windows from the screen saver and use the desktop background as the screen saver input.") );
+
++ mVibrateUnlockCheckBox = new TQCheckBox( i18n("&Vibrate unlock dialog box on failure"), mSettingsGroup );
++ mVibrateUnlockCheckBox->setEnabled( true );
++ mVibrateUnlockCheckBox->setChecked( mVibrateUnlock );
++ connect( mVibrateUnlockCheckBox, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotVibrateUnlock( bool ) ) );
++ settingsGroupLayout->addWidget(mVibrateUnlockCheckBox, 4, 1);
++ TQWhatsThis::add( mVibrateUnlockCheckBox, i18n("Makes the unlock dialog box vibrate when entering an incorrect password.") );
++
+ // right column
+ TQBoxLayout* rightColumnLayout = new TQVBoxLayout(topLayout, KDialog::spacingHint());
+
+@@ -429,6 +436,7 @@
+ mLock = config->readBoolEntry("Lock", false);
+ mDelaySaverStart = config->readBoolEntry("DelaySaverStart", true);
+ mUseTSAK = config->readBoolEntry("UseTDESAK", true);
++ mVibrateUnlock = config->readBoolEntry("VibrateUnlock", true);
+ mUseUnmanagedLockWindows = config->readBoolEntry("UseUnmanagedLockWindows", false);
+ mHideActiveWindowsFromSaver = config->readBoolEntry("HideActiveWindowsFromSaver", true);
+ mSaver = config->readEntry("Saver");
+@@ -481,6 +489,7 @@
+ config->writeEntry("Lock", mLock);
+ config->writeEntry("DelaySaverStart", mDelaySaverStart);
+ config->writeEntry("UseTDESAK", mUseTSAK);
++ config->writeEntry("VibrateUnlock", mVibrateUnlock);
+ config->writeEntry("UseUnmanagedLockWindows", mUseUnmanagedLockWindows);
+ config->writeEntry("HideActiveWindowsFromSaver", mHideActiveWindowsFromSaver);
+
+@@ -688,10 +697,14 @@
+ mUseTSAKCheckBox->setChecked( false );
+ }
+ if (!mUseUnmanagedLockWindows) {
++ mVibrateUnlockCheckBox->setEnabled( true );
++ mVibrateUnlockCheckBox->setChecked( mVibrateUnlock );
+ mHideActiveWindowsFromSaverCheckBox->setEnabled( true );
+ mHideActiveWindowsFromSaverCheckBox->setChecked( mHideActiveWindowsFromSaver );
+ }
+ else {
++ mVibrateUnlockCheckBox->setEnabled( false );
++ mVibrateUnlockCheckBox->setChecked( false );
+ mHideActiveWindowsFromSaverCheckBox->setEnabled( false );
+ mHideActiveWindowsFromSaverCheckBox->setChecked( false );
+ }
+@@ -936,6 +949,16 @@
+ processLockouts();
+ mChanged = true;
+ emit changed(true);
++}
++
++//---------------------------------------------------------------------------
++//
++void KScreenSaver::slotVibrateUnlock( bool u )
++{
++ if (mVibrateUnlockCheckBox->isEnabled()) mVibrateUnlock = u;
++ processLockouts();
++ mChanged = true;
++ emit changed(true);
+ }
+
+ //---------------------------------------------------------------------------
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kdesktop/lock/lockdlg.h.vibrate_dialog 2013-01-09 02:12:13.000000000 +0100
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kdesktop/lock/lockdlg.h 2013-05-14 22:42:50.562878532 +0200
+@@ -60,6 +60,7 @@
+ void slotOK();
+ void layoutClicked();
+ void slotActivity();
++ void moveTimerDone();
+
+ protected slots:
+ virtual void reject();
+@@ -79,6 +80,8 @@
+ void handleVerify();
+ void reapVerify();
+ void cantCheck();
++ void movedialog( int _move );
++ void badPasswordLogin();
+ GreeterPluginHandle *mPlugin;
+ KGreeterPlugin *greet;
+ TQFrame *frame;
+@@ -95,6 +98,8 @@
+ int sPid, sFd;
+ TQListView *lv;
+ TQDateTime m_lockStartDT;
++ bool waitMoveDialog;
++ bool VibrateUnlock;
+ };
+
+ #endif
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kdesktop/lock/lockdlg.cc.vibrate_dialog 2013-01-09 02:12:13.000000000 +0100
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kdesktop/lock/lockdlg.cc 2013-05-14 22:42:12.809621715 +0200
+@@ -55,6 +55,7 @@
+ #include <X11/keysym.h>
+ #include <X11/Xatom.h>
+ #include <fixx11h.h>
++#include <tdeapplication.h>
+
+ #ifndef AF_LOCAL
+ # define AF_LOCAL AF_UNIX
+@@ -246,6 +247,11 @@
+ mLayoutButton->hide(); // no kxkb running
+ }
+ capsLocked();
++
++ TDEConfig* config = new TDEConfig("kdesktoprc");
++ config->setGroup("ScreenSaver");
++ VibrateUnlock = config->readBoolEntry("VibrateUnlock", true);
++ delete config;
+ }
+
+ PasswordDlg::~PasswordDlg()
+@@ -302,6 +308,37 @@
+ }
+ }
+
++void PasswordDlg::movedialog( int _move )
++{
++ waitMoveDialog = true;
++ this->move(pos().x()+_move, pos().y());
++ TQTimer::singleShot( 50, this, TQT_SLOT(moveTimerDone()) );
++ while (waitMoveDialog) {
++ kapp->processEvents();
++ }
++}
++
++void PasswordDlg::moveTimerDone()
++{
++ waitMoveDialog = false;
++}
++
++void PasswordDlg::badPasswordLogin()
++{
++ if ( VibrateUnlock && mUnlockingFailed )
++ {
++ for ( int i = 0 ; i<2 ; i++)
++ {
++ movedialog( 10 );
++ movedialog( -20 );
++ movedialog( 20 );
++ movedialog( -20 );
++ movedialog( 20 );
++ movedialog( -10 );
++ }
++ }
++}
++
+ //---------------------------------------------------------------------------
+ //
+ // Handle timer events.
+@@ -442,6 +479,7 @@
+ ok->setEnabled(false);
+ cancel->setEnabled(false);
+ mNewSessButton->setEnabled( false );
++ badPasswordLogin();
+ return;
+ case AuthAbort:
+ return;
diff --git a/redhat/tdebase/tdebase-14.0.0.spec b/redhat/tdebase/tdebase-14.0.0.spec
index 8c1104287..f239819f5 100644
--- a/redhat/tdebase/tdebase-14.0.0.spec
+++ b/redhat/tdebase/tdebase-14.0.0.spec
@@ -71,6 +71,26 @@ Source8: tdm%{?dist}.pp
Source9: mgabutton.svg
%endif
+# Patch party !
+## [tdebase/kdesktop] Modifies 'open terminal here' on desktop [RHEL/Fedora]
+Patch1: tdebase-14.0.0-open_terminal_here.patch
+## [tdebase/starttde] Sets default Start Icon in 'kickerrc' [RHEL/Fedora]
+Patch2: tdebase-14.0.0-default_menu_icon.patch
+## [kdebase/kcontrol] Adds FR translation for KCM ICC
+Patch3: tdebase-14.0.0-displayconfig_translation.patch
+## [kdebase/kcontrol] Adds FR translation for KCM ICC
+Patch4: tdebase-14.0.0-kickoff_default_favs.patch
+## [kdebase] Changes konsole default word separator
+Patch5: tdebase-14.0.0-konsole_wordseps.patch
+
+# Patches from Mandriva
+Patch101: tdebase-14.0.0-vibrate_dialog.patch
+Patch102: tdebase-14.0.0-kcontrol_menu_entry.patch
+Patch103: tdebase-14.0.0-kdesktop_crossfade.patch
+Patch104: tdebase-14.0.0-kickoff_xdg_dirs.patch
+Patch105: tdebase-14.0.0-suspend_unmount.patch
+Patch106: tdebase-14.0.0-bookmark_global_copy.patch
+
### Distribution-specific settings ###
@@ -2793,9 +2813,15 @@ TDE will start, but many good defaults will not be set.
%post -n trinity-ksmserver
/sbin/ldconfig || :
+%if 0%{?mdkversion} || 0%{?mgaversion}
+fndSession
+%endif
%postun -n trinity-ksmserver
/sbin/ldconfig || :
+%if 0%{?mdkversion} || 0%{?mgaversion}
+fndSession
+%endif
##########
@@ -3191,7 +3217,18 @@ Windows and Samba shares.
%prep
%setup -q -n %{name}-%{version}%{?preversion:~%{preversion}}
-
+%patch1 -p1 -b .openterminalhere
+%patch2 -p1 -b .startmenuicon
+%patch3 -p1 -b .displayconfigtranslation
+%patch4 -p1 -b .kickoffdefaultsfav
+%patch5 -p1 -b .konsolewordseps
+
+%patch101 -p1 -b .vibrate_dialog
+%patch102 -p1 -b .kcontrol_menu_entry
+%patch103 -p1 -b .kdesktop_crossfade
+%patch104 -p1 -b .kickoff_xdg
+%patch105 -p1 -b .suspend_unmount
+%patch106 -p1 -b .bookmark_global_copy
# Applies an optional distro-specific graphical theme
%if "%{?tde_bg}" != ""
@@ -3224,6 +3261,14 @@ Windows and Samba shares.
-e "s|/opt/trinity|%{tde_prefix}|g" \
-e "s|%%{tde_starticon}|%{tde_starticon}|g"
+# Xsession script location may vary on some distro
+%if 0%{?rhel} || 0%{?fedora}
+%__sed -i "tdm/kfrontend/gentdmconf.c" -e "s|/etc/X11/Xsession|/etc/X11/xinit/Xsession|"
+%endif
+%if 0%{?suse_version}
+%__sed -i "tdm/kfrontend/gentdmconf.c" -e "s|/etc/X11/Xsession|/etc/X11/xdm/Xsession|"
+%endif
+
%build
unset QTDIR
@@ -3410,7 +3455,7 @@ EOF
# Mageia icon
%if 0%{?mgaversion} >= 3
-%__install -D -m 644 %{SOURCE9} %{?buildroot}%{tde_datadir}/oxygen/scalable/mgabutton.svg
+%__install -D -m 644 "%{SOURCE9}" "%{?buildroot}%{tde_datadir}/oxygen/scalable/mgabutton.svg"
%endif
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch b/redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch
index 3b4e86819..0d6e5cf83 100644
--- a/redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch
+++ b/redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch
@@ -814,7 +814,7 @@ diff -p -up kdebase-3.5.9/kcontrol/background/KCrossBGRender.cc.crossfade-efect
#include <tqstring.h>
#include <tqptrvector.h>
-+#include <qdatetime.h>
++#include <tqdatetime.h>
#include <KBackgroundIface.h>
#if defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
diff --git a/redhat/tdelibs/tdelibs-14.0.0-cups_by_default.patch b/redhat/tdelibs/tdelibs-14.0.0-cups_by_default.patch
new file mode 100644
index 000000000..2f281cf04
--- /dev/null
+++ b/redhat/tdelibs/tdelibs-14.0.0-cups_by_default.patch
@@ -0,0 +1,33 @@
+--- ./tdeprint/kmfactory.cpp.ORI 2013-05-09 00:14:51.664045869 +0200
++++ ./tdeprint/kmfactory.cpp 2013-05-09 00:16:59.154367127 +0200
+@@ -249,8 +249,21 @@
+ conf->writeEntry("PrintSystem", sys);
+ conf->sync();
+ }
+- else if ( sys.length()==1 && sys[0].isDigit() ) // discard old-style settings
++ else if ( sys.length()==1 && sys[0].isDigit() ) { // discard old-style settings
+ sys = "lpdunix";
++ } else {
++ //Always Autodetect
++ //it will not try autodetect if user changes any option
++ //when user force some option, AlwaysSearch will be "no" and then
++ //kprinter will not to try autodetect again.
++ if(conf->readEntry("AlwaysSearch") != "no" ) {
++ sys = autoDetect();
++ conf->writeEntry("PrintSystem",sys);
++ conf->writeEntry("AlwaysSearch","yes");
++ conf->sync();
++ }
++ }
++
+ return sys;
+ }
+
+@@ -278,6 +291,7 @@
+ {
+ TDEConfig *conf = printConfig();
+ conf->setGroup("General");
++ conf->writeEntry("AlwaysSearch","no");
+ conf->writeEntry("PrintSystem", syst);
+ conf->sync();
+
diff --git a/redhat/tdelibs/tdelibs-14.0.0-fix_battery_charge.patch b/redhat/tdelibs/tdelibs-14.0.0-fix_battery_charge.patch
new file mode 100644
index 000000000..2b09620bb
--- /dev/null
+++ b/redhat/tdelibs/tdelibs-14.0.0-fix_battery_charge.patch
@@ -0,0 +1,18 @@
+--- trinity-tdelibs-14.0.0~pre596+d6816283/tdecore/tdehardwaredevices.cpp.batterycharge 2013-07-07 11:55:57.000000000 +0200
++++ trinity-tdelibs-14.0.0~pre596+d6816283/tdecore/tdehardwaredevices.cpp 2013-07-08 20:21:00.196653825 +0200
+@@ -4704,6 +4704,15 @@
+ if (nodename == "alarm") {
+ bdevice->internalSetAlarmEnergy(line.toDouble()/1000000.0);
+ }
++ if (nodename == "charge_full") {
++ bdevice->internalSetMaximumEnergy(line.toDouble()/1000000.0);
++ }
++ if (nodename == "charge_full_design") {
++ bdevice->internalSetMaximumDesignEnergy(line.toDouble()/1000000.0);
++ }
++ if (nodename == "charge_now") {
++ bdevice->internalSetEnergy(line.toDouble()/1000000.0);
++ }
+ if (nodename == "energy_full") {
+ bdevice->internalSetMaximumEnergy(line.toDouble()/1000000.0);
+ }
diff --git a/redhat/tdelibs/tdelibs-14.0.0-xdg_dirs_set_path.patch b/redhat/tdelibs/tdelibs-14.0.0-xdg_dirs_set_path.patch
new file mode 100644
index 000000000..f32dec25b
--- /dev/null
+++ b/redhat/tdelibs/tdelibs-14.0.0-xdg_dirs_set_path.patch
@@ -0,0 +1,150 @@
+--- ./tdecore/tdeglobalsettings.h.Ori 2013-05-08 22:16:42.771982104 +0200
++++ ./tdecore/tdeglobalsettings.h 2013-05-08 22:18:33.882577602 +0200
+@@ -253,6 +253,29 @@
+ */
+ static TQString documentPath() { initStatic(); return *s_documentPath; }
+
++ /**
++ * The path where documents are stored of the current user.
++ * @return the path of the videos directory
++ */
++ static TQString videosPath() { initStatic(); return *s_videosPath; }
++
++ /**
++ * The path where documents are stored of the current user.
++ * @return the path of the music directory
++ */
++ static TQString musicPath() { initStatic(); return *s_musicPath; }
++
++ /**
++ * The path where documents are stored of the current user.
++ * @return the path of the downloads directory
++ */
++ static TQString downloadPath() { initStatic(); return *s_downloadPath; }
++
++ /**
++ * The path where documents are stored of the current user.
++ * @return the path of the pictures directory
++ */
++ static TQString picturesPath() { initStatic(); return *s_picturesPath; }
+
+ /**
+ * The default color to use when highlighting toolbar buttons.
+@@ -560,6 +583,10 @@
+ static TQString* s_autostartPath;
+ static TQString* s_trashPath;
+ static TQString* s_documentPath;
++ static TQString* s_picturesPath;
++ static TQString* s_downloadPath;
++ static TQString* s_musicPath;
++ static TQString* s_videosPath;
+ static TQFont *_generalFont;
+ static TQFont *_fixedFont;
+ static TQFont *_toolBarFont;
+--- ./tdecore/tdeglobalsettings.cpp.xdg_path 2013-01-09 19:23:09.000000000 +0100
++++ ./tdecore/tdeglobalsettings.cpp 2013-05-08 22:26:26.451376166 +0200
+@@ -62,6 +62,10 @@
+ TQString* TDEGlobalSettings::s_autostartPath = 0;
+ TQString* TDEGlobalSettings::s_trashPath = 0;
+ TQString* TDEGlobalSettings::s_documentPath = 0;
++TQString* TDEGlobalSettings::s_videosPath = 0;
++TQString* TDEGlobalSettings::s_musicPath = 0;
++TQString* TDEGlobalSettings::s_downloadPath = 0;
++TQString* TDEGlobalSettings::s_picturesPath = 0;
+ TQFont *TDEGlobalSettings::_generalFont = 0;
+ TQFont *TDEGlobalSettings::_fixedFont = 0;
+ TQFont *TDEGlobalSettings::_toolBarFont = 0;
+@@ -83,7 +87,7 @@
+
+ // helper function for reading xdg user dirs: it is required in order to take
+ // care of locale stuff
+-void readXdgUserDirs(TQString *desktop, TQString *documents)
++void readXdgUserDirs(TQString *desktop, TQString *documents, TQString *videos, TQString *music, TQString *download, TQString *pictures)
+ {
+ TQFile f( TQDir::homeDirPath() + "/.config/user-dirs.dirs" );
+
+@@ -101,6 +105,14 @@
+ *desktop = line.remove("XDG_DESKTOP_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
+ else if (line.startsWith("XDG_DOCUMENTS_DIR="))
+ *documents = line.remove("XDG_DOCUMENTS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
++ else if (line.startsWith("XDG_MUSIC_DIR="))
++ *videos = line.remove("XDG_MUSIC_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
++ else if (line.startsWith("XDG_DOWNLOAD_DIR="))
++ *download = line.remove("XDG_DOWNLOAD_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
++ else if (line.startsWith("XDG_VIDEOS_DIR="))
++ *music = line.remove("XDG_VIDEOS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
++ else if (line.startsWith("XDG_PICTURES_DIR="))
++ *pictures = line.remove("XDG_PICTURES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
+
+ line = s.readLine();
+ }
+@@ -515,30 +527,45 @@
+ s_autostartPath = new TQString();
+ s_trashPath = new TQString();
+ s_documentPath = new TQString();
++ s_videosPath = new TQString();
++ s_musicPath = new TQString();
++ s_downloadPath = new TQString();
++ s_picturesPath = new TQString();
++
+
+ TDEConfigGroup g( TDEGlobal::config(), "Paths" );
+
+- // Read desktop and documents path using XDG_USER_DIRS
+- readXdgUserDirs(s_desktopPath, s_documentPath);
++ // Read desktop and documents path using XDG_USER_DIRS
++ readXdgUserDirs(s_desktopPath, s_documentPath, s_musicPath, s_videosPath, s_downloadPath, s_picturesPath);
+
+ if (s_desktopPath->isEmpty() == true) {
+ *s_desktopPath = TQDir::homeDirPath() + "/Desktop/";
+ }
++
+ *s_desktopPath = TQDir::cleanDirPath( *s_desktopPath );
+ if ( !s_desktopPath->endsWith("/") )
+ s_desktopPath->append('/');
+
+- if (s_documentPath->isEmpty() == true) {
+-#ifdef Q_WS_WIN
+- *s_documentPath = getWin32ShellFoldersPath("Personal");
+-#else
+- *s_documentPath = TQDir::homeDirPath() + "/Documents/";
+-#endif
+- }
+ *s_documentPath = TQDir::cleanDirPath( *s_documentPath );
+ if ( !s_documentPath->endsWith("/"))
+ s_documentPath->append('/');
+
++ *s_musicPath = TQDir::cleanDirPath( *s_musicPath );
++ if ( !s_musicPath->endsWith("/"))
++ s_musicPath->append('/');
++
++ *s_videosPath = TQDir::cleanDirPath( *s_videosPath );
++ if ( !s_videosPath->endsWith("/"))
++ s_videosPath->append('/');
++
++ *s_downloadPath = TQDir::cleanDirPath( *s_downloadPath );
++ if ( !s_downloadPath->endsWith("/"))
++ s_downloadPath->append('/');
++
++ *s_picturesPath = TQDir::cleanDirPath( *s_picturesPath );
++ if ( !s_picturesPath->endsWith("/"))
++ s_picturesPath->append('/');
++
+ // Trash Path - TODO remove in KDE4 (tdeio_trash can't use it for interoperability reasons)
+ *s_trashPath = *s_desktopPath + i18n("Trash") + "/";
+ *s_trashPath = g.readPathEntry( "Trash" , *s_trashPath);
+@@ -603,6 +630,14 @@
+ s_desktopPath = 0L;
+ delete s_documentPath;
+ s_documentPath = 0L;
++ delete s_videosPath;
++ s_videosPath = 0L;
++ delete s_picturesPath;
++ s_picturesPath = 0L;
++ delete s_downloadPath;
++ s_downloadPath = 0L;
++ delete s_musicPath;
++ s_musicPath = 0L;
+ }
+
+ TDEGlobalSettings::KMouseSettings & TDEGlobalSettings::mouseSettings()
diff --git a/redhat/tdelibs/tdelibs-14.0.0.spec b/redhat/tdelibs/tdelibs-14.0.0.spec
index 37d2bf0ff..f301dae6a 100644
--- a/redhat/tdelibs/tdelibs-14.0.0.spec
+++ b/redhat/tdelibs/tdelibs-14.0.0.spec
@@ -32,6 +32,12 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Source0: %{name}-%{version}%{?preversion:~%{preversion}}.tar.gz
+# Patches from Mandriva
+Patch1: tdelibs-14.0.0-xdg_dirs_set_path.patch
+Patch2: tdelibs-14.0.0-cups_by_default.patch
+
+# Fix battery charge detection
+Patch3: tdelibs-14.0.0-fix_battery_charge.patch
Obsoletes: tdelibs < %{version}-%{release}
Provides: tdelibs = %{version}-%{release}
@@ -232,13 +238,13 @@ kimgio (image manipulation).
%{tde_bindir}/tdecmshell
%{tde_bindir}/tdeconf_update
%{tde_bindir}/kcookiejar
-%{tde_bindir}/[kt]de-config
-%{tde_bindir}/[kt]de-menu
+%{tde_bindir}/tde-config
+%{tde_bindir}/tde-menu
%{tde_bindir}/kded
-%{tde_bindir}/[kt]deinit
-%{tde_bindir}/[kt]deinit_shutdown
-%{tde_bindir}/[kt]deinit_wrapper
-%{tde_bindir}/[kt]desu_stub
+%{tde_bindir}/tdeinit
+%{tde_bindir}/tdeinit_shutdown
+%{tde_bindir}/tdeinit_wrapper
+%{tde_bindir}/tdesu_stub
%{tde_bindir}/kdetcompmgr
%{tde_bindir}/kdontchangethehostname
%{tde_bindir}/tdedostartupconfig
@@ -265,8 +271,8 @@ kimgio (image manipulation).
%{tde_bindir}/make_driver_db_lpr
%{tde_bindir}/meinproc
%{tde_bindir}/networkstatustestservice
-%{tde_bindir}/start_[kt]deinit
-%{tde_bindir}/start_[kt]deinit_wrapper
+%{tde_bindir}/start_tdeinit
+%{tde_bindir}/start_tdeinit_wrapper
%attr(4755,root,root) %{tde_bindir}/kgrantpty
%{tde_bindir}/tde_dbus_hardwarecontrol
%{tde_bindir}/checkXML
@@ -275,9 +281,9 @@ kimgio (image manipulation).
%{tde_bindir}/preparetips
%{tde_tdelibdir}/*
%{tde_libdir}/lib*.so.*
-%{tde_libdir}/lib[kt]deinit_*.la
-%{tde_libdir}/lib[kt]deinit_*.so
-%{tde_datadir}/applications/[kt]de/*.desktop
+%{tde_libdir}/libtdeinit_*.la
+%{tde_libdir}/libtdeinit_*.so
+%{tde_datadir}/applications/tde/*.desktop
%{tde_datadir}/autostart/tdeab2tdeabc.desktop
%{tde_datadir}/applnk/tdeio_iso.desktop
%{tde_datadir}/apps/*
@@ -333,16 +339,16 @@ applications for TDE.
%defattr(-,root,root,-)
%{tde_bindir}/dcopidl*
%{tde_bindir}/*config_compiler
-%{tde_bindir}/make[kt]dewidgets
+%{tde_bindir}/maketdewidgets
%{tde_datadir}/apps/ksgmltools2/
%{tde_tdeincludedir}/*
%{tde_libdir}/*.la
%{tde_libdir}/*.so
%{tde_libdir}/*.a
%{tde_libdir}/pkgconfig/tdelibs.pc
-%exclude %{tde_libdir}/lib[kt]deinit_*.la
-%exclude %{tde_libdir}/lib[kt]deinit_*.so
-%{tde_datadir}/cmake/[kt]delibs.cmake
+%exclude %{tde_libdir}/libtdeinit_*.la
+%exclude %{tde_libdir}/libtdeinit_*.so
+%{tde_datadir}/cmake/tdelibs.cmake
%post devel
/sbin/ldconfig || :
@@ -360,6 +366,9 @@ applications for TDE.
%prep
%setup -q -n %{name}-%{version}%{?preversion:~%{preversion}}
+%patch1 -p1 -b .xdg_path
+%patch2 -p1 -b .cups_by_default
+%patch3 -p1 -b .batterycharge
%build