summaryrefslogtreecommitdiffstats
path: root/redhat/tdebase
diff options
context:
space:
mode:
authorFrançois Andriot <albator78@libertysurf.fr>2013-06-24 19:58:32 +0200
committerFrançois Andriot <albator78@libertysurf.fr>2013-06-24 19:58:32 +0200
commitd8e1ce857bedb9d018ae0918b4c90686d604c2df (patch)
tree111a8759c0599ce2be8d25946d21dee4f69923b9 /redhat/tdebase
parent8743b3f65cd27e30aefe49f127105aa305a86051 (diff)
downloadtde-packaging-d8e1ce857bedb9d018ae0918b4c90686d604c2df.tar.gz
tde-packaging-d8e1ce857bedb9d018ae0918b4c90686d604c2df.zip
RPM Packaging: add 3.5.13.2 build patches
Diffstat (limited to 'redhat/tdebase')
-rw-r--r--redhat/tdebase/kdebase-3.5.13.2-add_ck_shutdown.patch15
-rw-r--r--redhat/tdebase/kdebase-3.5.13.2-add_disable_composite_option.patch81
-rw-r--r--redhat/tdebase/kdebase-3.5.13.2-build_without_dbustqt.patch139
-rw-r--r--redhat/tdebase/kdebase-3.5.13.2-set_kdm_minuid.patch39
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-bookmark_global_copy.patch27
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-displayconfig_translation.patch37
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-fix_media_safelyremove.patch10
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kbackground_xml_selector.patch701
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kcontrol_menu_entry.patch20
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch1002
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kdesu-noignorebutton.patch26
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kdm_theme_selector.patch229
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kdm_utf8_password.patch297
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kickoff_add_packagekit_shortcut.patch12
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kickoff_default_favs.patch16
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-kickoff_xdg_dirs.patch45
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-select_wm_gui.patch639
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-suspend_unmount.patch152
-rw-r--r--redhat/tdebase/tdebase-3.5.13.2-vibrate_dialog.patch186
19 files changed, 3673 insertions, 0 deletions
diff --git a/redhat/tdebase/kdebase-3.5.13.2-add_ck_shutdown.patch b/redhat/tdebase/kdebase-3.5.13.2-add_ck_shutdown.patch
new file mode 100644
index 000000000..b862f00ca
--- /dev/null
+++ b/redhat/tdebase/kdebase-3.5.13.2-add_ck_shutdown.patch
@@ -0,0 +1,15 @@
+--- trinity-tdebase-3.5.13.2/kdmlib/dmctl.cpp.ORI 2013-02-15 22:22:05.217381830 +0100
++++ trinity-tdebase-3.5.13.2/kdmlib/dmctl.cpp 2013-02-15 22:52:06.635823349 +0100
+@@ -180,7 +180,12 @@
+ if (DMType == GDM)
+ return exec( "QUERY_LOGOUT_ACTION\n", re ) && re.find("HALT") >= 0;
+
++#ifdef WITH_CONSOLE_KIT
++ // Use consolekit to check if we can shutdown the computer
++ return exec( "dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.CanStop\n", re ) && re.find("boolean true") >= 0;
++#else
+ return exec( "caps\n", re ) && re.find( "\tshutdown" ) >= 0;
++#endif
+ }
+
+ void
diff --git a/redhat/tdebase/kdebase-3.5.13.2-add_disable_composite_option.patch b/redhat/tdebase/kdebase-3.5.13.2-add_disable_composite_option.patch
new file mode 100644
index 000000000..4dc2e72f1
--- /dev/null
+++ b/redhat/tdebase/kdebase-3.5.13.2-add_disable_composite_option.patch
@@ -0,0 +1,81 @@
+--- kdebase/kdesktop/bgmanager.cc.ORI 2012-09-06 17:20:49.564915154 -0400
++++ kdebase/kdesktop/bgmanager.cc 2012-09-06 17:21:01.969682348 -0400
+@@ -1013,13 +1013,13 @@
+ slotChangeDesktop(0);
+ }
+
+-#ifdef COMPOSITE
+ void KBackgroundManager::slotCmBackgroundChanged( bool )
+ {
++#ifdef COMPOSITE
+ m_tPixmap->fill(TQColor(0, 0x0));
+ m_Hash = 0;
+ slotChangeDesktop(0);
+-}
+ #endif
++}
+
+ #include "bgmanager.moc"
+--- kdebase/kdesktop/main.cc.ORI 2012-09-07 20:33:09.716283507 +0200
++++ kdebase/kdesktop/main.cc 2012-09-07 20:33:31.683842727 +0200
+@@ -43,7 +43,7 @@
+ #include <fcntl.h>
+ #include <stdlib.h>
+
+-#if defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
++#if defined(WITH_COMPOSITE) && defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
+ #define COMPOSITE
+ #endif
+
+--- kdebase/kdesktop/bgmanager.h.ORI 2012-09-07 20:36:28.196299160 +0200
++++ kdebase/kdesktop/bgmanager.h 2012-09-07 20:36:52.420812591 +0200
+@@ -15,7 +15,7 @@
+
+ #include <KBackgroundIface.h>
+
+-#if defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
++#if defined(WITH_COMPOSITE) && defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
+ #define COMPOSITE
+ #endif
+
+--- kdebase/kdesktop/kdesktopapp.h.ORI 2012-09-07 20:37:14.677365503 +0200
++++ kdebase/kdesktop/kdesktopapp.h 2012-09-07 20:37:25.194154223 +0200
+@@ -23,7 +23,7 @@
+ #include <config.h>
+ #include <kuniqueapplication.h>
+
+-#if defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
++#if defined(WITH_COMPOSITE) && defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
+ #define COMPOSITE
+ #endif
+
+--- kdebase/konsole/konsole/main.cpp.ORI 2012-09-07 20:37:37.749901966 +0200
++++ kdebase/konsole/konsole/main.cpp 2012-09-07 20:37:46.683722469 +0200
+@@ -46,7 +46,7 @@
+
+ #include "konsole.h"
+
+-#if defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
++#if defined(WITH_COMPOSITE) && defined(Q_WS_X11) && defined(HAVE_XRENDER) && QT_VERSION >= 0x030300
+ #define COMPOSITE
+ #endif
+
+--- trinity-tdebase-3.5.13.2/CMakeLists.txt.composite 2013-06-16 21:49:33.742313671 +0200
++++ trinity-tdebase-3.5.13.2/CMakeLists.txt 2013-06-16 21:49:40.485177448 +0200
+@@ -82,6 +82,7 @@
+ option( WITH_I8K "Enable Dell laptop support (ksysguard)" ${WITH_ALL_OPTIONS} )
+ option( WITH_HAL "Enable HAL support" ${WITH_ALL_OPTIONS} )
+ option( WITH_KDESKTOP_LOCK_BACKTRACE "Enable backtrace in kdesktop_lock exception handler" ${WITH_ALL_OPTIONS} )
++option( WITH_COMPOSITE "Enable COMPOSITE support" OFF )
+
+
+ ##### user requested modules ####################
+--- trinity-tdebase-3.5.13.2/config.h.cmake.composite 2013-06-16 21:50:04.626689570 +0200
++++ trinity-tdebase-3.5.13.2/config.h.cmake 2013-06-16 21:50:13.094518380 +0200
+@@ -188,3 +188,6 @@
+ // Kickoff menu
+ #cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT1 "@KICKOFF_DIST_CONFIG_SHORTCUT1@"
+ #cmakedefine KICKOFF_DIST_CONFIG_SHORTCUT2 "@KICKOFF_DIST_CONFIG_SHORTCUT2@"
++
++// kdesktop, konsole
++#cmakedefine WITH_COMPOSITE "@WITH_COMPOSITE@"
diff --git a/redhat/tdebase/kdebase-3.5.13.2-build_without_dbustqt.patch b/redhat/tdebase/kdebase-3.5.13.2-build_without_dbustqt.patch
new file mode 100644
index 000000000..bb4b42b0e
--- /dev/null
+++ b/redhat/tdebase/kdebase-3.5.13.2-build_without_dbustqt.patch
@@ -0,0 +1,139 @@
+--- kdebase/kdm/backend/CMakeLists.txt.ORI 2012-09-06 22:11:08.422091268 +0200
++++ kdebase/kdm/backend/CMakeLists.txt 2012-09-06 22:11:21.280843938 +0200
+@@ -14,11 +14,11 @@
+ include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_BINARY_DIR}
+- ${DBUS_TQT_INCLUDE_DIRS}
++ ${DBUS_INCLUDE_DIRS}
+ )
+
+ link_directories(
+- ${DBUS_TQT_LIBRARY_DIRS}
++ ${DBUS_LIBRARY_DIRS}
+ )
+
+ ##### kdm (executable) ##########################
+@@ -43,6 +43,6 @@
+ process.c protodpy.c reset.c resource.c rpcauth.c
+ server.c session.c sessreg.c socket.c streams.c
+ util.c xdmauth.c xdmcp.c
+- LINK X11 ${XAU_LIBRARIES} ${DBUS_TQT_LIBRARIES} ${CRYPT_LIBRARY} ${PAM_LIBRARY} ${XDMCP_LIBRARIES}
++ LINK X11 ${XAU_LIBRARIES} ${DBUS_LIBRARIES} ${CRYPT_LIBRARY} ${PAM_LIBRARY} ${XDMCP_LIBRARIES}
+ DESTINATION ${BIN_INSTALL_DIR}
+ )
+--- kdebase/ksmserver/CMakeLists.txt.ORI 2012-09-06 17:22:59.990317001 -0400
++++ kdebase/ksmserver/CMakeLists.txt 2012-09-06 17:23:16.340989494 -0400
+@@ -19,13 +19,13 @@
+ ${CMAKE_SOURCE_DIR}/kdmlib
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+- ${DBUS_TQT_INCLUDE_DIRS}
++ ${DBUS_INCLUDE_DIRS}
+ ${HAL_INCLUDE_DIRS}
+ )
+
+ link_directories(
+ ${TQT_LIBRARY_DIRS}
+- ${DBUS_TQT_LIBRARY_DIRS}
++ ${DBUS_LIBRARY_DIRS}
+ )
+
+
+@@ -43,5 +43,5 @@
+ main.cpp server.cpp shutdowndlg.cpp startupdlg.cpp
+ legacy.cpp startup.cpp shutdown.cpp client.cpp
+ KSMServerInterface.skel server.skel timed.ui
+- LINK dmctl-static kdeui-shared krsync-shared ${HAL_LIBRARIES} ${DBUS_TQT_LIBRARIES}
++ LINK dmctl-static kdeui-shared krsync-shared ${HAL_LIBRARIES} ${DBUS_LIBRARIES}
+ )
+--- kdebase/kioslave/media/mediamanager/CMakeLists.txt.ORI 2012-09-07 23:57:56.858227336 +0200
++++ kdebase/kioslave/media/mediamanager/CMakeLists.txt 2012-09-07 23:58:54.948097583 +0200
+@@ -20,12 +20,12 @@
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+ ${HAL_INCLUDE_DIRS}
+- ${DBUS_TQT_INCLUDE_DIRS}
++ ${DBUS_INCLUDE_DIRS}
+ )
+
+ link_directories(
+ ${TQT_LIBRARY_DIRS}
+- ${DBUS_TQT_LIBRARY_DIRS}
++ ${DBUS_LIBRARY_DIRS}
+ )
+
+
+@@ -48,7 +48,7 @@
+
+ tde_add_kpart( ${target} AUTOMOC
+ SOURCES ${${target}_SRCS}
+- LINK mediacommon-static kdeinit_kded-shared ${HAL_LIBRARIES} -lhal-storage ${DBUS_TQT_LIBRARIES}
++ LINK mediacommon-static kdeinit_kded-shared ${HAL_LIBRARIES} -lhal-storage ${DBUS_LIBRARIES} -ldbus-qt-1
+ DESTINATION ${PLUGIN_INSTALL_DIR}
+ )
+ else( )
+--- trinity-tdebase-3.5.13.2/ConfigureChecks.cmake.ORI 2013-01-23 23:11:55.903373346 +0100
++++ trinity-tdebase-3.5.13.2/ConfigureChecks.cmake 2013-01-23 23:12:23.168860363 +0100
+@@ -256,21 +256,3 @@
+ endif( )
+
+
+-# dbus-tqt (kdm, ksmserver, kioslaves(media))
+-if( BUILD_KDM OR BUILD_KSMSERVER OR (BUILD_KIOSLAVES AND WITH_HAL) )
+- # check for dbus-tqt
+- pkg_check_modules( DBUS_TQT REQUIRED dbus-tqt )
+- tde_save( CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_LIBRARIES )
+- set( CMAKE_REQUIRED_INCLUDES ${DBUS_TQT_INCLUDE_DIRS} ${TQT_INCLUDE_DIRS} ${QT_INCLUDE_DIRS})
+- set( CMAKE_REQUIRED_LIBRARIES ${DBUS_TQT_LDFLAGS} ${TQT_LDFLAGS} ${QT_LDFLAGS} )
+- check_cxx_source_compiles("
+- #include <tqt.h>
+- #include <dbus/connection.h>
+- int main(int, char**) { return 0; } "
+- HAVE_DBUS_QT3_07 )
+- tde_restore( CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_LIBRARIES )
+- if( NOT HAVE_DBUS_QT3_07 )
+- tde_message_fatal( "dbus-tqt is required, but was not found on your system" )
+- endif( )
+-
+-endif( )
+--- trinity-tdebase-3.5.13.2/kicker/kicker/ui/CMakeLists.txt.ORI 2013-06-16 22:01:14.879046232 +0200
++++ trinity-tdebase-3.5.13.2/kicker/kicker/ui/CMakeLists.txt 2013-06-16 22:01:32.316688895 +0200
+@@ -20,7 +20,7 @@
+ ${CMAKE_SOURCE_DIR}/kicker/kicker/buttons
+ ${CMAKE_SOURCE_DIR}/kdmlib
+ ${CMAKE_SOURCE_DIR}/libkonq
+- ${DBUS_TQT_INCLUDE_DIRS}
++ ${DBUS_INCLUDE_DIRS}
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+ )
+@@ -56,5 +56,5 @@
+ tde_add_library( ${target} STATIC_PIC AUTOMOC
+ SOURCES ${${target}_SRCS}
+ DEPENDENCIES kicker_core-static kickermain-static
+- LINK dmctl-static kickoffsearch_interfaces-shared ${DBUS_TQT_LIBRARIES} ${HAL_LIBRARIES}
++ LINK dmctl-static kickoffsearch_interfaces-shared ${DBUS_LIBRARIES} ${HAL_LIBRARIES}
+ )
+--- trinity-tdebase-3.5.13.2/kicker/kicker/core/CMakeLists.txt.ORI 2013-06-16 22:05:07.891261997 +0200
++++ trinity-tdebase-3.5.13.2/kicker/kicker/core/CMakeLists.txt 2013-06-16 22:05:17.673060725 +0200
+@@ -17,7 +17,7 @@
+ ${CMAKE_SOURCE_DIR}/kicker/libkicker
+ ${CMAKE_SOURCE_DIR}/kicker/kicker/ui
+ ${CMAKE_SOURCE_DIR}/kicker/kicker/buttons
+- ${DBUS_TQT_INCLUDE_DIRS}
++ ${DBUS_INCLUDE_DIRS}
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+ )
+--- trinity-tdebase-3.5.13.2/kicker/kicker/buttons/CMakeLists.txt.ORI 2013-06-16 22:09:44.143564983 +0200
++++ trinity-tdebase-3.5.13.2/kicker/kicker/buttons/CMakeLists.txt 2013-06-16 22:09:48.450475959 +0200
+@@ -17,7 +17,7 @@
+ ${CMAKE_SOURCE_DIR}/kicker/kicker/core
+ ${CMAKE_SOURCE_DIR}/kicker/kicker/ui
+ ${CMAKE_SOURCE_DIR}/libkonq
+- ${DBUS_TQT_INCLUDE_DIRS}
++ ${DBUS_INCLUDE_DIRS}
+ ${TDE_INCLUDE_DIR}
+ ${TQT_INCLUDE_DIRS}
+ )
diff --git a/redhat/tdebase/kdebase-3.5.13.2-set_kdm_minuid.patch b/redhat/tdebase/kdebase-3.5.13.2-set_kdm_minuid.patch
new file mode 100644
index 000000000..ca412df01
--- /dev/null
+++ b/redhat/tdebase/kdebase-3.5.13.2-set_kdm_minuid.patch
@@ -0,0 +1,39 @@
+--- trinity-tdebase-3.5.13.2/config.h.cmake.ORI 2013-02-11 13:57:40.955386048 +0100
++++ trinity-tdebase-3.5.13.2/config.h.cmake 2013-02-11 14:02:42.484413874 +0100
+@@ -159,6 +159,9 @@
+
+ #cmakedefine XDMCP 1
+
++#define TDM_DEFMINUID "@TDM_DEFMINUID@"
++#define TDM_DEFMAXUID "@TDM_DEFMAXUID@"
++
+
+ // ksmserver
+ #cmakedefine DBUS_SYSTEM_BUS "@DBUS_SYSTEM_BUS@"
+--- trinity-tdebase-3.5.13.2/kdm/kfrontend/genkdmconf.c.ORI 2013-02-11 14:03:11.290843286 +0100
++++ trinity-tdebase-3.5.13.2/kdm/kfrontend/genkdmconf.c 2013-02-11 14:05:21.309267838 +0100
+@@ -2761,6 +2761,10 @@
+ }
+ }
+ }
++#ifdef TDM_MINDEFUID
++ defminuid = TDM_MINDEFUID;
++ defmaxuid = TDM_MAXDEFUID;
++#else // TDM_MINDEFUID
+ #ifdef __linux__
+ if (!stat( "/etc/debian_version", &st )) { /* debian */
+ defminuid = "1000";
+@@ -2778,10 +2782,11 @@
+ defminuid = "500";
+ defmaxuid = "65000";
+ }
+-#else
++#else // __linux__
+ defminuid = "1000";
+ defmaxuid = "65000";
+-#endif
++#endif // __linux__
++#endif // TDM_MINDEFUID
+ for (i = 0; i < CONF_MAX_PRIO; i++)
+ for (cs = config; cs; cs = cs->next)
+ for (ce = cs->ents; ce; ce = ce->next)
diff --git a/redhat/tdebase/tdebase-3.5.13.2-bookmark_global_copy.patch b/redhat/tdebase/tdebase-3.5.13.2-bookmark_global_copy.patch
new file mode 100644
index 000000000..b9b0ec5fa
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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 <kio/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 ) {
++ KIO::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-3.5.13.2-displayconfig_translation.patch b/redhat/tdebase/tdebase-3.5.13.2-displayconfig_translation.patch
new file mode 100644
index 000000000..d2af92c3f
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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;KDE;X-KDE-settings-system;
+ Comment=Configure display
+ Comment[en_US]=Configure display
++Comment[fr]=Configuration de l'affichage
+ DocPath=kcontrol/displayconfig.html
+ Exec=kcmshell 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;KDE;X-KDE-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-3.5.13.2-fix_media_safelyremove.patch b/redhat/tdebase/tdebase-3.5.13.2-fix_media_safelyremove.patch
new file mode 100644
index 000000000..c3ca254c8
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-fix_media_safelyremove.patch
@@ -0,0 +1,10 @@
+diff -Naur kdebase-3.5.10/kioslave/media/services/media_safelyremove.desktop kdebase-3.5.10.yeni/kioslave/media/services/media_safelyremove.desktop
+--- kdebase-3.5.10/kioslave/media/services/media_safelyremove.desktop 2008-08-19 21:16:59.000000000 +0300
++++ kdebase-3.5.10.yeni/kioslave/media/services/media_safelyremove.desktop 2009-12-22 00:51:57.122282682 +0200
+@@ -71,5 +71,5 @@
+ Name[wa]=Ositer e såvrité
+ Name[zh_CN]=安全删除
+ Name[zh_TW]=安全的移除
+-Exec=kio_media_mounthelper -s %u
++Exec=kio_media_mounthelper -u %u
+
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kbackground_xml_selector.patch b/redhat/tdebase/tdebase-3.5.13.2-kbackground_xml_selector.patch
new file mode 100644
index 000000000..94016932e
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-kbackground_xml_selector.patch
@@ -0,0 +1,701 @@
+--- ./kcontrol/background/bgadvanced.cpp.ORI 2013-05-09 14:42:39.036269356 +0200
++++ ./kcontrol/background/bgadvanced.cpp 2013-05-09 14:43:12.485581123 +0200
+@@ -44,6 +44,7 @@
+ #include "bgadvanced.h"
+ #include "bgadvanced_ui.h"
+
++#include "KCrossBGRender.h"
+ #include <X11/Xlib.h>
+
+ /**** BGAdvancedDialog ****/
+@@ -63,7 +64,7 @@
+ }
+
+
+-BGAdvancedDialog::BGAdvancedDialog(KBackgroundRenderer *_r,
++BGAdvancedDialog::BGAdvancedDialog(KCrossBGRender *_r,
+ TQWidget *parent,
+ bool m_multidesktop)
+ : KDialogBase(parent, "BGAdvancedDialog",
+--- ./kcontrol/background/bgdialog.cpp.ORI 2013-05-09 14:46:43.556237673 +0200
++++ ./kcontrol/background/bgdialog.cpp 2013-05-09 14:47:33.054218951 +0200
+@@ -63,6 +63,7 @@
+ #include "bgwallpaper.h"
+ #include "bgadvanced.h"
+ #include "bgdialog.h"
++#include "KCrossBGRender.h"
+
+ #define NR_PREDEF_PATTERNS 6
+
+@@ -194,19 +195,19 @@
+ int eDesk = i>0 ? i-1 : 0;
+
+ // Setup the merged-screen renderer
+- KBackgroundRenderer * r = new KBackgroundRenderer(eDesk, 0, false, _config);
++ KCrossBGRender * r = new KCrossBGRender(eDesk, 0, false, _config);
+ m_renderer[i].insert( 0, r );
+ connect( r, TQT_SIGNAL(imageDone(int,int)), TQT_SLOT(slotPreviewDone(int,int)) );
+
+ // Setup the common-screen renderer
+- r = new KBackgroundRenderer(eDesk, 0, true, _config);
++ r = new KCrossBGRender(eDesk, 0, true, _config);
+ m_renderer[i].insert( 1, r );
+ connect( r, TQT_SIGNAL(imageDone(int,int)), TQT_SLOT(slotPreviewDone(int,int)) );
+
+ // Setup the remaining renderers for each screen
+ for (unsigned j=0; j < m_numScreens; ++j )
+ {
+- r = new KBackgroundRenderer(eDesk, j, true, _config);
++ r = new KCrossBGRender(eDesk, j, true, _config);
+ m_renderer[i].insert( j+2, r );
+ connect( r, TQT_SIGNAL(imageDone(int,int)), TQT_SLOT(slotPreviewDone(int,int)) );
+ }
+@@ -221,14 +222,14 @@
+ }
+
+ // set up the common desktop renderer
+- KBackgroundRenderer * r = new KBackgroundRenderer(0, 0, false, _config);
++ KCrossBGRender * r = new KCrossBGRender(0, 0, false, _config);
+ m_renderer[0].insert(0, r);
+ connect(r, TQT_SIGNAL(imageDone(int,int)), TQT_SLOT(slotPreviewDone(int,int)));
+
+ // set up all the other desktop renderers
+ for (unsigned i = 0; i < m_numDesks; ++i)
+ {
+- r = new KBackgroundRenderer(i, 0, false, _config);
++ r = new KCrossBGRender(i, 0, false, _config);
+ m_renderer[i+1].insert(0, r);
+ connect(r, TQT_SIGNAL(imageDone(int,int)), TQT_SLOT(slotPreviewDone(int,int)));
+ }
+@@ -266,7 +267,7 @@
+ delete m_pGlobals;
+ }
+
+-KBackgroundRenderer * BGDialog::eRenderer()
++KCrossBGRender * BGDialog::eRenderer()
+ {
+ return m_renderer[m_eDesk][m_eScreen];
+ }
+@@ -681,7 +682,7 @@
+
+ void BGDialog::updateUI()
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+ m_comboDesktop->setCurrentItem(m_eDesk);
+ m_comboScreen->setCurrentItem(m_eScreen);
+
+@@ -819,7 +820,7 @@
+ if (!m_previewUpdates)
+ return;
+
+- KBackgroundRenderer * r = m_renderer[m_eDesk][(m_eScreen>1) ? (screen_done+2) : m_eScreen];
++ KCrossBGRender * r = m_renderer[m_eDesk][(m_eScreen>1) ? (screen_done+2) : m_eScreen];
+
+ if (r->image().isNull())
+ return;
+@@ -858,7 +859,7 @@
+
+ void BGDialog::slotWallpaperTypeChanged(int i)
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+ r->stop();
+
+ // No picture
+@@ -984,7 +985,7 @@
+
+ void BGDialog::slotWallpaperPos(int mode)
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+
+ mode++;
+ m_wallpaperPos = mode;
+@@ -1002,7 +1003,7 @@
+
+ void BGDialog::slotSetupMulti()
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+
+ BGMultiWallpaperDialog dlg(r, topLevelWidget());
+ if (dlg.exec() == TQDialog::Accepted) {
+@@ -1018,7 +1019,7 @@
+
+ void BGDialog::slotPrimaryColor(const TQColor &color)
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+
+ if (color == r->colorA())
+ return;
+@@ -1033,7 +1034,7 @@
+
+ void BGDialog::slotSecondaryColor(const TQColor &color)
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+
+ if (color == r->colorB())
+ return;
+@@ -1048,7 +1049,7 @@
+
+ void BGDialog::slotPattern(int pattern)
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+ r->stop();
+ bool bSecondaryEnabled = true;
+ if (pattern < NR_PREDEF_PATTERNS)
+@@ -1085,7 +1086,7 @@
+ // Copy stuff
+ for (unsigned desk = 0; desk < m_numDesks+1; ++desk )
+ {
+- KBackgroundRenderer *master = m_renderer[desk][1];
++ KCrossBGRender *master = m_renderer[desk][1];
+ for (unsigned screen = 0; screen < m_numScreens; ++screen)
+ {
+ m_renderer[desk][screen+2]->copyConfig(master);
+@@ -1140,7 +1141,7 @@
+ // Copy stuff
+ for (unsigned screen = 0; screen < m_renderer[0].size(); ++screen )
+ {
+- KBackgroundRenderer *master = m_renderer[0][screen];
++ KCrossBGRender *master = m_renderer[0][screen];
+ for (unsigned desk = 0; desk < m_numDesks; ++desk )
+ {
+ m_renderer[desk+1][screen]->copyConfig(master);
+@@ -1179,7 +1180,7 @@
+
+ void BGDialog::slotAdvanced()
+ {
+- KBackgroundRenderer *r = eRenderer();
++ KCrossBGRender *r = eRenderer();
+
+ m_previewUpdates = false;
+ BGAdvancedDialog dlg(r, topLevelWidget(), m_multidesktop);
+@@ -1301,7 +1302,7 @@
+ {
+ for (unsigned j = 0; j < m_renderer[i].size(); ++j )
+ {
+- KBackgroundRenderer * r = m_renderer[i][j];
++ KCrossBGRender * r = m_renderer[i][j];
+ if( r->isActive())
+ r->stop();
+ r->desktopResized();
+--- ./kcontrol/background/bgadvanced.h.ori 2013-05-09 14:49:18.551047531 +0200
++++ ./kcontrol/background/bgadvanced.h 2013-05-09 14:49:23.509945456 +0200
+@@ -33,14 +33,14 @@
+ class TQSpinBox;
+
+ class BGAdvancedBase;
+-class KBackgroundRenderer;
++class KCrossBGRender;
+ class KBackgroundProgram;
+
+ class BGAdvancedDialog : public KDialogBase
+ {
+ Q_OBJECT
+ public:
+- BGAdvancedDialog(KBackgroundRenderer *_r, TQWidget *parent, bool m_multidesktop);
++ BGAdvancedDialog(KCrossBGRender *_r, TQWidget *parent, bool m_multidesktop);
+
+ void setCacheSize(int s);
+ int cacheSize();
+@@ -79,7 +79,7 @@
+ void slotEnableProgram(bool b);
+
+ private:
+- KBackgroundRenderer *r;
++ KCrossBGRender *r;
+
+ BGAdvancedBase *dlg;
+
+--- ./kcontrol/background/bgdialog.h.ORI 2013-05-09 14:49:59.223210319 +0200
++++ ./kcontrol/background/bgdialog.h 2013-05-09 14:50:40.215366483 +0200
+@@ -28,6 +28,7 @@
+ #include "bgrender.h"
+ #include "bgsettings.h"
+ #include "bgdefaults.h"
++#include "KCrossBGRender.h"
+
+ class BGMonitorArrangement;
+ class KStandardDirs;
+@@ -53,7 +54,7 @@
+ protected:
+ void initUI();
+ void updateUI();
+- KBackgroundRenderer * eRenderer();
++ KCrossBGRender * eRenderer();
+
+ void setWallpaper(const TQString &);
+
+@@ -95,7 +96,7 @@
+ int m_screen;
+ int m_eDesk;
+ int m_eScreen;
+- TQValueVector< TQPtrVector<KBackgroundRenderer> > m_renderer; // m_renderer[desk][screen]
++ TQValueVector< TQPtrVector<KCrossBGRender> > m_renderer; // m_renderer[desk][screen]
+ TQMap<TQString,int> m_wallpaper;
+ TQStringList m_patterns;
+ int m_slideShowRandom; // Remembers last Slide Show setting
+--- ./kcontrol/background/bgwallpaper.h.ORI 2013-05-09 14:51:55.150823830 +0200
++++ ./kcontrol/background/bgwallpaper.h 2013-05-09 14:52:37.513949453 +0200
+@@ -27,6 +27,7 @@
+ #include <tqstringlist.h>
+
+ #include <kdialogbase.h>
++#include <kdebug.h>
+
+ class BGMultiWallpaperBase;
+ class KBackgroundSettings;
+@@ -55,12 +56,16 @@
+ void slotMoveDown();
+ void slotOk();
+ void slotItemSelected( TQListBoxItem * );
++ void slotCheckScheduled(bool);
++ void slotChangedXML(const TQString&);
++
+ private:
+ void setEnabledMoveButtons();
+
+ KBackgroundSettings *m_pSettings;
+
+ BGMultiWallpaperBase *dlg;
++ TQString lastXml;
+ };
+
+ #endif
+--- ./kcontrol/background/bgwallpaper.cpp.ORI 2013-05-09 14:53:01.461452198 +0200
++++ ./kcontrol/background/bgwallpaper.cpp 2013-05-09 14:57:27.712924157 +0200
+@@ -26,12 +26,14 @@
+ #include <tqevent.h>
+ #include <tqpushbutton.h>
+ #include <tqspinbox.h>
++#include <tqgroupbox.h>
+
+ #include <kfiledialog.h>
+ #include <kimageio.h>
+ #include <klocale.h>
+ #include <kstandarddirs.h>
+ #include <kurldrag.h>
++#include <kurlrequester.h>
+
+ #include "bgsettings.h"
+ #include "bgwallpaper.h"
+@@ -119,10 +121,41 @@
+ connect(dlg->m_buttonMoveUp, TQT_SIGNAL(clicked()), TQT_SLOT(slotMoveUp()));
+ connect(dlg->m_buttonMoveDown, TQT_SIGNAL(clicked()), TQT_SLOT(slotMoveDown()));
+ connect(dlg->m_listImages, TQT_SIGNAL(clicked ( TQListBoxItem * )), TQT_SLOT(slotItemSelected( TQListBoxItem *)));
++ connect(dlg->chkScheduled, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotCheckScheduled(bool)));
++ connect(dlg->kurlXmlFile, TQT_SIGNAL(textChanged(const TQString&)), TQT_SLOT(slotChangedXML(const TQString &)));
++
+ dlg->m_buttonRemove->setEnabled( false );
+ dlg->m_buttonMoveUp->setEnabled( false );
+ dlg->m_buttonMoveDown->setEnabled( false );
+
++ // XML Stuffs
++ dlg->kurlXmlFile->setFilter("*.xml");
++ if (m_pSettings->wallpaperList()[0].endsWith("xml",false)) {
++ dlg->kurlXmlFile->setURL(m_pSettings->wallpaperList()[0]);
++ dlg->chkScheduled->setChecked(true);
++ dlg->m_listImages->removeItem(0);
++ lastXml = m_pSettings->wallpaperList()[0];
++ } else {
++ dlg->kurlXmlFile->setURL("/usr/share/mdk/backgrounds/Mandriva.xml");
++ dlg->chkScheduled->setChecked(false);
++ slotCheckScheduled(false);
++ }
++}
++
++void BGMultiWallpaperDialog::slotCheckScheduled(bool state)
++{
++ if ( state == true ) {
++ dlg->grpNormalShow->setEnabled(false);
++ dlg->kurlXmlFile->setEnabled(true);
++ } else {
++ dlg->grpNormalShow->setEnabled(true);
++ dlg->kurlXmlFile->setEnabled(false);
++ }
++}
++
++void BGMultiWallpaperDialog::slotChangedXML(const TQString & file)
++{
++ lastXml = file;
+ }
+
+ void BGMultiWallpaperDialog::slotItemSelected( TQListBoxItem * )
+@@ -222,15 +255,38 @@
+
+ void BGMultiWallpaperDialog::slotOk()
+ {
++ bool useXml = false;
++ // Looking to XML
++ if (dlg->chkScheduled->isChecked() && lastXml.endsWith("xml",false)) {
++ useXml = true;
++ kdDebug() << "Adding XML" << lastXml;
++ dlg->m_listImages->insertItem(lastXml,0);
++ }
++
++ kdDebug() << dlg->m_listImages << endl;
++
+ TQStringList lst;
+- for (unsigned i=0; i < dlg->m_listImages->count(); i++)
++ for (unsigned i=0; i < dlg->m_listImages->count(); i++) {
+- lst.append(dlg->m_listImages->text(i));
++ lst.append(dlg->m_listImages->text(i));
++ }
+ m_pSettings->setWallpaperList(lst);
+ m_pSettings->setWallpaperChangeInterval(dlg->m_spinInterval->value());
+- if (dlg->m_cbRandom->isChecked())
++ if (dlg->m_cbRandom->isChecked()) {
+ m_pSettings->setMultiWallpaperMode(KBackgroundSettings::Random);
+- else
++ } else {
+ m_pSettings->setMultiWallpaperMode(KBackgroundSettings::InOrder);
++ }
++
++ if(useXml) {
++ m_pSettings->changeWallpaper();
++ m_pSettings->setWallpaper(lastXml);
++ m_pSettings->changeWallpaper();
++ } else {
++ m_pSettings->changeWallpaper();
++ m_pSettings->setWallpaper(lst[0]);
++ m_pSettings->changeWallpaper();
++ }
++
+ accept();
+ }
+
+--- kdebase-3.5.9/kcontrol/background/bgwallpaper_ui.ui.kbg_trans 2008-03-17 11:06:49.000000000 -0300
++++ kdebase-3.5.9/kcontrol/background/bgwallpaper_ui.ui 2008-03-17 11:07:13.000000000 -0300
+@@ -1,4 +1,4 @@
+-<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+ <class>BGMultiWallpaperBase</class>
+ <widget class="TQWidget">
+ <property name="name">
+@@ -8,155 +8,209 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>410</width>
+- <height>196</height>
++ <width>499</width>
++ <height>526</height>
+ </rect>
+ </property>
+- <grid>
++ <property name="caption">
++ <string>BGMultiWallPaperBase</string>
++ </property>
++ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+- <widget class="TQLabel" row="2" column="0">
+- <property name="name">
+- <cstring>textLabel2</cstring>
+- </property>
+- <property name="text">
+- <string>Show the following pictures:</string>
+- </property>
+- </widget>
+- <widget class="TQCheckBox" row="1" column="0">
+- <property name="name">
+- <cstring>m_cbRandom</cstring>
+- </property>
+- <property name="text">
+- <string>&amp;Show pictures in random order</string>
+- </property>
+- </widget>
+- <widget class="TQLayoutWidget" row="0" column="0">
++ <widget class="TQLayoutWidget">
+ <property name="name">
+- <cstring>layout3</cstring>
++ <cstring>layout8</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+- <widget class="TQLabel">
++ <widget class="TQCheckBox">
+ <property name="name">
+- <cstring>textLabel1</cstring>
++ <cstring>chkScheduled</cstring>
+ </property>
+ <property name="text">
+- <string>Change &amp;picture after:</string>
+- </property>
+- <property name="buddy" stdset="0">
+- <cstring>m_spinInterval</cstring>
++ <string>Scheduled Slide Show</string>
+ </property>
+ </widget>
+- <widget class="TQSpinBox">
++ <widget class="KURLRequester">
+ <property name="name">
+- <cstring>m_spinInterval</cstring>
++ <cstring>kurlXmlFile</cstring>
+ </property>
+ </widget>
+- <spacer>
+- <property name="name">
+- <cstring>spacer4</cstring>
+- </property>
+- <property name="orientation">
+- <enum>Horizontal</enum>
+- </property>
+- <property name="sizeType">
+- <enum>Expanding</enum>
+- </property>
+- <property name="sizeHint">
+- <size>
+- <width>20</width>
+- <height>20</height>
+- </size>
+- </property>
+- </spacer>
+ </hbox>
+ </widget>
+- <widget class="TQLayoutWidget" row="3" column="0">
++ <widget class="QGroupBox">
+ <property name="name">
+- <cstring>layout4</cstring>
++ <cstring>grpNormalShow</cstring>
+ </property>
+- <grid>
++ <property name="title">
++ <string></string>
++ </property>
++ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+- <widget class="BGMultiWallpaperList" row="0" column="0" rowspan="5" colspan="1">
++ <widget class="TQLayoutWidget">
+ <property name="name">
+- <cstring>m_listImages</cstring>
+- </property>
+- <property name="sizePolicy">
+- <sizepolicy>
+- <hsizetype>3</hsizetype>
+- <vsizetype>3</vsizetype>
+- <horstretch>0</horstretch>
+- <verstretch>0</verstretch>
+- </sizepolicy>
+- </property>
+- <property name="minimumSize">
+- <size>
+- <width>300</width>
+- <height>100</height>
+- </size>
++ <cstring>layout3</cstring>
+ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="TQLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>Change &amp;picture after:</string>
++ </property>
++ <property name="buddy" stdset="0">
++ <cstring>m_spinInterval</cstring>
++ </property>
++ </widget>
++ <widget class="TQSpinBox">
++ <property name="name">
++ <cstring>m_spinInterval</cstring>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer4</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
+ </widget>
+- <widget class="TQPushButton" row="0" column="1">
++ <widget class="TQCheckBox">
+ <property name="name">
+- <cstring>m_buttonAdd</cstring>
++ <cstring>m_cbRandom</cstring>
+ </property>
+ <property name="text">
+- <string>&amp;Add...</string>
+- </property>
+- </widget>
+- <spacer row="4" column="1">
+- <property name="name">
+- <cstring>spacer5</cstring>
+- </property>
+- <property name="orientation">
+- <enum>Vertical</enum>
+- </property>
+- <property name="sizeType">
+- <enum>Expanding</enum>
++ <string>&amp;Show pictures in random order</string>
+ </property>
+- <property name="sizeHint">
+- <size>
+- <width>20</width>
+- <height>20</height>
+- </size>
+- </property>
+- </spacer>
+- <widget class="TQPushButton" row="1" column="1">
+- <property name="name">
+- <cstring>m_buttonRemove</cstring>
+- </property>
+- <property name="text">
+- <string>&amp;Remove</string>
++ <property name="accel">
++ <string>Alt+S</string>
+ </property>
+ </widget>
+- <widget class="TQPushButton" row="3" column="1">
++ <widget class="TQLabel">
+ <property name="name">
+- <cstring>m_buttonMoveDown</cstring>
++ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+- <string>Move &amp;Down</string>
++ <string>Show the following pictures:</string>
+ </property>
+ </widget>
+- <widget class="TQPushButton" row="2" column="1">
++ <widget class="TQLayoutWidget">
+ <property name="name">
+- <cstring>m_buttonMoveUp</cstring>
+- </property>
+- <property name="text">
+- <string>Move &amp;Up</string>
++ <cstring>layout4</cstring>
+ </property>
++ <grid>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="BGMultiWallpaperList" row="0" column="0" rowspan="5" colspan="1">
++ <property name="name">
++ <cstring>m_listImages</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>3</hsizetype>
++ <vsizetype>3</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="minimumSize">
++ <size>
++ <width>300</width>
++ <height>100</height>
++ </size>
++ </property>
++ </widget>
++ <widget class="TQPushButton" row="0" column="1">
++ <property name="name">
++ <cstring>m_buttonAdd</cstring>
++ </property>
++ <property name="text">
++ <string>&amp;Add...</string>
++ </property>
++ <property name="accel">
++ <string>Alt+A</string>
++ </property>
++ </widget>
++ <spacer row="4" column="1">
++ <property name="name">
++ <cstring>spacer5</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Vertical</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>20</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="TQPushButton" row="1" column="1">
++ <property name="name">
++ <cstring>m_buttonRemove</cstring>
++ </property>
++ <property name="text">
++ <string>&amp;Remove</string>
++ </property>
++ <property name="accel">
++ <string>Alt+R</string>
++ </property>
++ </widget>
++ <widget class="TQPushButton" row="3" column="1">
++ <property name="name">
++ <cstring>m_buttonMoveDown</cstring>
++ </property>
++ <property name="text">
++ <string>Move &amp;Down</string>
++ </property>
++ <property name="accel">
++ <string>Alt+D</string>
++ </property>
++ </widget>
++ <widget class="TQPushButton" row="2" column="1">
++ <property name="name">
++ <cstring>m_buttonMoveUp</cstring>
++ </property>
++ <property name="text">
++ <string>Move &amp;Up</string>
++ </property>
++ <property name="accel">
++ <string>Alt+U</string>
++ </property>
++ </widget>
++ </grid>
+ </widget>
+- </grid>
++ </vbox>
+ </widget>
+- </grid>
++ </vbox>
+ </widget>
+ <includes>
+ <include location="local" impldecl="in declaration">bgwallpaper.h</include>
+@@ -164,4 +218,9 @@
+ </includes>
+ <layoutdefaults spacing="3" margin="6"/>
+ <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
++<includehints>
++ <includehint>kurlrequester.h</includehint>
++ <includehint>klineedit.h</includehint>
++ <includehint>kpushbutton.h</includehint>
++</includehints>
+ </UI>
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kcontrol_menu_entry.patch b/redhat/tdebase/tdebase-3.5.13.2-kcontrol_menu_entry.patch
new file mode 100644
index 000000000..cdef8e5a7
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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-3.5.13.2-kdesktop_crossfade.patch b/redhat/tdebase/tdebase-3.5.13.2-kdesktop_crossfade.patch
new file mode 100644
index 000000000..3b4e86819
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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 <jansen@kde.org>
++ *
++ * 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 <danilo@mandriva.com>
++ * Copyright (C) 2008 Gustavo Boiko <boiko@mandriva.com>
++ * 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 <danilo@mandriva.com>
++ * Copyright (C) 2008 Gustavo Boiko <boiko@mandriva.com>
++ * 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-3.5.13.2-kdesu-noignorebutton.patch b/redhat/tdebase/tdebase-3.5.13.2-kdesu-noignorebutton.patch
new file mode 100644
index 000000000..41b081edc
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-kdesu-noignorebutton.patch
@@ -0,0 +1,26 @@
+--- trinity-tdebase-3.5.13.2~pre102+43d29f86/kdesu/kdesu/sudlg.cpp.kdesu_no_ignore 2013-05-16 22:59:53.633425236 +0200
++++ trinity-tdebase-3.5.13.2~pre102+43d29f86/kdesu/kdesu/sudlg.cpp 2013-05-16 23:00:04.685200151 +0200
+@@ -15,7 +15,7 @@
+ #include "sudlg.h"
+
+ KDEsuDialog::KDEsuDialog(TQCString user, TQCString auth_user, bool enableKeep,const TQString& icon, bool withIgnoreButton, int timeout)
+- : KPasswordDialog(Password, enableKeep, (withIgnoreButton ? User1:NoDefault), icon)
++ : KPasswordDialog(Password, enableKeep, 0, icon)
+ {
+ KConfig* config = KGlobal::config();
+ config->setGroup("super-user-command");
+@@ -34,12 +34,10 @@
+ } else {
+ if (m_User == "root") {
+ prompt = i18n("The action you requested needs root privileges. "
+- "Please enter root's password below or click "
+- "Ignore to continue with your current privileges.");
++ "Please enter root's password below.");
+ } else {
+ prompt = i18n("The action you requested needs additional privileges. "
+- "Please enter the password for \"%1\" below or click "
+- "Ignore to continue with your current privileges.").arg(static_cast<const char *>(m_User));
++ "Please enter the password for \"%1\" below.").arg(static_cast<const char *>(m_User));
+ }
+ }
+ setPrompt(prompt);
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kdm_theme_selector.patch b/redhat/tdebase/tdebase-3.5.13.2-kdm_theme_selector.patch
new file mode 100644
index 000000000..39f6f49a3
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-kdm_theme_selector.patch
@@ -0,0 +1,229 @@
+--- trinity-tdebase-3.5.13.2~pre86+807a5445/kcontrol/kdm/kdm-appear.h.kdm_theme_selector 2013-01-09 02:12:13.000000000 +0100
++++ trinity-tdebase-3.5.13.2~pre86+807a5445/kcontrol/kdm/kdm-appear.h 2013-05-09 12:58:14.535347383 +0200
+@@ -26,6 +26,7 @@
+ #include <tqimage.h>
+ #include <tqfileinfo.h>
+ #include <tqpushbutton.h>
++#include <tqgroupbox.h>
+
+ #include <kcolorbutton.h>
+ #include <kurl.h>
+@@ -57,6 +58,7 @@
+
+ void loadColorSchemes(KBackedComboBox *combo);
+ void loadGuiStyles(KBackedComboBox *combo);
++ void loadThemes(KBackedComboBox *combo);
+ void loadLanguageList(KLanguageButton *combo);
+
+ bool eventFilter(TQObject *, TQEvent *);
+@@ -72,6 +74,7 @@
+ private slots:
+ void slotAreaRadioClicked(int id);
+ void slotLogoButtonClicked();
++ void slotUsethemeChanged(bool state);
+ void changed();
+
+ private:
+@@ -85,14 +88,19 @@
+ TQRadioButton *logoRadio;
+ TQLineEdit *xLineEdit;
+ TQLineEdit *yLineEdit;
++ TQCheckBox * themecheck;
+ KBackedComboBox *compositorcombo;
+ KBackedComboBox *guicombo;
++ KBackedComboBox *themecombo;
+ KBackedComboBox *colcombo;
+ KBackedComboBox *echocombo;
++ TQLabel * themeimagelabel;
+ KLanguageButton *langcombo;
+ TQCheckBox *sakbox;
+ TQLabel *sakwarning;
+
++ //TQHBoxLayout * themehlay;
++ TQGroupBox *themegroup;
+ };
+
+ #endif
+--- trinity-tdebase-3.5.13.2~pre86+807a5445/kcontrol/kdm/kdm-appear.cpp.kdm_theme_selector 2013-01-09 02:12:13.000000000 +0100
++++ trinity-tdebase-3.5.13.2~pre86+807a5445/kcontrol/kdm/kdm-appear.cpp 2013-05-09 13:00:34.428413714 +0200
+@@ -28,6 +28,7 @@
+ #include <tqbuttongroup.h>
+ #include <tqlabel.h>
+ #include <tqlayout.h>
++#include <tqcheckbox.h>
+ #include <tqradiobutton.h>
+ #include <tqwhatsthis.h>
+ #include <tqvalidator.h>
+@@ -35,6 +36,7 @@
+ #include <tqcheckbox.h>
+ #include <tqstyle.h>
+
++#include <kdesktopfile.h>
+ #include <klocale.h>
+ #include <klineedit.h>
+ #include <kimageio.h>
+@@ -62,10 +64,43 @@
+
+ TQVBoxLayout *vbox = new TQVBoxLayout(this, KDialog::marginHint(),
+ KDialog::spacingHint(), "vbox");
+- TQGroupBox *group = new TQGroupBox(i18n("Appearance"), this);
++
++ // ThemeBox Starts here
++
++ themecheck = new TQCheckBox( i18n("Use Theme"), this );
++ vbox->addWidget(themecheck);
++ connect(themecheck, TQT_SIGNAL(toggled(bool)), TQT_SLOT(changed()));
++ connect(themecheck, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotUsethemeChanged(bool)));
++
++ themegroup = new TQGroupBox(0, Vertical, i18n("Theme"), this);
++ vbox->addWidget(themegroup);
++
++ TQGridLayout * grid = new TQGridLayout( themegroup->layout(), 4, 3, KDialog::spacingHint() );
++
++ grid->setColStretch(1, 1);
++ grid->setColStretch(2, 1);
++
++ themecombo = new KBackedComboBox(themegroup);
++ loadThemes(themecombo);
++
++ TQLabel * label1 = new TQLabel(themecombo, i18n("KDM Theme:"),themegroup);
++ grid->addWidget(label1,1,0);
++ grid->addWidget(themecombo,1,1);
++ connect(themecombo, TQT_SIGNAL(activated(int)), TQT_SLOT(changed()));
++ connect(themecombo, TQT_SIGNAL(activated(int)), TQT_SLOT(slotThemeChanged(int)));
++
++ themeimagelabel = new TQLabel(themecombo,"",themegroup);
++
++ grid->addMultiCellWidget(themeimagelabel,1,3,2,2,TQt::AlignRight);
++
++ vbox->addStretch(1);
++ // ENDS HERE
++
++ TQGroupBox * group = new TQGroupBox(i18n("Appearance"), this);
++
+ vbox->addWidget(group);
+
+- TQGridLayout *grid = new TQGridLayout( group, 5, 2, KDialog::marginHint(),
++ grid = new TQGridLayout( group, 5, 2, KDialog::marginHint(),
+ KDialog::spacingHint(), "grid");
+ grid->addRowSpacing(0, group->fontMetrics().height());
+ grid->setColStretch(0, 1);
+@@ -267,10 +302,25 @@
+
+ }
+
++
++void KDMAppearanceWidget::slotUsethemeChanged(bool state)
++{
++ //themehlay->setEnabled(state);
++ //themecombo->setEnabled(state);
++ //themeimagelabel->setEnabled(state);
++ themegroup->setEnabled(state);
++}
++
++
+ void KDMAppearanceWidget::makeReadOnly()
+ {
+ disconnect( logobutton, TQT_SIGNAL(clicked()),
+ this, TQT_SLOT(slotLogoButtonClicked()) );
++
++ themecheck->setEnabled(false);
++ //themegroup->setEnabled(false);
++ themecombo->setEnabled(false);
++ themeimagelabel->setEnabled(false);
+ logobutton->setAcceptDrops(false);
+ greetstr_lined->setReadOnly(true);
+ noneRadio->setEnabled(false);
+@@ -352,6 +402,40 @@
+ }
+ }
+
++void KDMAppearanceWidget::loadThemes(KBackedComboBox *combo)
++{
++ // Gets current Theme in kdmrc
++ TQString current;
++ config->setGroup("X-*-Greeter");
++ TQFileInfo Theme = config->readEntry("Theme");
++ if(Theme.exists()) {
++ current = Theme.fileName();
++ }
++
++ // List directories under "themes" directory
++ TQDir d(locate("data", TQString::fromLatin1("kdm/themes/")), "", TQDir::Name, TQDir::Dirs|TQDir::NoSymLinks|TQDir::Readable|TQDir::Executable);
++ TQStringList list = d.entryList();
++
++ combo->clear();
++ for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
++ TQString name = (*it);
++
++ if(name == "." || name == ".." ) {
++ continue;
++ }
++
++ if (name.isEmpty()) {
++ name = "default";
++ }
++
++ combo->insertItem( *it, name);
++
++ if (name == current) {
++ combo->setCurrentItem(combo->count()-1);
++ }
++ }
++}
++
+ bool KDMAppearanceWidget::setLogo(TQString logo)
+ {
+ TQString flogo = logo.isEmpty() ?
+@@ -468,6 +552,10 @@
+
+ config->writeEntry("GUIStyle", guicombo->currentId());
+
++ TQString Theme = locate("data", TQString::fromLatin1("kdm/themes/"));
++ Theme.append(themecombo->currentId());
++ config->writeEntry("Theme", Theme);
++
+ config->writeEntry("ColorScheme", colcombo->currentId());
+
+ config->writeEntry("EchoMode", echocombo->currentId());
+@@ -476,6 +564,8 @@
+
+ config->writeEntry("Language", langcombo->current());
+
++ config->writeEntry("UseTheme", themecheck->isChecked());
++
+ if (!sakwarning) {
+ config->writeEntry("UseSAK", sakbox->isChecked());
+ }
+@@ -523,6 +613,8 @@
+ // Check the current compositor type
+ compositorcombo->setCurrentId(config->readEntry("Compositor"));
+
++ loadThemes(themecombo);
++
+ // Check the GUI type
+ guicombo->setCurrentId(config->readEntry("GUIStyle"));
+
+@@ -544,6 +636,9 @@
+ // get the language
+ langcombo->setCurrentItem(config->readEntry("Language", "C"));
+
++ themecheck->setChecked(config->readBoolEntry("UseTheme",true));
++ slotUsethemeChanged(config->readBoolEntry("UseTheme",true));
++
+ // See if the SAK is enabled
+ if (!sakwarning) {
+ sakbox->setChecked(config->readBoolEntry("UseSAK", true));
+@@ -556,10 +651,12 @@
+
+ void KDMAppearanceWidget::defaults()
+ {
++ themecheck->setChecked(true);
+ greetstr_lined->setText( i18n("Welcome to %n") );
+ logoRadio->setChecked( true );
+ slotAreaRadioClicked( KdmLogo );
+ setLogo( "" );
++ themecombo->setCurrentId("");
+ compositorcombo->setCurrentId( "" );
+ guicombo->setCurrentId( "" );
+ colcombo->setCurrentId( "" );
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kdm_utf8_password.patch b/redhat/tdebase/tdebase-3.5.13.2-kdm_utf8_password.patch
new file mode 100644
index 000000000..9ba4bdd05
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-kdm_utf8_password.patch
@@ -0,0 +1,297 @@
+--- ./kdmlib/kgreet_classic.cpp.ORI 2013-05-09 17:43:03.148552793 +0200
++++ ./kdmlib/kgreet_classic.cpp 2013-05-09 17:51:09.129324589 +0200
+@@ -26,21 +26,30 @@
+ #include "themer/kdmthemer.h"
+ #include "themer/kdmitem.h"
+
++#include <kglobal.h>
+ #include <klocale.h>
+ #include <klineedit.h>
+-#include <kpassdlg.h>
+ #include <kuser.h>
+
+ #include <tqregexp.h>
+ #include <tqlayout.h>
+ #include <tqlabel.h>
+
+-class KDMPasswordEdit : public KPasswordEdit {
++class KDMPasswordEdit : public KLineEdit {
+ public:
+- KDMPasswordEdit( TQWidget *parent ) : KPasswordEdit( parent, 0 ) {}
+- KDMPasswordEdit( KPasswordEdit::EchoModes echoMode, TQWidget *parent ) : KPasswordEdit( echoMode, parent, 0 ) {}
++ KDMPasswordEdit( TQWidget *parent ) : KLineEdit( parent )
++ {
++ setEchoMode(TQLineEdit::Password);
++ }
++
++ KDMPasswordEdit( TQLineEdit::EchoMode echoMode, TQWidget *parent ) : KLineEdit( parent )
++ {
++ setEchoMode(echoMode);
++ }
++
++
+ protected:
+- virtual void contextMenuEvent( TQContextMenuEvent * ) {}
++ virtual void contextMenuEvent( TQContextMenuEvent * ) {}
+ };
+
+ static int echoMode;
+@@ -104,11 +113,11 @@
+ grid->addWidget( loginLabel, line, 0 );
+ grid->addWidget( new TQLabel( fixedUser, parent ), line++, 1 );
+ }
+- if (echoMode == -1)
++ if (echoMode == -1) {
+ passwdEdit = new KDMPasswordEdit( parent );
+- else
+- passwdEdit = new KDMPasswordEdit( (KPasswordEdit::EchoModes)echoMode,
+- parent );
++ } else {
++ passwdEdit = new KDMPasswordEdit( (TQLineEdit::EchoMode)echoMode, parent );
++ }
+ connect( passwdEdit, TQT_SIGNAL(textChanged( const TQString & )),
+ TQT_SLOT(slotActivity()) );
+ connect( passwdEdit, TQT_SIGNAL(lostFocus()), TQT_SLOT(slotActivity()) );
+@@ -135,8 +144,8 @@
+ }
+ if (func != Authenticate) {
+ if (echoMode == -1) {
+- passwd1Edit = new KDMPasswordEdit( (KPasswordEdit::EchoModes)echoMode, parent );
+- passwd2Edit = new KDMPasswordEdit( (KPasswordEdit::EchoModes)echoMode, parent );
++ passwd1Edit = new KDMPasswordEdit( (TQLineEdit::EchoMode)echoMode, parent );
++ passwd2Edit = new KDMPasswordEdit( (TQLineEdit::EchoMode)echoMode, parent );
+ } else {
+ passwd1Edit = new KDMPasswordEdit( parent );
+ passwd2Edit = new KDMPasswordEdit( parent );
+@@ -247,16 +256,16 @@
+ KGreeterPluginHandler::IsUser );
+ break;
+ case 1:
+- handler->gplugReturnText( passwdEdit->password(),
++ handler->gplugReturnText( passwdEdit->text().utf8(),
+ KGreeterPluginHandler::IsPassword |
+ KGreeterPluginHandler::IsSecret );
+ break;
+ case 2:
+- handler->gplugReturnText( passwd1Edit->password(),
++ handler->gplugReturnText( passwd1Edit->text().utf8(),
+ KGreeterPluginHandler::IsSecret );
+ break;
+ default: // case 3:
+- handler->gplugReturnText( passwd2Edit->password(),
++ handler->gplugReturnText( passwd2Edit->text().utf8(),
+ KGreeterPluginHandler::IsNewPassword |
+ KGreeterPluginHandler::IsSecret );
+ break;
+@@ -405,11 +414,11 @@
+ // assert( !running );
+ setActive2( true );
+ if (authTok) {
+- passwd1Edit->erase();
+- passwd2Edit->erase();
++ passwd1Edit->clear();
++ passwd2Edit->clear();
+ passwd1Edit->setFocus();
+ } else {
+- passwdEdit->erase();
++ passwdEdit->clear();
+ if (loginEdit && loginEdit->isEnabled())
+ passwdEdit->setEnabled( true );
+ else {
+@@ -426,7 +435,7 @@
+ KClassicGreeter::clear()
+ {
+ // assert( !running && !passwd1Edit );
+- passwdEdit->erase();
++ passwdEdit->clear();
+ if (loginEdit) {
+ loginEdit->clear();
+ loginEdit->setFocus();
+@@ -484,9 +493,24 @@
+ TQVariant (*getConf)( void *, const char *, const TQVariant & ),
+ void *ctx )
+ {
+- echoMode = getConf( ctx, "EchoMode", TQVariant( -1 ) ).toInt();
+- KGlobal::locale()->insertCatalogue( "kgreet_classic" );
+- return true;
++ echoMode = getConf( ctx, "EchoMode", TQVariant( -1 ) ).toInt();
++ switch (echoMode)
++ {
++ case (0):
++ case (1):
++ echoMode = TQLineEdit::Password;
++ break;
++
++ case (2):
++ echoMode = TQLineEdit::NoEcho;
++ break;
++
++ default:
++ echoMode = TQLineEdit::Password;
++ }
++
++ KGlobal::locale()->insertCatalogue( "kgreet_classic" );
++ return true;
+ }
+
+ static void done( void )
+--- ./kdmlib/kgreet_classic.h.ORI 2013-05-09 17:53:03.266961035 +0200
++++ ./kdmlib/kgreet_classic.h 2013-05-09 17:53:49.235008948 +0200
+@@ -31,7 +31,6 @@
+ #include <tqobject.h>
+
+ class KLineEdit;
+-class KPasswordEdit;
+ class KSimpleConfig;
+ class TQGridLayout;
+ class TQLabel;
+@@ -76,7 +75,7 @@
+
+ TQLabel *loginLabel, *passwdLabel, *passwd1Label, *passwd2Label;
+ KLineEdit *loginEdit;
+- KPasswordEdit *passwdEdit, *passwd1Edit, *passwd2Edit;
++ KLineEdit *passwdEdit, *passwd1Edit, *passwd2Edit;
+ KSimpleConfig *stsFile;
+ TQString fixedUser, curUser;
+ Function func;
+--- ./kdmlib/kgreet_winbind.cpp.ORI 2013-05-09 17:54:36.906021481 +0200
++++ ./kdmlib/kgreet_winbind.cpp 2013-05-09 18:00:23.089847329 +0200
+@@ -26,11 +26,11 @@
+ #include "themer/kdmthemer.h"
+ #include "themer/kdmitem.h"
+
++#include <kglobal.h>
+ #include <klocale.h>
+ #include <kdebug.h>
+ #include <kcombobox.h>
+ #include <klineedit.h>
+-#include <kpassdlg.h>
+ #include <kuser.h>
+ #include <kprocio.h>
+
+@@ -40,10 +40,17 @@
+
+ #include <stdlib.h>
+
+-class KDMPasswordEdit : public KPasswordEdit {
++class KDMPasswordEdit : public KLineEdit {
+ public:
+- KDMPasswordEdit( TQWidget *parent ) : KPasswordEdit( parent, 0 ) {}
+- KDMPasswordEdit( KPasswordEdit::EchoModes echoMode, TQWidget *parent ) : KPasswordEdit( echoMode, parent, 0 ) {}
++ KDMPasswordEdit( TQWidget *parent ) : KLineEdit( parent )
++ {
++ setEchoMode(TQLineEdit::Password);
++ }
++ KDMPasswordEdit( TQLineEdit::EchoMode echoMode, TQWidget *parent ) : KLineEdit( parent )
++ {
++ setEchoMode(echoMode);
++ }
++
+ protected:
+ virtual void contextMenuEvent( TQContextMenuEvent * ) {}
+ };
+@@ -150,7 +157,7 @@
+ if (echoMode == -1)
+ passwdEdit = new KDMPasswordEdit( parent );
+ else
+- passwdEdit = new KDMPasswordEdit( (KPasswordEdit::EchoModes)echoMode,
++ passwdEdit = new KDMPasswordEdit( (TQLineEdit::EchoMode)echoMode,
+ parent );
+ connect( passwdEdit, TQT_SIGNAL(textChanged( const TQString & )),
+ TQT_SLOT(slotActivity()) );
+@@ -180,8 +187,8 @@
+ }
+ if (func != Authenticate) {
+ if (echoMode == -1) {
+- passwd1Edit = new KDMPasswordEdit( (KPasswordEdit::EchoModes)echoMode, parent );
+- passwd2Edit = new KDMPasswordEdit( (KPasswordEdit::EchoModes)echoMode, parent );
++ passwd1Edit = new KDMPasswordEdit( (TQLineEdit::EchoMode)echoMode, parent );
++ passwd2Edit = new KDMPasswordEdit( (TQLineEdit::EchoMode)echoMode, parent );
+ } else {
+ passwd1Edit = new KDMPasswordEdit( parent );
+ passwd2Edit = new KDMPasswordEdit( parent );
+@@ -328,16 +335,16 @@
+ KGreeterPluginHandler::IsUser );
+ break;
+ case 1:
+- handler->gplugReturnText( passwdEdit->password(),
++ handler->gplugReturnText( passwdEdit->text().utf8(),
+ KGreeterPluginHandler::IsPassword |
+ KGreeterPluginHandler::IsSecret );
+ break;
+ case 2:
+- handler->gplugReturnText( passwd1Edit->password(),
++ handler->gplugReturnText( passwd1Edit->text().utf8(),
+ KGreeterPluginHandler::IsSecret );
+ break;
+ default: // case 3:
+- handler->gplugReturnText( passwd2Edit->password(),
++ handler->gplugReturnText( passwd2Edit->text().utf8(),
+ KGreeterPluginHandler::IsNewPassword |
+ KGreeterPluginHandler::IsSecret );
+ break;
+@@ -486,11 +493,11 @@
+ // assert( !running );
+ setActive2( true );
+ if (authTok) {
+- passwd1Edit->erase();
+- passwd2Edit->erase();
++ passwd1Edit->clear();
++ passwd2Edit->clear();
+ passwd1Edit->setFocus();
+ } else {
+- passwdEdit->erase();
++ passwdEdit->clear();
+ if (loginEdit && loginEdit->isEnabled())
+ passwdEdit->setEnabled( true );
+ else {
+@@ -507,7 +514,7 @@
+ KWinbindGreeter::clear()
+ {
+ // assert( !running && !passwd1Edit );
+- passwdEdit->erase();
++ passwdEdit->clear();
+ if (loginEdit) {
+ domainCombo->setCurrentItem( defaultDomain );
+ slotChangedDomain( defaultDomain );
+@@ -632,6 +639,21 @@
+ void *ctx )
+ {
+ echoMode = getConf( ctx, "EchoMode", TQVariant( -1 ) ).toInt();
++ switch (echoMode)
++ {
++ case (0):
++ case (1):
++ echoMode = TQLineEdit::Password;
++ break;
++
++ case (2):
++ echoMode = TQLineEdit::NoEcho;
++ break;
++
++ default:
++ echoMode = TQLineEdit::Password;
++ }
++
+ staticDomains = TQStringList::split( ':', getConf( ctx, "winbind.Domains", TQVariant( "" ) ).toString() );
+ if (!staticDomains.contains("<local>"))
+ staticDomains << "<local>";
+--- ./kdmlib/kgreet_winbind.h.ORI 2013-05-09 18:00:46.495362083 +0200
++++ ./kdmlib/kgreet_winbind.h 2013-05-09 18:01:22.960606033 +0200
+@@ -33,7 +33,6 @@
+
+ class KComboBox;
+ class KLineEdit;
+-class KPasswordEdit;
+ class KSimpleConfig;
+ class TQGridLayout;
+ class TQLabel;
+@@ -85,7 +84,7 @@
+ TQLabel *domainLabel, *loginLabel, *passwdLabel, *passwd1Label, *passwd2Label;
+ KComboBox *domainCombo;
+ KLineEdit *loginEdit;
+- KPasswordEdit *passwdEdit, *passwd1Edit, *passwd2Edit;
++ KLineEdit *passwdEdit, *passwd1Edit, *passwd2Edit;
+ KSimpleConfig *stsFile;
+ TQString fixedDomain, fixedUser, curUser;
+ TQStringList allUsers, mDomainListing;
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kickoff_add_packagekit_shortcut.patch b/redhat/tdebase/tdebase-3.5.13.2-kickoff_add_packagekit_shortcut.patch
new file mode 100644
index 000000000..727cfeec0
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-kickoff_add_packagekit_shortcut.patch
@@ -0,0 +1,12 @@
+--- trinity-tdebase-3.5.13.2~pre100+073a32f9/CMakeLists.txt.ORI 2013-05-10 19:40:45.930287816 +0200
++++ trinity-tdebase-3.5.13.2~pre100+073a32f9/CMakeLists.txt 2013-05-10 19:40:57.593049243 +0200
+@@ -244,6 +244,9 @@
+ endif()
+
+ ##### Checks for a distribution-specific 2nd menu item, generally a shortcut to graphical package manager
++if(EXISTS "/usr/share/applications/gpk-application.desktop")
++ set( KICKOFF_DIST_CONFIG_SHORTCUT2 "/usr/share/applications/gpk-application.desktop" )
++endif()
+ if(EXISTS "/usr/share/applications/package-manager.desktop")
+ set( KICKOFF_DIST_CONFIG_SHORTCUT2 "/usr/share/applications/package-manager.desktop" )
+ endif()
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kickoff_default_favs.patch b/redhat/tdebase/tdebase-3.5.13.2-kickoff_default_favs.patch
new file mode 100644
index 000000000..bbba25a86
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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
+-kde-Kontact.desktop
+-writer.desktop
+-kde-amarok.desktop
+-kde-digikam.desktop
+ kde-Home.desktop
++kde-konqbrowser.desktop
++kde-Kfind.desktop
++kde-kate.desktop
++kde-konsole.desktop
+ kde-KControl.desktop
+ kde-Help.desktop
+-kde-konsole.desktop
diff --git a/redhat/tdebase/tdebase-3.5.13.2-kickoff_xdg_dirs.patch b/redhat/tdebase/tdebase-3.5.13.2-kickoff_xdg_dirs.patch
new file mode 100644
index 000000000..a3619839f
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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 ( KStandardDirs::exists( KGlobalSettings::picturesPath() + "/" ) )
++ {
++ TQString picturesPath = KGlobalSettings::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 ( KStandardDirs::exists( KGlobalSettings::musicPath() + "/" ) )
++ {
++ TQString musicPath = KGlobalSettings::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 ( KStandardDirs::exists( KGlobalSettings::videosPath() + "/" ) )
++ {
++ TQString videosPath = KGlobalSettings::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 ( KStandardDirs::exists( KGlobalSettings::downloadPath() + "/" ) )
++ {
++ TQString downloadPath = KGlobalSettings::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-3.5.13.2-select_wm_gui.patch b/redhat/tdebase/tdebase-3.5.13.2-select_wm_gui.patch
new file mode 100644
index 000000000..464ef3f51
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-select_wm_gui.patch
@@ -0,0 +1,639 @@
+--- ./ksmserver/startup.cpp.ori 2013-05-08 20:04:32.138717187 +0200
++++ ./ksmserver/startup.cpp 2013-05-08 20:14:12.550305958 +0200
+@@ -115,43 +115,40 @@
+ int count = config->readNumEntry( "count" );
+ appsToStart = count;
+
+- TQValueList<TQStringList> wmCommands;
+- if ( !wm.isEmpty() ) {
+- for ( int i = 1; i <= count; i++ ) {
+- TQString n = TQString::number(i);
+- if ( wm == config->readEntry( TQString("program")+n ) ) {
+- wmCommands << config->readListEntry( TQString("restartCommand")+n );
+- }
+- }
+- }
+- if ( wmCommands.isEmpty() )
+- wmCommands << ( TQStringList() << wm );
+-
+ publishProgress( appsToStart, true );
+ connectDCOPSignal( launcher, launcher, "autoStart0Done()",
+ "autoStart0Done()", true);
+ connectDCOPSignal( launcher, launcher, "autoStart1Done()",
+ "autoStart1Done()", true);
+ connectDCOPSignal( launcher, launcher, "autoStart2Done()",
+ "autoStart2Done()", true);
+ upAndRunning( "ksmserver" );
+
+- if ( !wmCommands.isEmpty() ) {
+- // when we have a window manager, we start it first and give
+- // it some time before launching other processes. Results in a
+- // visually more appealing startup.
+- for (uint i = 0; i < wmCommands.count(); i++)
+- startApplication( wmCommands[i] );
+- if ((showFancyLogin) && (!startupNotifierIPDlg)) {
+- startupNotifierIPDlg = KSMStartupIPDlg::showStartupIP();
+- }
+- TQTimer::singleShot( 4000, this, TQT_SLOT( autoStart0() ) );
+- } else {
+- if ((showFancyLogin) && (!startupNotifierIPDlg)) {
+- startupNotifierIPDlg = KSMStartupIPDlg::showStartupIP();
++ // find all commands to launch the wm in the session
++ TQValueList<QStringList> wmStartCommands;
++ if ( !wm.isEmpty() ) {
++ for ( int i = 1; i <= count; i++ ) {
++ TQString n = TQString::number(i);
++ // special hack for it, both kde3(=native) and kde4 kwin have the same program,
++ // but the command for kde4 kwin starts with the kde4 wrapper
++ if( config->readEntry( TQString("program")+n ) == "kwin" ) {
++ TQStringList command = config->readListEntry( TQString("restartCommand")+n );
++ if( wmCommands.count() > 1 && wmCommands[ 0 ].endsWith( "kde4" )
++ && command.count() > 1 && command[ 0 ].endsWith( "kde4" )) {
++ wmStartCommands << command; // kde4 wanted, kde4 found
++ } else if(!( wmCommands.count() > 1 && wmCommands[ 0 ].endsWith( "kde4" ))
++ && !( command.count() > 1 && command[ 0 ].endsWith( "kde4" ))) {
++ wmStartCommands << command; // native wanted, native found
++ }
++ } else if ( wm == config->readEntry( TQString("program")+n ) ) {
++ wmStartCommands << config->readListEntry( TQString("restartCommand")+n );
++ }
+ }
+- autoStart0();
++ }
++ if( wmStartCommands.isEmpty()) { // otherwise use the configured default
++ wmStartCommands << wmCommands;
+ }
++ launchWM( wmStartCommands );
+ }
+
+ /*!
+@@ -180,18 +177,57 @@
+ "autoStart1Done()", true);
+ connectDCOPSignal( launcher, launcher, "autoStart2Done()",
+ "autoStart2Done()", true);
+- startApplication( wm );
++ launchWM( TQValueList< TQStringList >() << wmCommands );
+ if ((showFancyLogin) && (!startupNotifierIPDlg)) {
+ startupNotifierIPDlg = KSMStartupIPDlg::showStartupIP();
+ }
++}
++
++void KSMServer::launchWM( const QValueList< QStringList >& wmStartCommands )
++{
++ assert( state == LaunchingWM );
++
++ // when we have a window manager, we start it first and give
++ // it some time before launching other processes. Results in a
++ // visually more appealing startup.
++ wmProcess = startApplication( wmStartCommands[ 0 ] );
++ connect( wmProcess, TQT_SIGNAL( processExited( KProcess* )), TQT_SLOT( wmProcessChange()));
++ // there can be possibly more wm's (because of forking for multihead),
++ // but in such case care only about the process of the first one
++ for (unsigned int i = 1; i < wmStartCommands.count(); i++) {
++ startApplication( wmStartCommands[i] );
++ }
+ TQTimer::singleShot( 4000, this, TQT_SLOT( autoStart0() ) );
+ }
+
+
+ void KSMServer::clientSetProgram( KSMClient* client )
+ {
+- if ( !wm.isEmpty() && client->program() == wm )
++ if ( client->program() == wm ) {
+ autoStart0();
++ }
++}
++
++void KSMServer::wmProcessChange()
++{
++ if( state != LaunchingWM )
++ { // don't care about the process when not in the wm-launching state anymore
++ wmProcess = NULL;
++ return;
++ }
++ if( !wmProcess->isRunning())
++ { // wm failed to launch for some reason, go with kwin instead
++ kdWarning( 1218 ) << "Window manager '" << wm << "' failed to launch" << endl;
++ if( wm == "kwin" ) {
++ return; // uhoh, kwin itself failed
++ }
++ kdDebug( 1218 ) << "Launching KWin" << endl;
++ wm = "kwin";
++ wmCommands = ( TQStringList() << "kwin" );
++ // launch it
++ launchWM( TQValueList< TQStringList >() << wmCommands );
++ return;
++ }
+ }
+
+ void KSMServer::autoStart0()
+--- ./ksmserver/server.h.ORI 2013-05-08 20:16:35.950487652 +0200
++++ ./ksmserver/server.h 2013-05-08 20:19:49.069692796 +0200
+@@ -30,6 +30,8 @@
+ #define SESSION_PREVIOUS_LOGOUT "saved at previous logout"
+ #define SESSION_BY_USER "saved by user"
+
++class KProcess;
++
+ typedef TQValueList<TQCString> QCStringList;
+ class KSMListener;
+ class KSMConnection;
+@@ -98,6 +100,8 @@
+ KApplication::ShutdownType sdtype,
+ KApplication::ShutdownMode sdmode );
+
++ void launchWM( const TQValueList< TQStringList >& wmStartCommands );
++
+ public slots:
+ void cleanUp();
+
+@@ -120,6 +124,7 @@
+ void autoStart2();
+ void tryRestoreNext();
+ void startupSuspendTimeout();
++ void wmProcessChange();
+
+ private:
+ void handlePendingInteractions();
+@@ -138,7 +143,7 @@
+ void startProtection();
+ void endProtection();
+
+- void startApplication( TQStringList command,
++ KProcess* startApplication( TQStringList command,
+ const TQString& clientMachine = TQString::null,
+ const TQString& userId = TQString::null );
+ void executeCommand( const TQStringList& command );
+@@ -149,6 +154,7 @@
+ bool isCM( const TQString& program ) const;
+ bool isNotifier( const KSMClient* client ) const;
+ bool isNotifier( const TQString& program ) const;
++ void selectWm( const TQString& kdewm );
+ bool defaultSession() const; // empty session
+ void setupXIOErrorHandler();
+
+@@ -231,6 +237,8 @@
+ TQString lastIdStarted;
+
+ TQStringList excludeApps;
++ TQStringList wmCommands;
++ KProcess* wmProcess;
+
+ WindowMap legacyWindows;
+ int initialClientCount;
+--- ./ksmserver/CMakeLists.txt.ORI 2013-05-08 20:21:11.420074784 +0200
++++ ./ksmserver/CMakeLists.txt 2013-05-08 20:22:16.602794164 +0200
+@@ -28,6 +28,8 @@
+ ${DBUS_TQT_LIBRARY_DIRS}
+ )
+
++add_subdirectory( windowmanagers )
++
+
+ ##### other data ################################
+
+--- ./ksmserver/main.cpp.ori 2013-05-08 20:22:52.841082235 +0200
++++ ./ksmserver/main.cpp 2013-05-08 20:23:11.717711399 +0200
+@@ -203,8 +203,6 @@
+ }
+
+ TQCString wm = args->getOption("windowmanager");
+- if ( wm.isEmpty() )
+- wm = "kwin";
+
+ bool only_local = args->isSet("local");
+ #ifndef HAVE__ICETRANSNOLISTEN
+--- ./ksmserver/server.cpp.ori 2013-05-08 20:24:02.870706512 +0200
++++ ./ksmserver/server.cpp 2013-05-08 20:35:02.808745909 +0200
+@@ -77,6 +77,8 @@
+ #include <kprocess.h>
+ #include <dcopclient.h>
+ #include <dcopref.h>
++#include <kdesktopfile.h>
++#include <kshell.h>
+
+ #include "server.h"
+ #include "global.h"
+@@ -98,11 +100,11 @@
+ /*! Utility function to execute a command on the local machine. Used
+ * to restart applications.
+ */
+-void KSMServer::startApplication( TQStringList command, const TQString& clientMachine,
++KProcess* KSMServer::startApplication( TQStringList command, const TQString& clientMachine,
+ const TQString& userId )
+ {
+ if ( command.isEmpty() )
+- return;
++ return NULL;
+ if ( !userId.isEmpty()) {
+ struct passwd* pw = getpwuid( getuid());
+ if( pw != NULL && userId != TQString::fromLocal8Bit( pw->pw_name )) {
+@@ -116,12 +118,13 @@
+ command.prepend( clientMachine );
+ command.prepend( xonCommand ); // "xon" by default
+ }
+- int n = command.count();
+- TQCString app = command[0].latin1();
+- TQValueList<TQCString> argList;
+- for ( int i=1; i < n; i++)
+- argList.append( TQCString(command[i].latin1()));
+- DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "TQValueList<TQCString>" ) );
++ KProcess* process = new KProcess( this );
++ *process << command;
++ // make it auto-delete
++ connect( process, TQT_SIGNAL( processExited( KProcess* )), process, TQT_SLOT( deleteLater()));
++ process->start();
++ return process;
++
+ }
+
+ /*! Utility function to execute a command on the local machine. Used
+@@ -579,7 +582,7 @@
+ #endif
+
+ KSMServer::KSMServer( const TQString& windowManager, bool _only_local )
+- : DCOPObject("ksmserver"), sessionGroup( "" ), startupNotifierIPDlg(0), shutdownNotifierIPDlg(0)
++ : DCOPObject("ksmserver"), sessionGroup( "" ), startupNotifierIPDlg(0), shutdownNotifierIPDlg(0), wmProcess( NULL )
+ {
+ the_server = this;
+ clean = false;
+@@ -595,7 +598,10 @@
+ config->setGroup("General" );
+ clientInteracting = 0;
+ xonCommand = config->readEntry( "xonCommand", "xon" );
+-
++
++ KGlobal::dirs()->addResourceType( "windowmanagers", "share/apps/ksmserver/windowmanagers" );
++ selectWm( windowManager );
++
+ connect( &knotifyTimeoutTimer, TQT_SIGNAL( timeout()), TQT_SLOT( knotifyTimeout()));
+ connect( &startupSuspendTimeoutTimer, TQT_SIGNAL( timeout()), TQT_SLOT( startupSuspendTimeout()));
+ connect( &pendingShutdown, TQT_SIGNAL( timeout()), TQT_SLOT( pendingShutdownTimeout()));
+@@ -851,15 +857,15 @@
+ config->setGroup( sessionGroup );
+ count = 0;
+
+- if ( !wm.isEmpty() ) {
+- // put the wm first
+- for ( KSMClient* c = clients.first(); c; c = clients.next() )
+- if ( c->program() == wm ) {
+- clients.prepend( clients.take() );
+- break;
+- }
++ // put the wm first
++ for ( KSMClient* c = clients.first(); c; c = clients.next() ) {
++ if ( c->program() == wm ) {
++ clients.prepend( clients.take() );
++ break;
++ }
+ }
+
++
+ for ( KSMClient* c = clients.first(); c; c = clients.next() ) {
+ int restartHint = c->restartStyleHint();
+ if (restartHint == SmRestartNever)
+@@ -909,11 +915,7 @@
+
+ bool KSMServer::isWM( const TQString& program ) const
+ {
+- // KWin relies on ksmserver's special treatment in phase1,
+- // therefore make sure it's recognized even if ksmserver
+- // was initially started with different WM, and kwin replaced
+- // it later
+- return ((program == wm) || (program == "kwin"));
++ return program == wm;
+ }
+
+ bool KSMServer::isCM( const KSMClient* client ) const
+@@ -941,3 +943,62 @@
+ {
+ return sessionGroup.isEmpty();
+ }
++
++static bool noDisplay( KDesktopFile& f )
++{
++ KConfigGroup gr( &f, "Desktop Entry" );
++ if (gr.readBoolEntry("NoDisplay", false)) {
++ return true;
++ }
++ if (gr.hasKey("OnlyShowIn")) {
++ if (!gr.readListEntry("OnlyShowIn", ';').contains("KDE"))
++ return true;
++ }
++ if (gr.hasKey("NotShowIn")) {
++ if (gr.readListEntry("NotShowIn", ';').contains("KDE"))
++ return true;
++ }
++ return false;
++}
++
++// selection logic:
++// - $KDEWM is set - use that
++// - a wm is selected using the kcm - use that
++// - if that fails, just use KWin
++void KSMServer::selectWm( const TQString& kdewm )
++{
++ wm = "kwin"; // defaults
++ wmCommands = ( TQStringList() << "kwin" );
++ if( !kdewm.isEmpty())
++ {
++ wmCommands = ( TQStringList() << kdewm );
++ wm = kdewm;
++ return;
++ }
++ KConfigGroup config(KGlobal::config(), "General");
++ TQString cfgwm = config.readEntry( "windowManager", "kwin" );
++ KDesktopFile file( cfgwm + ".desktop", true, "windowmanagers" );
++ if( noDisplay( file )) {
++ return;
++ }
++ if( !file.tryExec()) {
++ return;
++ }
++ file.setDesktopGroup();
++ TQString testexec = file.readEntry( "X-KDE-WindowManagerTestExec" );
++ if( !testexec.isEmpty())
++ {
++ int ret = system( TQFile::encodeName( testexec ));
++ if( !WIFEXITED( ret ) || WEXITSTATUS( ret ) != 0 ) {
++ return;
++ }
++ }
++ TQStringList cfgWmCommands = KShell::splitArgs( file.readEntry( "Exec" ));
++ if( cfgWmCommands.isEmpty()) {
++ return;
++ }
++ TQString smname = file.readEntry( "X-KDE-WindowManagerId" );
++ // ok
++ wm = smname.isEmpty() ? cfgwm : smname;
++ wmCommands = cfgWmCommands;
++}
+Index: ksmserver/windowmanagers/CMakeLists.txt
+===================================================================
+--- /dev/null
++++ ./ksmserver/windowmanagers/CMakeLists.txt
+@@ -0,0 +1,4 @@
++install(
++ FILES compiz-custom.desktop compiz.desktop kwin4.desktop metacity.desktop openbox.desktop
++ DESTINATION ${DATA_INSTALL_DIR}/ksmserver/windowmanagers
++)
+Index: ksmserver/windowmanagers/openbox.desktop
+===================================================================
+--- /dev/null
++++ ./ksmserver/windowmanagers/openbox.desktop
+@@ -0,0 +1,5 @@
++[Desktop Entry]
++Name=Openbox
++Exec=openbox
++TryExec=openbox
++
+Index: ksmserver/windowmanagers/compiz.desktop
+===================================================================
+--- /dev/null
++++ ./ksmserver/windowmanagers/compiz.desktop
+@@ -0,0 +1,4 @@
++[Desktop Entry]
++Name=Compiz
++Exec=compiz ccp
++TryExec=compiz
+Index: ksmserver/windowmanagers/compiz-custom.desktop
+===================================================================
+--- /dev/null
++++ ./ksmserver/windowmanagers/compiz-custom.desktop
+@@ -0,0 +1,5 @@
++[Desktop Entry]
++Name=Compiz custom (create wrapper script 'compiz-kde-launcher' to launch it)
++Exec=compiz-kde-launcher
++TryExec=compiz
++X-KDE-WindowManagerId=compiz
+Index: ksmserver/windowmanagers/kwin4.desktop
+===================================================================
+--- /dev/null
++++ ./ksmserver/windowmanagers/kwin4.desktop
+@@ -0,0 +1,6 @@
++[Desktop Entry]
++Name=KWin (KDE4)
++Exec=kde4 /usr/bin/kwin
++TryExec=/usr/bin/kwin
++X-KDE-WindowManagerId=kwin
++
+Index: ksmserver/windowmanagers/metacity.desktop
+===================================================================
+--- /dev/null
++++ ./ksmserver/windowmanagers/metacity.desktop
+@@ -0,0 +1,4 @@
++[Desktop Entry]
++Name=Metacity (GNOME)
++Exec=metacity
++TryExec=metacity
+--- ./kcontrol/smserver/smserverconfigdlg.ui.ori 2013-05-08 20:42:59.226232919 +0200
++++ ./kcontrol/smserver/smserverconfigdlg.ui 2013-05-08 20:45:53.648749758 +0200
+@@ -1,4 +1,4 @@
+-<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+ <class>SMServerConfigDlg</class>
+ <widget class="TQWidget">
+ <property name="name">
+@@ -8,8 +8,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>325</width>
+- <height>366</height>
++ <width>334</width>
++ <height>476</height>
+ </rect>
+ </property>
+ <property name="caption">
+@@ -173,6 +173,24 @@
+ </widget>
+ </vbox>
+ </widget>
++ <widget class="TQGroupBox">
++ <property name="name">
++ <cstring>windowManagerGroup</cstring>
++ </property>
++ <property name="title">
++ <string>Window Manager</string>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="TQComboBox">
++ <property name="name">
++ <cstring>windowManagerCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
+ <widget class="TQButtonGroup">
+ <property name="name">
+ <cstring>advancedGroup</cstring>
+@@ -279,6 +297,12 @@
+ <receiver>SMServerConfigDlg</receiver>
+ <slot>configChanged()</slot>
+ </connection>
++ <connection>
++ <sender>windowManagerCombo</sender>
++ <signal>activated(int)</signal>
++ <receiver>SMServerConfigDlg</receiver>
++ <slot>configChanged()</slot>
++ </connection>
+ </connections>
+ <includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+--- ./kcontrol/smserver/kcmsmserver.cpp.ORI 2013-05-08 20:47:16.855088794 +0200
++++ ./kcontrol/smserver/kcmsmserver.cpp 2013-05-08 20:57:27.009783724 +0200
+@@ -22,6 +22,8 @@
+ #include <tqcheckbox.h>
+ #include <tqlayout.h>
+ #include <tqradiobutton.h>
++#include <tqcombobox.h>
++#include <tqfile.h>
+
+ #include <dcopclient.h>
+
+@@ -29,6 +31,12 @@
+ #include <kconfig.h>
+ #include <kgenericfactory.h>
+ #include <klineedit.h>
++#include <kstandarddirs.h>
++#include <tqregexp.h>
++#include <kdesktopfile.h>
++#include <kdebug.h>
++#include <kprocess.h>
++#include <kmessagebox.h>
+
+ #include "kcmsmserver.h"
+ #include "smserverconfigimpl.h"
+@@ -52,6 +60,7 @@
+
+ dialog->show();
+ topLayout->add(dialog);
++ KGlobal::dirs()->addResourceType( "windowmanagers", "share/apps/ksmserver/windowmanagers" );
+ load();
+
+ }
+@@ -90,6 +99,7 @@
+ dialog->logoutRadio->setChecked(true);
+ break;
+ }
++ loadWMs(c->readEntry("windowManager", "kwin"));
+ dialog->excludeLineedit->setText( c->readEntry("excludeApps"));
+
+ c->setGroup("Logout");
+@@ -121,6 +131,7 @@
+ dialog->rebootRadio->isChecked() ?
+ int(KApplication::ShutdownTypeReboot) :
+ int(KApplication::ShutdownTypeNone));
++ c->writeEntry("windowManager", currentWM());
+ c->writeEntry("excludeApps", dialog->excludeLineedit->text());
+ c->setGroup("Logout");
+ c->writeEntry( "showLogoutStatusDlg", dialog->showLogoutStatusDialog->isChecked());
+@@ -131,6 +142,12 @@
+ // update the k menu if necessary
+ TQByteArray data;
+ kapp->dcopClient()->send( "kicker", "kicker", "configure()", data );
++ if( oldwm != currentWM())
++ { // TODO switch it already in the session instead and tell ksmserver
++ KMessageBox::information( this,
++ i18n( "The new window manager will be used when TDE is started the next time." ),
++ i18n( "Window manager change" ), "windowmanagerchange" );
++ }
+ }
+
+ void SMServerConfig::defaults()
+@@ -138,5 +155,79 @@
+ load( true );
+ }
+
++static bool noDisplay( KDesktopFile& f )
++{
++ KConfigGroup gr( &f, "Desktop Entry" );
++ if (gr.readBoolEntry("NoDisplay", false)) {
++ return true;
++ }
++ if (gr.hasKey("OnlyShowIn")) {
++ if (!gr.readListEntry("OnlyShowIn", ';').contains("KDE"))
++ return true;
++ }
++ if (gr.hasKey("NotShowIn")) {
++ if (gr.readListEntry("NotShowIn", ';').contains("KDE"))
++ return true;
++ }
++ return false;
++}
++
++void SMServerConfig::loadWMs( const TQString& current )
++{
++ TQString kwinname = i18n( "KWin (KDE default)" );
++ dialog->windowManagerCombo->insertItem( kwinname );
++ dialog->windowManagerCombo->setCurrentItem( 0 );
++ wms[ kwinname ] = "kwin";
++ oldwm = "kwin";
++ TQStringList list = KGlobal::dirs()->findAllResources( "windowmanagers", TQString(), false, true );
++ TQRegExp reg( ".*/([^/\\.]*)\\.[^/\\.]*" );
++ for( TQStringList::ConstIterator it = list.begin();
++ it != list.end();
++ ++it )
++ {
++ TQString wmfile = *it;
++ KDesktopFile file( wmfile );
++ if( noDisplay( file )) {
++ continue;
++ }
++ if( !file.tryExec()) {
++ continue;
++ }
++ file.setDesktopGroup();
++ TQString testexec = file.readEntry( "X-KDE-WindowManagerTestExec" );
++ if( !testexec.isEmpty())
++ {
++ int ret = system( TQFile::encodeName( testexec ));
++ if( !WIFEXITED( ret ) || WEXITSTATUS( ret ) != 0 ) {
++ continue;
++ }
++ }
++ TQString name = file.readName();
++ if( name.isEmpty()) {
++ continue;
++ }
++ if( !reg.exactMatch( wmfile )) {
++ continue;
++ }
++ TQString wm = reg.cap( 1 );
++ if( wms.values().contains( wm )) {
++ continue;
++ }
++ wms[ name ] = wm;
++ dialog->windowManagerCombo->insertItem( name );
++ if( wms[ name ] == current ) // make it selected
++ {
++ dialog->windowManagerCombo->setCurrentItem( dialog->windowManagerCombo->count() - 1 );
++ oldwm = wm;
++ }
++ }
++}
++
++TQString SMServerConfig::currentWM() const
++{
++ return wms[ dialog->windowManagerCombo->currentText() ];
++}
++
++
+ #include "kcmsmserver.moc"
+
+--- ./kcontrol/smserver/kcmsmserver.h.ORI 2013-05-08 20:58:45.880171397 +0200
++++ ./kcontrol/smserver/kcmsmserver.h 2013-05-08 20:59:21.030453176 +0200
+@@ -40,6 +40,10 @@
+
+ private:
+ SMServerConfigImpl* dialog;
++ void loadWMs( const TQString& current );
++ TQString currentWM() const;
++ TQMap< TQString, TQString > wms; // i18n text -> internal name
++ TQString oldwm; // the original value
+
+ };
+
diff --git a/redhat/tdebase/tdebase-3.5.13.2-suspend_unmount.patch b/redhat/tdebase/tdebase-3.5.13.2-suspend_unmount.patch
new file mode 100644
index 000000000..5b8264eb0
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-suspend_unmount.patch
@@ -0,0 +1,152 @@
+--- ./kioslave/media/libmediacommon/medium.cpp.ori 2013-05-08 22:57:09.317384423 +0200
++++ ./kioslave/media/libmediacommon/medium.cpp 2013-05-08 22:57:36.730837358 +0200
+@@ -44,6 +44,7 @@
+ loadUserLabel();
+
+ m_halmounted = false;
++ m_isHotplug = false;
+ }
+
+ Medium::Medium()
+@@ -65,6 +66,7 @@
+ m_properties+= TQString::null; /* CLEAR_DEVICE_UDI */
+
+ m_halmounted = false;
++ m_isHotplug = false;
+ }
+
+ const Medium Medium::create(const TQStringList &properties)
+--- ./kioslave/media/libmediacommon/medium.h.ORI 2013-05-08 22:59:10.772959829 +0200
++++ ./kioslave/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>;
+ };
+--- ./kioslave/media/mediamanager/mediamanager.cpp.ori 2013-05-08 23:00:39.673183801 +0200
++++ ./kioslave/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)
+--- ./kioslave/media/mediamanager/mediamanager.h.ORI 2013-05-08 23:05:36.250251036 +0200
++++ ./kioslave/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);
+@@ -87,6 +101,8 @@
+ HALBackend *m_halbackend;
+ MediaDirNotify m_dirNotify;
+ FstabBackend *m_fstabbackend;
++ TQStringList m_suspendResumeMountList;
++
+ };
+
+ #endif
+--- ./kioslave/media/mediamanager/halbackend.cpp.ori 2013-05-08 23:08:12.196126863 +0200
++++ ./kioslave/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);
+--- ./kioslave/media/mediamanager/halbackend.h.ORI 2013-05-08 23:09:35.761451488 +0200
++++ ./kioslave/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-3.5.13.2-vibrate_dialog.patch b/redhat/tdebase/tdebase-3.5.13.2-vibrate_dialog.patch
new file mode 100644
index 000000000..346eda1f5
--- /dev/null
+++ b/redhat/tdebase/tdebase-3.5.13.2-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 <kapplication.h>
+
+ #ifndef AF_LOCAL
+ # define AF_LOCAL AF_UNIX
+@@ -246,6 +247,11 @@
+ mLayoutButton->hide(); // no kxkb running
+ }
+ capsLocked();
++
++ KConfig* config = new KConfig("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.
+@@ -437,6 +474,7 @@
+ ok->setEnabled(false);
+ cancel->setEnabled(false);
+ mNewSessButton->setEnabled( false );
++ badPasswordLogin();
+ return;
+ case AuthAbort:
+ return;