options.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "options.h"
00013
00014 #include <qpalette.h>
00015 #include <qpixmap.h>
00016 #include <kapplication.h>
00017 #include <kconfig.h>
00018 #include <kglobal.h>
00019 #include <kglobalsettings.h>
00020 #include <qtooltip.h>
00021
00022 #include "client.h"
00023
00024 namespace KWinInternal
00025 {
00026
00027 Options::Options()
00028 : electric_borders( 0 ),
00029 electric_border_delay(0)
00030 {
00031 d = new KDecorationOptionsPrivate;
00032 d->defaultKWinSettings();
00033 updateSettings();
00034 }
00035
00036 Options::~Options()
00037 {
00038 delete d;
00039 }
00040
00041 unsigned long Options::updateSettings()
00042 {
00043 KConfig *config = KGlobal::config();
00044 unsigned long changed = 0;
00045 changed |= d->updateKWinSettings( config );
00046
00047 config->setGroup( "Windows" );
00048 moveMode = config->readEntry("MoveMode", "Opaque" ) == "Opaque"?Opaque:Transparent;
00049 resizeMode = config->readEntry("ResizeMode", "Opaque" ) == "Opaque"?Opaque:Transparent;
00050 show_geometry_tip = config->readBoolEntry("GeometryTip", false);
00051
00052 QString val;
00053
00054 val = config->readEntry ("FocusPolicy", "ClickToFocus");
00055 focusPolicy = ClickToFocus;
00056 if ( val == "FocusFollowsMouse" )
00057 focusPolicy = FocusFollowsMouse;
00058 else if ( val == "FocusUnderMouse" )
00059 focusPolicy = FocusUnderMouse;
00060 else if ( val == "FocusStrictlyUnderMouse" )
00061 focusPolicy = FocusStrictlyUnderMouse;
00062
00063 val = config->readEntry ("AltTabStyle", "KDE");
00064 altTabStyle = KDE;
00065 if ( val == "CDE" )
00066 altTabStyle = CDE;
00067
00068 rollOverDesktops = config->readBoolEntry("RollOverDesktops", TRUE);
00069
00070
00071
00072 focusStealingPreventionLevel = config->readNumEntry( "FocusStealingPreventionLevel", 1 );
00073 focusStealingPreventionLevel = KMAX( 0, KMIN( 4, focusStealingPreventionLevel ));
00074 if( !focusPolicyIsReasonable())
00075 focusStealingPreventionLevel = 0;
00076
00077 KConfig *gc = new KConfig("kdeglobals", false, false);
00078 bool isVirtual = KApplication::desktop()->isVirtualDesktop();
00079 gc->setGroup("Windows");
00080 xineramaEnabled = gc->readBoolEntry ("XineramaEnabled", isVirtual ) &&
00081 isVirtual;
00082 if (xineramaEnabled)
00083 {
00084 xineramaPlacementEnabled = gc->readBoolEntry ("XineramaPlacementEnabled", true);
00085 xineramaMovementEnabled = gc->readBoolEntry ("XineramaMovementEnabled", true);
00086 xineramaMaximizeEnabled = gc->readBoolEntry ("XineramaMaximizeEnabled", true);
00087 }
00088 else
00089 {
00090 xineramaPlacementEnabled = xineramaMovementEnabled = xineramaMaximizeEnabled = false;
00091 }
00092 delete gc;
00093
00094 val = config->readEntry("Placement","Smart");
00095 if (val == "Random") placement = Random;
00096 else if (val == "Cascade") placement = Cascade;
00097 else if (val == "Centered") placement = Centered;
00098 else if (val == "ZeroCornered") placement = ZeroCornered;
00099 else placement = Smart;
00100
00101 animateShade = config->readBoolEntry("AnimateShade", TRUE );
00102
00103 animateMinimize = config->readBoolEntry("AnimateMinimize", TRUE );
00104 animateMinimizeSpeed = config->readNumEntry("AnimateMinimizeSpeed", 5 );
00105
00106 if( focusPolicy == ClickToFocus )
00107 {
00108 autoRaise = false;
00109 autoRaiseInterval = 0;
00110 }
00111 else
00112 {
00113 autoRaise = config->readBoolEntry("AutoRaise", FALSE );
00114 autoRaiseInterval = config->readNumEntry("AutoRaiseInterval", 0 );
00115 }
00116
00117 shadeHover = config->readBoolEntry("ShadeHover", FALSE );
00118 shadeHoverInterval = config->readNumEntry("ShadeHoverInterval", 250 );
00119
00120
00121 clickRaise = autoRaise || config->readBoolEntry("ClickRaise", TRUE );
00122
00123 borderSnapZone = config->readNumEntry("BorderSnapZone", 10);
00124 windowSnapZone = config->readNumEntry("WindowSnapZone", 10);
00125 snapOnlyWhenOverlapping=config->readBoolEntry("SnapOnlyWhenOverlapping",FALSE);
00126 electric_borders = config->readNumEntry("ElectricBorders", 0);
00127 electric_border_delay = config->readNumEntry("ElectricBorderDelay", 150);
00128
00129 OpTitlebarDblClick = windowOperation( config->readEntry("TitlebarDoubleClickCommand", "Shade"), true );
00130
00131 ignorePositionClasses = config->readListEntry("IgnorePositionClasses");
00132 ignoreFocusStealingClasses = config->readListEntry("IgnoreFocusStealingClasses");
00133
00134
00135 for( QStringList::Iterator it = ignorePositionClasses.begin();
00136 it != ignorePositionClasses.end();
00137 ++it )
00138 (*it) = (*it).lower();
00139 for( QStringList::Iterator it = ignoreFocusStealingClasses.begin();
00140 it != ignoreFocusStealingClasses.end();
00141 ++it )
00142 (*it) = (*it).lower();
00143
00144
00145 config->setGroup( "MouseBindings");
00146 CmdActiveTitlebar1 = mouseCommand(config->readEntry("CommandActiveTitlebar1","Raise"), true );
00147 CmdActiveTitlebar2 = mouseCommand(config->readEntry("CommandActiveTitlebar2","Lower"), true );
00148 CmdActiveTitlebar3 = mouseCommand(config->readEntry("CommandActiveTitlebar3","Operations menu"), true );
00149 CmdInactiveTitlebar1 = mouseCommand(config->readEntry("CommandInactiveTitlebar1","Activate and raise"), true );
00150 CmdInactiveTitlebar2 = mouseCommand(config->readEntry("CommandInactiveTitlebar2","Activate and lower"), true );
00151 CmdInactiveTitlebar3 = mouseCommand(config->readEntry("CommandInactiveTitlebar3","Operations menu"), true );
00152 CmdWindow1 = mouseCommand(config->readEntry("CommandWindow1","Activate, raise and pass click"), false );
00153 CmdWindow2 = mouseCommand(config->readEntry("CommandWindow2","Activate and pass click"), false );
00154 CmdWindow3 = mouseCommand(config->readEntry("CommandWindow3","Activate and pass click"), false );
00155 CmdAllModKey = (config->readEntry("CommandAllKey","Alt") == "Meta") ? Qt::Key_Meta : Qt::Key_Alt;
00156 CmdAll1 = mouseCommand(config->readEntry("CommandAll1","Move"), false );
00157 CmdAll2 = mouseCommand(config->readEntry("CommandAll2","Toggle raise and lower"), false );
00158 CmdAll3 = mouseCommand(config->readEntry("CommandAll3","Resize"), false );
00159
00160
00161
00162
00163
00164 KConfig globalConfig("kdeglobals");
00165 globalConfig.setGroup("KDE");
00166 topmenus = globalConfig.readBoolEntry( "macStyle", false );
00167
00168 KConfig kdesktopcfg( "kdesktoprc", true );
00169 kdesktopcfg.setGroup( "Menubar" );
00170 desktop_topmenu = kdesktopcfg.readBoolEntry( "ShowMenubar", false );
00171 if( desktop_topmenu )
00172 topmenus = true;
00173
00174 QToolTip::setGloballyEnabled( d->show_tooltips );
00175
00176 return changed;
00177 }
00178
00179
00180
00181
00182
00183
00184 Options::WindowOperation Options::windowOperation(const QString &name, bool restricted )
00185 {
00186 if (name == "Move")
00187 return restricted ? MoveOp : UnrestrictedMoveOp;
00188 else if (name == "Resize")
00189 return restricted ? ResizeOp : UnrestrictedResizeOp;
00190 else if (name == "Maximize")
00191 return MaximizeOp;
00192 else if (name == "Minimize")
00193 return MinimizeOp;
00194 else if (name == "Close")
00195 return CloseOp;
00196 else if (name == "OnAllDesktops")
00197 return OnAllDesktopsOp;
00198 else if (name == "Shade")
00199 return ShadeOp;
00200 else if (name == "Operations")
00201 return OperationsOp;
00202 else if (name == "Maximize (vertical only)")
00203 return VMaximizeOp;
00204 else if (name == "Maximize (horizontal only)")
00205 return HMaximizeOp;
00206 else if (name == "Lower")
00207 return LowerOp;
00208 return NoOp;
00209 }
00210
00211 Options::MouseCommand Options::mouseCommand(const QString &name, bool restricted )
00212 {
00213 QString lowerName = name.lower();
00214 if (lowerName == "raise") return MouseRaise;
00215 if (lowerName == "lower") return MouseLower;
00216 if (lowerName == "operations menu") return MouseOperationsMenu;
00217 if (lowerName == "toggle raise and lower") return MouseToggleRaiseAndLower;
00218 if (lowerName == "activate and raise") return MouseActivateAndRaise;
00219 if (lowerName == "activate and lower") return MouseActivateAndLower;
00220 if (lowerName == "activate") return MouseActivate;
00221 if (lowerName == "activate, raise and pass click") return MouseActivateRaiseAndPassClick;
00222 if (lowerName == "activate and pass click") return MouseActivateAndPassClick;
00223 if (lowerName == "activate, raise and move")
00224 return restricted ? MouseActivateRaiseAndMove : MouseActivateRaiseAndUnrestrictedMove;
00225 if (lowerName == "move") return restricted ? MouseMove : MouseUnrestrictedMove;
00226 if (lowerName == "resize") return restricted ? MouseResize : MouseUnrestrictedResize;
00227 if (lowerName == "shade") return MouseShade;
00228 if (lowerName == "minimize") return MouseMinimize;
00229 if (lowerName == "nothing") return MouseNothing;
00230 return MouseNothing;
00231 }
00232
00233 bool Options::showGeometryTip()
00234 {
00235 return show_geometry_tip;
00236 }
00237
00238 int Options::electricBorders()
00239 {
00240 return electric_borders;
00241 }
00242
00243 int Options::electricBorderDelay()
00244 {
00245 return electric_border_delay;
00246 }
00247
00248 bool Options::checkIgnoreFocusStealing( const Client* c )
00249 {
00250 return ignoreFocusStealingClasses.contains(QString::fromLatin1(c->resourceClass()));
00251 }
00252
00253 }
This file is part of the documentation for kwin Library Version 3.2.2.