diff options
Diffstat (limited to 'kpersonalizer/kospage.cpp')
-rw-r--r-- | kpersonalizer/kospage.cpp | 508 |
1 files changed, 508 insertions, 0 deletions
diff --git a/kpersonalizer/kospage.cpp b/kpersonalizer/kospage.cpp new file mode 100644 index 000000000..81c2e57b6 --- /dev/null +++ b/kpersonalizer/kospage.cpp @@ -0,0 +1,508 @@ +/*************************************************************************** + kospage.cpp - description + ------------------- + begin : Tue May 22 2001 + copyright : (C) 2001 by Ralf Nolden + email : nolden@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include <qlabel.h> +#include <qcheckbox.h> +#include <qradiobutton.h> +#include <qtextview.h> +#include <qmap.h> + +#include <ksimpleconfig.h> +#include <kstandarddirs.h> +#include <kapplication.h> +#include <klocale.h> +#include <dcopclient.h> +#include <kipc.h> +#include <krun.h> +#include <kkeynative.h> +#include <kdebug.h> +#include <kiconloader.h> + +#include "libkonq/konq_defaults.h" + +#include "kospage.h" + +KOSPage::KOSPage(QWidget *parent, const char *name ) : KOSPageDlg(parent,name) { + px_osSidebar->setPixmap(UserIcon("step2.png")); + // initialize the textview with the default description - KDE of course + slotKDEDescription(); + // Set the configfiles + cglobal = new KConfig("kdeglobals"); + claunch = new KConfig("klaunchrc", false, false); + cwin = new KConfig("kwinrc"); + cdesktop = new KConfig("kdesktoprc"); + ckcminput = new KConfig("kcminputrc"); + ckcmdisplay = new KConfig("kcmdisplayrc"); + ckonqueror = new KConfig("konquerorrc"); + cklipper = new KConfig("klipperrc", false, false); + ckaccess = new KConfig("kaccessrc"); + // Save the current user defaults + getUserDefaults(); + // set default-selections for this page + setDefaults(); +} + +KOSPage::~KOSPage(){ + delete cglobal; + delete claunch; + delete cwin; + delete cdesktop; + delete ckcmdisplay; + delete ckcminput; + delete ckonqueror; + delete cklipper; + delete ckaccess; +} + + +void KOSPage::save(bool currSettings){ + kdDebug() << "KOSPage::save()" << endl; + // save like we want. Just set the Radiobutton to either how it is set in the dialog (currSettings=true, default) + // or, if false, take the settings we got in getUserDefaults() + saveCheckState(currSettings); + // sync all configs + cglobal->sync(); + claunch->sync(); + cwin->sync(); + cdesktop->sync(); + ckcmdisplay->sync(); + ckcminput->sync(); + ckonqueror->sync(); + cklipper->sync(); + ckaccess->sync(); + /////////////////////////////////////////// + // kcmdisplay changes + KIPC::sendMessageAll(KIPC::SettingsChanged); + QApplication::syncX(); + // enable/disable the mac menu, call dcop + // Tell kdesktop about the new config file + kapp->dcopClient()->send("kdesktop", "KDesktopIface", "configure()", QByteArray()); + /////////////////////////////////////////// + /// restart kwin for window effects + kapp->dcopClient()->send("kwin*", "", "reconfigure()", ""); + /////////////////////////////////////////// + + // Make the kaccess daemon read the changed config file + kapp->startServiceByDesktopName("kaccess"); +} + + + /** called by save() -- currSettings= true -> take the radiobutton, otherwise take user values set */ +void KOSPage::saveCheckState(bool currSettings){ + if(currSettings){ + // Set the path for the keysscheme resource files + KGlobal::dirs()->addResourceType("keys", KStandardDirs::kde_default("data")+"kcmkeys"); + // write the settings to the configfiles, depending on wich radiobutton is checked + if(rb_kde->isChecked()){ + writeKDE(); + emit selectedOS("KDE"); // send a signal to be caught by the KStylePage to set the according style by default depending on the OS selection + } + else if(rb_unix->isChecked()){ + writeUNIX(); + emit selectedOS("CDE"); // send a signal to be caught by the KStylePage to set the according style by default depending on the OS selection + } + else if(rb_windows->isChecked()){ + writeWindows(); + emit selectedOS("win"); // send a signal to be caught by the KStylePage to set the according style by default depending on the OS selection + } + else if(rb_mac->isChecked()){ + writeMacOS(); + emit selectedOS("mac"); // send a signal to be caught by the KStylePage to set the according style by default depending on the OS selection + } + + ckaccess->setGroup("Keyboard"); + ckaccess->writeEntry("Gestures", cb_gestures->isChecked(), true, true); + + } + else { // User has pressed "cancel & dismiss", so his old settings are written back + writeUserDefaults(); + } +} + + + /** write the settings for KDE-Behavior (called by saveCheckStatus) */ +void KOSPage::writeKDE(){ + kdDebug() << "KOSPage::writeKDE()" << endl; + + ckcmdisplay->setGroup("KDE"); + ckcmdisplay->writeEntry("macStyle", false, true, true); + + cglobal->setGroup("KDE"); + cglobal->writeEntry("SingleClick", true, true, true); + + claunch->setGroup("FeedbackStyle"); + claunch->writeEntry("BusyCursor", true); + + cwin->setGroup("Windows"); + cwin->writeEntry("TitlebarDoubleClickCommand", "Shade"); + cwin->writeEntry("FocusPolicy", "ClickToFocus"); + cwin->writeEntry("AltTabStyle", "KDE"); + cwin->setGroup( "MouseBindings"); + cwin->writeEntry("CommandActiveTitlebar2", "Lower"); + cwin->writeEntry("CommandActiveTitlebar3", "Operations menu"); + + cdesktop->setGroup( "Menubar" ); + cdesktop->writeEntry("ShowMenubar", false); + cdesktop->setGroup( "Mouse Buttons" ); + cdesktop->writeEntry("Middle", "WindowListMenu"); + cdesktop->setGroup( "FMSettings" ); + cdesktop->writeEntry("UnderlineLinks", false); + + ckonqueror->setGroup( "FMSettings" ); + ckonqueror->writeEntry("UnderlineLinks", false); + + ckcminput->setGroup("KDE"); + ckcminput->writeEntry("ChangeCursor", true, true, true ); + + cklipper->setGroup("General"); + cklipper->writeEntry("Synchronize", false); + + writeKeyEntrys(locate("keys", "kde3.kksrc")); +} + + + /** write the settings for fvwm-like-behavior (called by saveCheckStatus) */ +void KOSPage::writeUNIX(){ + kdDebug() << "KOSPage::writeUNIX()" << endl; + + ckcmdisplay->setGroup("KDE"); + ckcmdisplay->writeEntry("macStyle", false, true, true); + + cglobal->setGroup("KDE"); + cglobal->writeEntry("SingleClick", true, true, true); + + claunch->setGroup("FeedbackStyle"); + claunch->writeEntry("BusyCursor", false); + + cwin->setGroup("Windows"); + cwin->writeEntry("TitlebarDoubleClickCommand", "Shade"); + cwin->writeEntry("FocusPolicy", "FocusStrictlyUnderMouse"); + cwin->writeEntry("AltTabStyle", "CDE"); + cwin->setGroup( "MouseBindings"); + cwin->writeEntry("CommandActiveTitlebar2", "Operations menu"); + cwin->writeEntry("CommandActiveTitlebar3", "Lower"); + + cdesktop->setGroup( "Menubar" ); + cdesktop->writeEntry("ShowMenubar", false); + cdesktop->setGroup( "Mouse Buttons" ); + cdesktop->writeEntry("Middle", "AppMenu"); + cdesktop->setGroup( "FMSettings" ); + cdesktop->writeEntry("UnderlineLinks", false); + + ckonqueror->setGroup( "FMSettings" ); + ckonqueror->writeEntry("UnderlineLinks", false); + + ckcminput->setGroup("KDE"); + ckcminput->writeEntry("ChangeCursor", false, true, true ); + + cklipper->setGroup("General"); + cklipper->writeEntry("Synchronize", true); + + writeKeyEntrys(locate("keys", "unix3.kksrc")); +} + + + /** write the settings for windows-like-behavior (called by saveCheckStatus) */ +void KOSPage::writeWindows(){ + kdDebug() << "KOSPage::writeWindows()" << endl; + + ckcmdisplay->setGroup("KDE"); + ckcmdisplay->writeEntry("macStyle", false, true, true); + + cglobal->setGroup("KDE"); + cglobal->writeEntry("SingleClick", false, true, true); + + claunch->setGroup("FeedbackStyle"); + claunch->writeEntry("BusyCursor", true); + + cwin->setGroup("Windows"); + cwin->writeEntry("TitlebarDoubleClickCommand", "Maximize"); + cwin->writeEntry("FocusPolicy", "ClickToFocus"); + cwin->writeEntry("AltTabStyle", "KDE"); + cwin->setGroup( "MouseBindings"); + cwin->writeEntry("CommandActiveTitlebar2", "Lower"); + cwin->writeEntry("CommandActiveTitlebar3", "Operations menu"); + + cdesktop->setGroup( "Menubar" ); + cdesktop->writeEntry("ShowMenubar", false); + cdesktop->setGroup( "Mouse Buttons" ); + cdesktop->writeEntry("Middle", "WindowListMenu"); + cdesktop->setGroup( "FMSettings" ); + cdesktop->writeEntry("UnderlineLinks", false); + + ckonqueror->setGroup( "FMSettings" ); + ckonqueror->writeEntry("UnderlineLinks", false); + + ckcminput->setGroup("KDE"); + ckcminput->writeEntry("ChangeCursor", false, true, true ); + + cklipper->setGroup("General"); + cklipper->writeEntry("Synchronize", false); + + // set the schemefile depending on whether or not the keyboard has got Metakeys. + if( KKeyNative::keyboardHasWinKey() ) { + writeKeyEntrys(locate("keys", "win4.kksrc")); + } + else { + writeKeyEntrys(locate("keys", "win3.kksrc")); + } +} + + + /** write the settings for MacOS-like-behavior (called by saveCheckStatus) */ +void KOSPage::writeMacOS(){ + kdDebug() << "KOSPage::writeMacOS()" << endl; + + ckcmdisplay->setGroup("KDE"); + ckcmdisplay->writeEntry("macStyle", true, true, true); + + cglobal->setGroup("KDE"); + cglobal->writeEntry("SingleClick", true, true, true); + + claunch->setGroup("FeedbackStyle"); + claunch->writeEntry("BusyCursor", false); + + cwin->setGroup("Windows"); + cwin->writeEntry("TitlebarDoubleClickCommand", "Shade"); + cwin->writeEntry("FocusPolicy", "ClickToFocus"); + cwin->writeEntry("AltTabStyle", "KDE"); + cwin->setGroup( "MouseBindings"); + cwin->writeEntry("CommandActiveTitlebar2", "Lower"); + cwin->writeEntry("CommandActiveTitlebar3", "Operations menu"); + + cdesktop->setGroup( "Menubar" ); + cdesktop->writeEntry("ShowMenubar", true); + cdesktop->setGroup( "Mouse Buttons" ); + cdesktop->writeEntry("Middle", "WindowListMenu"); + cdesktop->setGroup( "FMSettings" ); + cdesktop->writeEntry("UnderlineLinks", false); + + ckonqueror->setGroup( "FMSettings" ); + ckonqueror->writeEntry("UnderlineLinks", false); + + ckcminput->setGroup("KDE"); + ckcminput->writeEntry("ChangeCursor", true, true, true ); + + cklipper->setGroup("General"); + cklipper->writeEntry("Synchronize", false); + + writeKeyEntrys(locate("keys", "mac4.kksrc")); +} + + + /** write Keyscheme to kdeglobals (called by saveCheckState) */ +void KOSPage::writeKeyEntrys(QString keyfile){ + kdDebug() << "KOSPage::writeKeyEntrys()" << endl; + + // load the given .kksrc - file + KSimpleConfig* scheme = new KSimpleConfig(keyfile, true); + // load the default .kksrc - file + KSimpleConfig* defScheme = new KSimpleConfig(locate("keys", "kde3.kksrc"), true); + + // we need the entries from the default - file, so we can compare with them + QMap<QString, QString> defMap = defScheme->entryMap("Global Shortcuts"); + // first delete the group in kdeglobals, then write the non-default entries from the global .kksrc - file + cglobal->deleteGroup("Global Shortcuts", true, true); + // get the Global - Shortcuts and write them to kdeglobals + cglobal->setGroup("Global Shortcuts"); + QMap<QString, QString> givenMap = scheme->entryMap("Global Shortcuts"); + for ( QMap<QString, QString>::Iterator it = givenMap.begin(); it != givenMap.end(); ++it ) { + if ( (defMap[it.key()] == it.data()) && (it.data() != "none") ) { + cglobal->writeEntry(it.key(), "default("+it.data()+")", true, true); + } else { + cglobal->writeEntry(it.key(), it.data(), true, true); + } + } + + // we need the entries from the default - file, so we can compare with them + defMap = defScheme->entryMap("Shortcuts"); + // first delete the group in kdeglobals, then write the non-default entries from the global .kksrc - file + cglobal->deleteGroup("Shortcuts", true, true); + cglobal->setGroup("Shortcuts"); + givenMap = scheme->entryMap("Shortcuts"); + for ( QMap<QString, QString>::Iterator it = givenMap.begin(); it != givenMap.end(); ++it ) { + // only write the entry, if it defers from kde3.kksrc + if ( defMap[it.key()] != it.data() ) { + cglobal->writeEntry(it.key(), it.data(), true, true); + } + } + + delete scheme; + delete defScheme; +} + +void KOSPage::slotKDEDescription(){ + kdDebug() << "slotKDEDescription()" << endl; + textview_ospage->setText(""); + textview_ospage->setText(i18n( + "<b>Window activation:</b> <i>Focus on click</i><br>" + "<b>Titlebar double-click:</b> <i>Shade window</i><br>" + "<b>Mouse selection:</b> <i>Single click</i><br>" + "<b>Application startup notification:</b> <i>busy cursor</i><br>" + "<b>Keyboard scheme:</b> <i>KDE default</i><br>" + )); +} + +void KOSPage::slotUnixDescription(){ + kdDebug() << "slotUnixDescription()" << endl; + textview_ospage->setText("" ); + textview_ospage->setText(i18n( + "<b>Window activation:</b> <i>Focus follows mouse</i><br>" + "<b>Titlebar double-click:</b> <i>Shade window</i><br>" + "<b>Mouse selection:</b> <i>Single click</i><br>" + "<b>Application startup notification:</b> <i>none</i><br>" + "<b>Keyboard scheme:</b> <i>UNIX</i><br>" + )); +} + +void KOSPage::slotWindowsDescription(){ + kdDebug() << "slotWindowsDescription()" << endl; + textview_ospage->setText(""); + textview_ospage->setText(i18n( + "<b>Window activation:</b> <i>Focus on click</i><br>" + "<b>Titlebar double-click:</b> <i>Maximize window</i><br>" + "<b>Mouse selection:</b> <i>Double click</i><br>" + "<b>Application startup notification:</b> <i>busy cursor</i><br>" + "<b>Keyboard scheme:</b> <i>Windows</i><br>" + )); +} + +void KOSPage::slotMacDescription(){ + kdDebug() << "slotMacDescription()" << endl; + textview_ospage->setText(""); + textview_ospage->setText(i18n( + "<b>Window activation:</b> <i>Focus on click</i><br>" + "<b>Titlebar double-click:</b> <i>Shade window</i><br>" + "<b>Mouse selection:</b> <i>Single click</i><br>" + "<b>Application startup notification:</b> <i>none</i><br>" + "<b>Keyboard scheme:</b> <i>Mac</i><br>" + )); +} + + +/** retrieves the user's local values. In case he doesn't have these set, use the default values of KDE */ +void KOSPage::getUserDefaults(){ + ckcmdisplay->setGroup("KDE"); + b_MacMenuBar = ckcmdisplay->readBoolEntry("macStyle", false); + + cglobal->setGroup("KDE"); + b_SingleClick = cglobal->readBoolEntry("SingleClick", true); + + claunch->setGroup("FeedbackStyle"); + b_BusyCursor = claunch->readBoolEntry("BusyCursor", true); + + cwin->setGroup("Windows"); + s_TitlebarDCC = cwin->readEntry("TitlebarDoubleClickCommand", "Shade"); + s_FocusPolicy = cwin->readEntry("FocusPolicy", "ClickToFocus"); + s_AltTabStyle = cwin->readEntry("AltTabStyle", "KDE"); + cwin->setGroup( "MouseBindings"); + s_TitlebarMMB = cwin->readEntry("CommandActiveTitlebar2", "Lower"); + s_TitlebarRMB = cwin->readEntry("CommandActiveTitlebar3", "Operations menu"); + + cdesktop->setGroup( "Menubar" ); + b_ShowMenuBar = cdesktop->readBoolEntry("ShowMenubar", false); + cdesktop->setGroup( "Mouse Buttons" ); + s_MMB = cdesktop->readEntry("Middle", "WindowListMenu"); + cdesktop->setGroup( "FMSettings" ); + b_DesktopUnderline = cdesktop->readBoolEntry("UnderlineLinks", DEFAULT_UNDERLINELINKS); + + ckonqueror->setGroup( "FMSettings" ); + b_KonqUnderline = ckonqueror->readBoolEntry("UnderlineLinks", DEFAULT_UNDERLINELINKS); + + ckcminput->setGroup("KDE"); + b_ChangeCursor = ckcminput->readBoolEntry("ChangeCursor", true); + + cklipper->setGroup("General"); + b_syncClipboards = cklipper->readBoolEntry("Synchronize", false); + + map_GlobalUserKeys = cglobal->entryMap("Global Shortcuts"); + map_AppUserKeys = cglobal->entryMap("Shortcuts"); + + ckaccess->setGroup("Keyboard"); + b_Gestures = ckaccess->readBoolEntry("Gestures", true); +} + + + /** writes the user-defaults back */ +void KOSPage::writeUserDefaults(){ + kdDebug() << "KOSPage::writeUserDefaults()" << endl; + + ckcmdisplay->setGroup("KDE"); + ckcmdisplay->writeEntry("macStyle", b_MacMenuBar, true, true); + + cglobal->setGroup("KDE"); + cglobal->writeEntry("SingleClick", b_SingleClick, true, true); + + claunch->setGroup("FeedbackStyle"); + claunch->writeEntry("BusyCursor", b_BusyCursor); + + cwin->setGroup("Windows"); + cwin->writeEntry("TitlebarDoubleClickCommand", s_TitlebarDCC); + cwin->writeEntry("FocusPolicy", s_FocusPolicy); + cwin->writeEntry("AltTabStyle", s_AltTabStyle); + cwin->setGroup( "MouseBindings"); + cwin->writeEntry("CommandActiveTitlebar2", s_TitlebarMMB); + cwin->writeEntry("CommandActiveTitlebar3", s_TitlebarRMB); + + cdesktop->setGroup( "Menubar" ); + cdesktop->writeEntry("ShowMenubar", b_ShowMenuBar); + cdesktop->setGroup( "Mouse Buttons" ); + cdesktop->writeEntry("Middle", s_MMB); + cdesktop->setGroup( "FMSettings" ); + cdesktop->writeEntry("UnderlineLinks", b_DesktopUnderline); + + ckonqueror->setGroup( "FMSettings" ); + ckonqueror->writeEntry("UnderlineLinks", b_KonqUnderline); + + ckcminput->setGroup("KDE"); + ckcminput->writeEntry("ChangeCursor", b_ChangeCursor, true, true ); + + cklipper->setGroup("General"); + cklipper->writeEntry("Synchronize", b_syncClipboards); + + ckaccess->setGroup("Keyboard"); + ckaccess->writeEntry("Gestures", b_Gestures, true, true); + + writeUserKeys(); +} + + /** called by writeUserDefaults() */ +void KOSPage::writeUserKeys(){ + kdDebug() << "KOSPage::writeUserKeys()" << endl; + + cglobal->setGroup("Global Shortcuts"); + QMap<QString, QString>::Iterator it; + for ( it = map_GlobalUserKeys.begin(); it != map_GlobalUserKeys.end(); ++it ) { + cglobal->writeEntry(it.key(), it.data(), true, true); + } + + cglobal->deleteGroup("Shortcuts", true, true); + cglobal->setGroup("Shortcuts"); + for ( it = map_AppUserKeys.begin(); it != map_AppUserKeys.end(); ++it ) { + cglobal->writeEntry(it.key(), it.data(), true, true); + } +} + + + /** resets the radio button selected to kde */ +void KOSPage::setDefaults(){ + rb_kde->setChecked(true); + cb_gestures->setChecked(false); +} + +#include "kospage.moc" + |