diff options
author | François Andriot <albator78@libertysurf.fr> | 2013-06-24 19:58:32 +0200 |
---|---|---|
committer | François Andriot <albator78@libertysurf.fr> | 2013-06-24 19:58:32 +0200 |
commit | d8e1ce857bedb9d018ae0918b4c90686d604c2df (patch) | |
tree | 111a8759c0599ce2be8d25946d21dee4f69923b9 /redhat/tdebase | |
parent | 8743b3f65cd27e30aefe49f127105aa305a86051 (diff) | |
download | tde-packaging-d8e1ce857bedb9d018ae0918b4c90686d604c2df.tar.gz tde-packaging-d8e1ce857bedb9d018ae0918b4c90686d604c2df.zip |
RPM Packaging: add 3.5.13.2 build patches
Diffstat (limited to 'redhat/tdebase')
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>&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 &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 &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>&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>&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>&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 &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 &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>&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>&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 &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 &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 @@ + </ul></qt></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; |