--- tdebase/kcontrol/input/xcursor/themepage.cpp.ORI 2013-07-22 19:33:45.153674930 +0200 +++ tdebase/kcontrol/input/xcursor/themepage.cpp 2013-07-23 15:24:01.664497762 +0200 @@ -33,6 +33,8 @@ #include #include +#include "../../krdb/krdb.h" + #include #include #include @@ -42,6 +44,7 @@ #include #include #include +#include #include // for getenv() @@ -53,6 +56,10 @@ #include #include +#ifdef HAVE_XFIXES +# include +#endif + // Check for older version #if !defined(XCURSOR_LIB_MAJOR) && defined(XCURSOR_MAJOR) # define XCURSOR_LIB_MAJOR XCURSOR_MAJOR @@ -133,6 +140,65 @@ { } +bool ThemePage::applyTheme(TQString theme, TQString size) +{ +#ifdef HAVE_XCURSOR + if (theme.isEmpty()) { + return false; + } + + // Apply the TDE cursor theme to ourselves + XcursorSetTheme(qt_xdisplay(), theme.latin1()); + + // Tell klauncher to set the XCURSOR_THEME and XCURSOR_SIZE environment + // variables when launching applications. + DCOPRef klauncher("klauncher"); + klauncher.send("setLaunchEnv", TQCString("XCURSOR_THEME"), theme); + if( !size.isEmpty()) { + klauncher.send("setLaunchEnv", TQCString("XCURSOR_SIZE"), size); + } + + // Update the Xcursor X resources + runRdb(0); + + // Apply the TDE cursor size to ourselves + if (!size.isEmpty()) { + XcursorSetDefaultSize(qt_xdisplay(), size.toUInt()); + } + + // Reload the standard cursors + TQStringList names; + + // Qt cursors + names << "left_ptr" << "up_arrow" << "cross" << "wait" + << "left_ptr_watch" << "ibeam" << "size_ver" << "size_hor" + << "size_bdiag" << "size_fdiag" << "size_all" << "split_v" + << "split_h" << "pointing_hand" << "openhand" + << "closedhand" << "forbidden" << "whats_this" << "copy" << "move" << "link"; + + // X core cursors + names << "X_cursor" << "right_ptr" << "hand1" + << "hand2" << "watch" << "xterm" + << "crosshair" << "left_ptr_watch" << "center_ptr" + << "sb_h_double_arrow" << "sb_v_double_arrow" << "fleur" + << "top_left_corner" << "top_side" << "top_right_corner" + << "right_side" << "bottom_right_corner" << "bottom_side" + << "bottom_left_corner" << "left_side" << "question_arrow" + << "pirate"; + + for (int i = 0; i < names.size(); ++i) + { + const char* name = (*(names.at(i))).ascii(); + Cursor handle = XcursorLibraryLoadCursor(qt_xdisplay(), name); + XFixesChangeCursorByName(qt_xdisplay(), handle, TQFile::encodeName(name)); + XFreeCursor(qt_xdisplay(), handle); // Don't leak the cursor + } + + return true; +#else // HAVE_XCURSOR + return false; +#endif +} void ThemePage::save() { @@ -145,10 +209,17 @@ c.setGroup( "Mouse" ); c.writeEntry( "cursorTheme", selectedTheme != "system" ? selectedTheme : TQString::null ); - KMessageBox::information( this, i18n("You have to restart KDE for these " + // The Kcontrol panel does not allow to set cursor size for now. + // So we keep the same size as written in config file. + TQCString size = c.readEntry("cursorSize", TQString()).local8Bit(); + + if (!applyTheme(selectedTheme, size)) + { + KMessageBox::information( this, i18n("You have to restart KDE for these " "changes to take effect."), i18n("Cursor Settings Changed"), "CursorSettingsChanged" ); - + } + currentTheme = selectedTheme; } --- tdebase/kcontrol/input/xcursor/themepage.h.ORI 2013-07-22 19:49:33.467191658 +0200 +++ tdebase/kcontrol/input/xcursor/themepage.h 2013-07-22 19:56:03.990484896 +0200 @@ -45,6 +45,7 @@ void load(); void load( bool useDefaults ); void defaults(); + bool applyTheme(TQString theme, TQString size); signals: void changed( bool ); --- tdebase/kcontrol/input/xcursor/CMakeLists.txt.ORI 2013-07-23 15:24:41.178064068 +0200 +++ tdebase/kcontrol/input/xcursor/CMakeLists.txt 2013-07-23 15:27:31.694851294 +0200 @@ -21,5 +21,6 @@ tde_add_library( themepage STATIC_PIC AUTOMOC SOURCES - themepage.cpp previewwidget.cpp + themepage.cpp previewwidget.cpp ../../krdb/krdb.cpp + LINK Xfixes )