2007-11-27 19:40:25 +00:00
|
|
|
/********************************************************************
|
2007-04-29 17:35:43 +00:00
|
|
|
KWin - the KDE window manager
|
|
|
|
This file is part of the KDE project.
|
|
|
|
|
|
|
|
Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
|
|
|
|
Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
|
2007-11-27 19:40:25 +00:00
|
|
|
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.
|
|
|
|
|
|
|
|
This program 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 General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*********************************************************************/
|
2007-04-29 17:35:43 +00:00
|
|
|
|
|
|
|
#include "options.h"
|
|
|
|
|
|
|
|
#ifndef KCMRULES
|
|
|
|
|
|
|
|
#include <QPalette>
|
|
|
|
#include <QPixmap>
|
2010-11-27 15:27:54 +00:00
|
|
|
#include <QProcess>
|
2007-04-29 17:35:43 +00:00
|
|
|
#include <kapplication.h>
|
|
|
|
#include <kconfig.h>
|
|
|
|
#include <kglobal.h>
|
|
|
|
#include <kglobalsettings.h>
|
2010-11-27 22:09:08 +00:00
|
|
|
#include <klocale.h>
|
2007-04-29 17:35:43 +00:00
|
|
|
|
|
|
|
#include <QDesktopWidget>
|
|
|
|
|
|
|
|
#include "client.h"
|
2007-09-18 13:59:06 +00:00
|
|
|
#include "compositingprefs.h"
|
2010-12-03 21:13:43 +00:00
|
|
|
#include "lib/kwinglplatform.h"
|
2007-04-29 17:35:43 +00:00
|
|
|
|
2008-11-15 11:38:26 +00:00
|
|
|
#include <kephal/screens.h>
|
|
|
|
|
2010-11-27 15:27:54 +00:00
|
|
|
#ifdef HAVE_XRANDR
|
|
|
|
#include <X11/extensions/Xrandr.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
namespace KWin
|
|
|
|
{
|
|
|
|
|
|
|
|
#ifndef KCMRULES
|
|
|
|
|
2010-11-27 15:27:54 +00:00
|
|
|
int currentRefreshRate()
|
|
|
|
{
|
|
|
|
int rate = -1;
|
|
|
|
if( options->refreshRate > 0 ) // use manually configured refresh rate
|
|
|
|
rate = options->refreshRate;
|
2010-12-03 21:13:43 +00:00
|
|
|
else if ( GLPlatform::instance()->driver() == Driver_NVidia )
|
2010-11-27 15:27:54 +00:00
|
|
|
{
|
|
|
|
QProcess nvidia_settings;
|
|
|
|
nvidia_settings.start( "nvidia-settings", QStringList() << "-t" << "-q" << "RefreshRate", QIODevice::ReadOnly );
|
|
|
|
nvidia_settings.waitForFinished();
|
|
|
|
if ( nvidia_settings.exitStatus() == QProcess::NormalExit )
|
|
|
|
{
|
|
|
|
QString reply = QString::fromLocal8Bit( nvidia_settings.readAllStandardOutput() );
|
|
|
|
bool ok;
|
2010-11-27 22:09:08 +00:00
|
|
|
rate = reply.split(' ').first().split(KGlobal::locale()->decimalSymbol()).first().toUInt( &ok );
|
2010-11-27 15:27:54 +00:00
|
|
|
if ( !ok )
|
|
|
|
rate = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#ifdef HAVE_XRANDR
|
|
|
|
else if( Extensions::randrAvailable() )
|
|
|
|
{
|
|
|
|
XRRScreenConfiguration *config = XRRGetScreenInfo( display(), rootWindow() );
|
|
|
|
rate = XRRConfigCurrentRate( config );
|
|
|
|
XRRFreeScreenConfigInfo( config );
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// 0Hz or less is invalid, so we fallback to a default rate
|
|
|
|
if( rate <= 0 )
|
|
|
|
rate = 50;
|
|
|
|
// QTimer gives us 1msec (1000Hz) at best, so we ignore anything higher;
|
|
|
|
// however, additional throttling prevents very high rates from taking place anyway
|
|
|
|
else if( rate > 1000 )
|
|
|
|
rate = 1000;
|
|
|
|
kDebug( 1212 ) << "Refresh rate " << rate << "Hz";
|
|
|
|
return rate;
|
|
|
|
}
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
Options::Options()
|
2008-12-08 05:08:31 +00:00
|
|
|
: electric_borders( 0 )
|
|
|
|
, electric_border_delay( 0 )
|
2007-04-29 17:35:43 +00:00
|
|
|
{
|
|
|
|
updateSettings();
|
|
|
|
}
|
|
|
|
|
|
|
|
Options::~Options()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned long Options::updateSettings()
|
|
|
|
{
|
2008-12-08 05:08:31 +00:00
|
|
|
KSharedConfig::Ptr _config = KGlobal::config();
|
2009-12-04 08:50:13 +00:00
|
|
|
unsigned long changed = 0;
|
|
|
|
changed |= KDecorationOptions::updateSettings( _config.data() ); // read decoration settings
|
2007-04-29 17:35:43 +00:00
|
|
|
|
2008-12-08 05:08:31 +00:00
|
|
|
KConfigGroup config( _config, "Windows" );
|
2007-04-29 17:35:43 +00:00
|
|
|
moveMode = stringToMoveResizeMode( config.readEntry("MoveMode", "Opaque" ));
|
|
|
|
resizeMode = stringToMoveResizeMode( config.readEntry("ResizeMode", "Opaque" ));
|
|
|
|
show_geometry_tip = config.readEntry("GeometryTip", false);
|
|
|
|
|
|
|
|
QString val;
|
|
|
|
|
|
|
|
val = config.readEntry ("FocusPolicy", "ClickToFocus");
|
|
|
|
focusPolicy = ClickToFocus; // what a default :-)
|
|
|
|
if ( val == "FocusFollowsMouse" )
|
|
|
|
focusPolicy = FocusFollowsMouse;
|
|
|
|
else if ( val == "FocusUnderMouse" )
|
|
|
|
focusPolicy = FocusUnderMouse;
|
|
|
|
else if ( val == "FocusStrictlyUnderMouse" )
|
|
|
|
focusPolicy = FocusStrictlyUnderMouse;
|
|
|
|
|
|
|
|
val = config.readEntry ("AltTabStyle", "KDE");
|
|
|
|
altTabStyle = KDE; // what a default :-)
|
|
|
|
if ( val == "CDE" )
|
|
|
|
altTabStyle = CDE;
|
2008-11-25 01:45:09 +00:00
|
|
|
|
2007-11-21 15:54:06 +00:00
|
|
|
separateScreenFocus = config.readEntry( "SeparateScreenFocus", false );
|
2007-05-07 12:18:19 +00:00
|
|
|
activeMouseScreen = config.readEntry( "ActiveMouseScreen", focusPolicy != ClickToFocus );
|
2007-04-29 17:35:43 +00:00
|
|
|
|
|
|
|
rollOverDesktops = config.readEntry("RollOverDesktops", true);
|
|
|
|
|
2009-09-08 20:19:20 +00:00
|
|
|
legacyFullscreenSupport = config.readEntry( "LegacyFullscreenSupport", false );
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
// focusStealingPreventionLevel = config.readEntry( "FocusStealingPreventionLevel", 2 );
|
|
|
|
// TODO use low level for now
|
|
|
|
focusStealingPreventionLevel = config.readEntry( "FocusStealingPreventionLevel", 1 );
|
|
|
|
focusStealingPreventionLevel = qMax( 0, qMin( 4, focusStealingPreventionLevel ));
|
|
|
|
if( !focusPolicyIsReasonable()) // #48786, comments #7 and later
|
|
|
|
focusStealingPreventionLevel = 0;
|
|
|
|
|
2008-11-25 01:42:30 +00:00
|
|
|
xineramaEnabled = config.readEntry ("XineramaEnabled", true);
|
|
|
|
xineramaPlacementEnabled = config.readEntry ("XineramaPlacementEnabled", true);
|
|
|
|
xineramaMovementEnabled = config.readEntry ("XineramaMovementEnabled", true);
|
|
|
|
xineramaMaximizeEnabled = config.readEntry ("XineramaMaximizeEnabled", true);
|
|
|
|
xineramaFullscreenEnabled = config.readEntry ("XineramaFullscreenEnabled", true);
|
2007-04-29 17:35:43 +00:00
|
|
|
|
|
|
|
placement = Placement::policyFromString( config.readEntry("Placement"), true );
|
2007-05-07 12:27:19 +00:00
|
|
|
xineramaPlacementScreen = qBound( -1, config.readEntry( "XineramaPlacementScreen", -1 ),
|
2008-11-15 11:38:26 +00:00
|
|
|
Kephal::ScreenUtils::numScreens() - 1 );
|
2007-04-29 17:35:43 +00:00
|
|
|
|
|
|
|
if( focusPolicy == ClickToFocus )
|
|
|
|
{
|
|
|
|
autoRaise = false;
|
|
|
|
autoRaiseInterval = 0;
|
|
|
|
delayFocus = false;
|
|
|
|
delayFocusInterval = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
autoRaise = config.readEntry("AutoRaise", false);
|
|
|
|
autoRaiseInterval = config.readEntry("AutoRaiseInterval", 0 );
|
|
|
|
delayFocus = config.readEntry("DelayFocus", false);
|
|
|
|
delayFocusInterval = config.readEntry("DelayFocusInterval", 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
shadeHover = config.readEntry("ShadeHover", false);
|
|
|
|
shadeHoverInterval = config.readEntry("ShadeHoverInterval", 250 );
|
|
|
|
|
2010-04-25 16:43:14 +00:00
|
|
|
tilingOn = config.readEntry( "TilingOn", false );
|
2010-05-05 11:44:04 +00:00
|
|
|
tilingLayout = static_cast<TilingLayoutFactory::Layouts>(config.readEntry( "TilingDefaultLayout", 0 ));
|
2010-04-25 16:43:14 +00:00
|
|
|
tilingRaisePolicy = config.readEntry( "TilingRaisePolicy", 0 );
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
// important: autoRaise implies ClickRaise
|
|
|
|
clickRaise = autoRaise || config.readEntry("ClickRaise", true);
|
|
|
|
|
|
|
|
borderSnapZone = config.readEntry("BorderSnapZone", 10);
|
|
|
|
windowSnapZone = config.readEntry("WindowSnapZone", 10);
|
2008-07-09 15:18:47 +00:00
|
|
|
centerSnapZone = config.readEntry("CenterSnapZone", 0);
|
2007-04-29 17:35:43 +00:00
|
|
|
snapOnlyWhenOverlapping = config.readEntry("SnapOnlyWhenOverlapping", false);
|
2009-02-28 08:33:16 +00:00
|
|
|
|
|
|
|
// Electric borders
|
|
|
|
KConfigGroup borderConfig( _config, "ElectricBorders" );
|
|
|
|
electric_border_top = electricBorderAction( borderConfig.readEntry( "Top", "None" ));
|
|
|
|
electric_border_top_right = electricBorderAction( borderConfig.readEntry( "TopRight", "None" ));
|
|
|
|
electric_border_right = electricBorderAction( borderConfig.readEntry( "Right", "None" ));
|
|
|
|
electric_border_bottom_right = electricBorderAction( borderConfig.readEntry( "BottomRight", "None" ));
|
|
|
|
electric_border_bottom = electricBorderAction( borderConfig.readEntry( "Bottom", "None" ));
|
|
|
|
electric_border_bottom_left = electricBorderAction( borderConfig.readEntry( "BottomLeft", "None" ));
|
|
|
|
electric_border_left = electricBorderAction( borderConfig.readEntry( "Left", "None" ));
|
|
|
|
electric_border_top_left = electricBorderAction( borderConfig.readEntry( "TopLeft", "None" ));
|
2007-04-29 17:35:43 +00:00
|
|
|
electric_borders = config.readEntry("ElectricBorders", 0);
|
|
|
|
electric_border_delay = config.readEntry("ElectricBorderDelay", 150);
|
2009-02-28 08:33:16 +00:00
|
|
|
electric_border_cooldown = config.readEntry("ElectricBorderCooldown", 350);
|
2009-09-08 20:01:16 +00:00
|
|
|
electric_border_pushback_pixels = config.readEntry("ElectricBorderPushbackPixels", 1);
|
2009-10-27 13:11:58 +00:00
|
|
|
electric_border_maximize = config.readEntry("ElectricBorderMaximize", true);
|
|
|
|
electric_border_tiling = config.readEntry("ElectricBorderTiling", true);
|
2007-04-29 17:35:43 +00:00
|
|
|
|
2008-03-23 19:06:30 +00:00
|
|
|
OpTitlebarDblClick = windowOperation( config.readEntry("TitlebarDoubleClickCommand", "Maximize"), true );
|
2008-01-29 16:44:41 +00:00
|
|
|
setOpMaxButtonLeftClick( windowOperation( config.readEntry("MaximizeButtonLeftClickCommand", "Maximize"), true ));
|
|
|
|
setOpMaxButtonMiddleClick( windowOperation( config.readEntry("MaximizeButtonMiddleClickCommand", "Maximize (vertical only)"), true ));
|
|
|
|
setOpMaxButtonRightClick( windowOperation( config.readEntry("MaximizeButtonRightClickCommand", "Maximize (horizontal only)"), true ));
|
2007-04-29 17:35:43 +00:00
|
|
|
|
|
|
|
ignorePositionClasses = config.readEntry("IgnorePositionClasses",QStringList());
|
|
|
|
ignoreFocusStealingClasses = config.readEntry("IgnoreFocusStealingClasses",QStringList());
|
|
|
|
// Qt3.2 and older had resource class all lowercase, but Qt3.3 has it capitalized
|
|
|
|
// therefore Client::resourceClass() forces lowercase, force here lowercase as well
|
|
|
|
for( QStringList::Iterator it = ignorePositionClasses.begin();
|
|
|
|
it != ignorePositionClasses.end();
|
|
|
|
++it )
|
|
|
|
(*it) = (*it).toLower();
|
|
|
|
for( QStringList::Iterator it = ignoreFocusStealingClasses.begin();
|
|
|
|
it != ignoreFocusStealingClasses.end();
|
|
|
|
++it )
|
|
|
|
(*it) = (*it).toLower();
|
|
|
|
|
|
|
|
killPingTimeout = config.readEntry( "KillPingTimeout", 5000 );
|
|
|
|
hideUtilityWindowsForInactive = config.readEntry( "HideUtilityWindowsForInactive", true);
|
2009-11-17 11:25:03 +00:00
|
|
|
inactiveTabsSkipTaskbar = config.readEntry( "InactiveTabsSkipTaskbar", false );
|
2009-11-16 10:09:03 +00:00
|
|
|
autogroupSimilarWindows = config.readEntry( "AutogroupSimilarWindows", false );
|
2009-11-17 07:51:55 +00:00
|
|
|
autogroupInForeground = config.readEntry( "AutogroupInForeground", true );
|
2007-04-29 17:35:43 +00:00
|
|
|
showDesktopIsMinimizeAll = config.readEntry( "ShowDesktopIsMinimizeAll", false );
|
|
|
|
|
2009-09-21 11:15:28 +00:00
|
|
|
borderless_maximized_windows = config.readEntry( "BorderlessMaximizedWindows", false );
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
// Mouse bindings
|
2008-12-08 05:08:31 +00:00
|
|
|
config = KConfigGroup( _config, "MouseBindings" );
|
2007-04-29 17:35:43 +00:00
|
|
|
CmdActiveTitlebar1 = mouseCommand(config.readEntry("CommandActiveTitlebar1","Raise"), true );
|
2009-11-17 07:17:49 +00:00
|
|
|
CmdActiveTitlebar2 = mouseCommand(config.readEntry("CommandActiveTitlebar2","Start Window Tab Drag"), true );
|
2007-04-29 17:35:43 +00:00
|
|
|
CmdActiveTitlebar3 = mouseCommand(config.readEntry("CommandActiveTitlebar3","Operations menu"), true );
|
|
|
|
CmdInactiveTitlebar1 = mouseCommand(config.readEntry("CommandInactiveTitlebar1","Activate and raise"), true );
|
2009-11-17 07:17:49 +00:00
|
|
|
CmdInactiveTitlebar2 = mouseCommand(config.readEntry("CommandInactiveTitlebar2","Start Window Tab Drag"), true );
|
2007-04-29 17:35:43 +00:00
|
|
|
CmdInactiveTitlebar3 = mouseCommand(config.readEntry("CommandInactiveTitlebar3","Operations menu"), true );
|
2009-11-17 08:46:20 +00:00
|
|
|
CmdTitlebarWheel = mouseWheelCommand(config.readEntry("CommandTitlebarWheel","Switch to Window Tab to the Left/Right"));
|
2007-04-29 17:35:43 +00:00
|
|
|
CmdWindow1 = mouseCommand(config.readEntry("CommandWindow1","Activate, raise and pass click"), false );
|
|
|
|
CmdWindow2 = mouseCommand(config.readEntry("CommandWindow2","Activate and pass click"), false );
|
|
|
|
CmdWindow3 = mouseCommand(config.readEntry("CommandWindow3","Activate and pass click"), false );
|
2009-05-06 06:38:54 +00:00
|
|
|
CmdWindowWheel = mouseCommand(config.readEntry("CommandWindowWheel", "Scroll"), false);
|
2007-04-29 17:35:43 +00:00
|
|
|
CmdAllModKey = (config.readEntry("CommandAllKey","Alt") == "Meta") ? Qt::Key_Meta : Qt::Key_Alt;
|
|
|
|
CmdAll1 = mouseCommand(config.readEntry("CommandAll1","Move"), false );
|
|
|
|
CmdAll2 = mouseCommand(config.readEntry("CommandAll2","Toggle raise and lower"), false );
|
|
|
|
CmdAll3 = mouseCommand(config.readEntry("CommandAll3","Resize"), false );
|
|
|
|
CmdAllWheel = mouseWheelCommand(config.readEntry("CommandAllWheel","Nothing"));
|
|
|
|
|
2008-12-08 05:08:31 +00:00
|
|
|
config=KConfigGroup(_config,"Compositing");
|
|
|
|
refreshRate = config.readEntry( "RefreshRate", 0 );
|
|
|
|
|
|
|
|
// Read button tooltip animation effect from kdeglobals
|
|
|
|
// Since we want to allow users to enable window decoration tooltips
|
|
|
|
// and not kstyle tooltips and vise-versa, we don't read the
|
|
|
|
// "EffectNoTooltip" setting from kdeglobals.
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
FIXME: we have no mac style menu implementation in kwin anymore, so this just breaks
|
|
|
|
things for people!
|
|
|
|
KConfig _globalConfig("kdeglobals");
|
|
|
|
KConfigGroup globalConfig(&_globalConfig, "KDE");
|
|
|
|
topmenus = globalConfig.readEntry("macStyle", false);
|
|
|
|
#else
|
|
|
|
topmenus = false;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// QToolTip::setGloballyEnabled( d->show_tooltips );
|
|
|
|
// KDE4 this probably needs to be done manually in clients
|
|
|
|
|
2007-09-25 09:41:23 +00:00
|
|
|
// Driver-specific config detection
|
2009-11-29 22:11:49 +00:00
|
|
|
reloadCompositingSettings();
|
2007-09-25 09:41:23 +00:00
|
|
|
|
2008-12-08 05:08:31 +00:00
|
|
|
return changed;
|
|
|
|
}
|
2007-04-29 17:35:43 +00:00
|
|
|
|
2009-11-29 22:11:49 +00:00
|
|
|
void Options::reloadCompositingSettings()
|
2008-12-08 05:08:31 +00:00
|
|
|
{
|
|
|
|
KSharedConfig::Ptr _config = KGlobal::config();
|
|
|
|
KConfigGroup config(_config, "Compositing");
|
2007-09-18 13:59:06 +00:00
|
|
|
|
2009-12-04 09:40:12 +00:00
|
|
|
// do not even detect compositing preferences if explicitly disabled
|
2010-03-31 12:29:04 +00:00
|
|
|
bool environmentForce = false;
|
|
|
|
if( getenv( "KWIN_COMPOSE" ))
|
|
|
|
{
|
|
|
|
// if compositing is enforced by the environment variable, the preferences have to be read
|
|
|
|
const char c = getenv( "KWIN_COMPOSE" )[ 0 ];
|
|
|
|
if( c == 'X' || c == 'O' )
|
|
|
|
environmentForce = true;
|
|
|
|
}
|
|
|
|
if( config.hasKey( "Enabled" ) && !config.readEntry( "Enabled", true ) && !environmentForce )
|
2009-12-04 09:29:08 +00:00
|
|
|
{
|
2009-12-04 09:40:12 +00:00
|
|
|
useCompositing = false;
|
2009-11-29 20:40:22 +00:00
|
|
|
return;
|
2009-12-04 09:40:12 +00:00
|
|
|
}
|
|
|
|
// Compositing settings
|
|
|
|
CompositingPrefs prefs;
|
|
|
|
prefs.detect();
|
2010-12-03 21:13:43 +00:00
|
|
|
|
2009-12-04 09:40:12 +00:00
|
|
|
useCompositing = config.readEntry( "Enabled" , prefs.recommendCompositing());
|
2009-11-29 22:11:49 +00:00
|
|
|
|
2007-09-18 13:59:06 +00:00
|
|
|
QString compositingBackend = config.readEntry("Backend", "OpenGL");
|
|
|
|
if( compositingBackend == "XRender" )
|
|
|
|
compositingMode = XRenderCompositing;
|
|
|
|
else
|
|
|
|
compositingMode = OpenGLCompositing;
|
2008-09-12 10:26:19 +00:00
|
|
|
disableCompositingChecks = config.readEntry("DisableChecks", false);
|
2007-09-18 13:59:06 +00:00
|
|
|
QString glmode = config.readEntry("GLMode", "TFP" ).toUpper();
|
|
|
|
if( glmode == "TFP" )
|
|
|
|
glMode = GLTFP;
|
|
|
|
else if( glmode == "SHM" )
|
|
|
|
glMode = GLSHM;
|
|
|
|
else
|
|
|
|
glMode = GLFallback;
|
|
|
|
glDirect = config.readEntry("GLDirect", prefs.enableDirectRendering() );
|
|
|
|
glVSync = config.readEntry("GLVSync", prefs.enableVSync() );
|
2010-11-11 19:53:19 +00:00
|
|
|
glSmoothScale = qBound( -1, config.readEntry( "GLTextureFilter", 2 ), 2 );
|
2007-10-17 15:37:14 +00:00
|
|
|
glStrictBinding = config.readEntry( "GLStrictBinding", prefs.strictBinding());
|
2007-09-21 13:27:56 +00:00
|
|
|
|
|
|
|
xrenderSmoothScale = config.readEntry("XRenderSmoothScale", false );
|
2007-11-13 16:40:28 +00:00
|
|
|
|
2008-08-12 11:02:58 +00:00
|
|
|
hiddenPreviews = HiddenPreviewsShown;
|
2008-10-01 17:27:12 +00:00
|
|
|
// 4 - off, 5 - shown, 6 - always, other are old values
|
|
|
|
int hps = config.readEntry( "HiddenPreviews", 5 );
|
|
|
|
if( hps == 4 )
|
2008-08-12 11:02:58 +00:00
|
|
|
hiddenPreviews = HiddenPreviewsNever;
|
2008-10-01 17:27:12 +00:00
|
|
|
else if( hps == 5 )
|
2008-08-12 11:02:58 +00:00
|
|
|
hiddenPreviews = HiddenPreviewsShown;
|
2008-10-01 17:27:12 +00:00
|
|
|
else if( hps == 6 )
|
2008-08-12 11:02:58 +00:00
|
|
|
hiddenPreviews = HiddenPreviewsAlways;
|
2008-11-25 01:45:09 +00:00
|
|
|
|
2008-08-24 13:32:57 +00:00
|
|
|
unredirectFullscreen = config.readEntry( "UnredirectFullscreen", true );
|
2008-08-30 07:25:54 +00:00
|
|
|
animationSpeed = qBound( 0, config.readEntry( "AnimationSpeed", 3 ), 6 );
|
2007-09-18 13:59:06 +00:00
|
|
|
}
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
|
2009-02-28 08:33:16 +00:00
|
|
|
ElectricBorderAction Options::electricBorderAction( const QString& name )
|
|
|
|
{
|
|
|
|
QString lowerName = name.toLower();
|
|
|
|
if( lowerName == "dashboard" ) return ElectricActionDashboard;
|
2009-06-28 20:32:50 +00:00
|
|
|
else if( lowerName == "showdesktop" ) return ElectricActionShowDesktop;
|
2010-03-10 22:25:20 +00:00
|
|
|
else if( lowerName == "lockscreen" ) return ElectricActionLockScreen;
|
2010-11-10 18:16:20 +00:00
|
|
|
else if( lowerName == "preventscreenlocking" ) return ElectricActionPreventScreenLocking;
|
2009-02-28 08:33:16 +00:00
|
|
|
return ElectricActionNone;
|
|
|
|
}
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
// restricted should be true for operations that the user may not be able to repeat
|
|
|
|
// if the window is moved out of the workspace (e.g. if the user moves a window
|
|
|
|
// by the titlebar, and moves it too high beneath Kicker at the top edge, they
|
|
|
|
// may not be able to move it back, unless they know about Alt+LMB)
|
|
|
|
Options::WindowOperation Options::windowOperation(const QString &name, bool restricted )
|
|
|
|
{
|
|
|
|
if (name == "Move")
|
|
|
|
return restricted ? MoveOp : UnrestrictedMoveOp;
|
|
|
|
else if (name == "Resize")
|
|
|
|
return restricted ? ResizeOp : UnrestrictedResizeOp;
|
|
|
|
else if (name == "Maximize")
|
|
|
|
return MaximizeOp;
|
|
|
|
else if (name == "Minimize")
|
|
|
|
return MinimizeOp;
|
|
|
|
else if (name == "Close")
|
|
|
|
return CloseOp;
|
|
|
|
else if (name == "OnAllDesktops")
|
|
|
|
return OnAllDesktopsOp;
|
|
|
|
else if (name == "Shade")
|
|
|
|
return ShadeOp;
|
|
|
|
else if (name == "Operations")
|
|
|
|
return OperationsOp;
|
|
|
|
else if (name == "Maximize (vertical only)")
|
|
|
|
return VMaximizeOp;
|
|
|
|
else if (name == "Maximize (horizontal only)")
|
|
|
|
return HMaximizeOp;
|
|
|
|
else if (name == "Lower")
|
|
|
|
return LowerOp;
|
|
|
|
return NoOp;
|
|
|
|
}
|
|
|
|
|
|
|
|
Options::MouseCommand Options::mouseCommand(const QString &name, bool restricted )
|
|
|
|
{
|
|
|
|
QString lowerName = name.toLower();
|
|
|
|
if (lowerName == "raise") return MouseRaise;
|
|
|
|
if (lowerName == "lower") return MouseLower;
|
|
|
|
if (lowerName == "operations menu") return MouseOperationsMenu;
|
|
|
|
if (lowerName == "toggle raise and lower") return MouseToggleRaiseAndLower;
|
|
|
|
if (lowerName == "activate and raise") return MouseActivateAndRaise;
|
|
|
|
if (lowerName == "activate and lower") return MouseActivateAndLower;
|
|
|
|
if (lowerName == "activate") return MouseActivate;
|
|
|
|
if (lowerName == "activate, raise and pass click") return MouseActivateRaiseAndPassClick;
|
|
|
|
if (lowerName == "activate and pass click") return MouseActivateAndPassClick;
|
2009-05-06 06:38:54 +00:00
|
|
|
if (lowerName == "scroll") return MouseNothing;
|
|
|
|
if (lowerName == "activate and scroll") return MouseActivateAndPassClick;
|
|
|
|
if (lowerName == "activate, raise and scroll") return MouseActivateRaiseAndPassClick;
|
2007-04-29 17:35:43 +00:00
|
|
|
if (lowerName == "activate, raise and move")
|
|
|
|
return restricted ? MouseActivateRaiseAndMove : MouseActivateRaiseAndUnrestrictedMove;
|
|
|
|
if (lowerName == "move") return restricted ? MouseMove : MouseUnrestrictedMove;
|
|
|
|
if (lowerName == "resize") return restricted ? MouseResize : MouseUnrestrictedResize;
|
|
|
|
if (lowerName == "shade") return MouseShade;
|
|
|
|
if (lowerName == "minimize") return MouseMinimize;
|
2009-11-17 07:17:49 +00:00
|
|
|
if (lowerName == "start window tab drag") return MouseClientGroupDrag;
|
2009-08-25 04:10:11 +00:00
|
|
|
if (lowerName == "close") return MouseClose;
|
2007-04-29 17:35:43 +00:00
|
|
|
if (lowerName == "nothing") return MouseNothing;
|
|
|
|
return MouseNothing;
|
|
|
|
}
|
|
|
|
|
|
|
|
Options::MouseWheelCommand Options::mouseWheelCommand(const QString &name)
|
|
|
|
{
|
|
|
|
QString lowerName = name.toLower();
|
|
|
|
if (lowerName == "raise/lower") return MouseWheelRaiseLower;
|
|
|
|
if (lowerName == "shade/unshade") return MouseWheelShadeUnshade;
|
|
|
|
if (lowerName == "maximize/restore") return MouseWheelMaximizeRestore;
|
|
|
|
if (lowerName == "above/below") return MouseWheelAboveBelow;
|
|
|
|
if (lowerName == "previous/next desktop") return MouseWheelPreviousNextDesktop;
|
|
|
|
if (lowerName == "change opacity") return MouseWheelChangeOpacity;
|
2009-11-17 08:46:20 +00:00
|
|
|
if (lowerName == "switch to window tab to the left/right") return MouseWheelChangeGroupWindow;
|
|
|
|
if (lowerName == "nothing") return MouseWheelNothing;
|
|
|
|
return MouseWheelChangeGroupWindow;
|
2007-04-29 17:35:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool Options::showGeometryTip()
|
|
|
|
{
|
|
|
|
return show_geometry_tip;
|
|
|
|
}
|
|
|
|
|
2009-02-28 08:33:16 +00:00
|
|
|
ElectricBorderAction Options::electricBorderAction( ElectricBorder edge )
|
|
|
|
{
|
|
|
|
switch( edge )
|
|
|
|
{
|
|
|
|
case ElectricTop:
|
|
|
|
return electric_border_top;
|
|
|
|
case ElectricTopRight:
|
|
|
|
return electric_border_top_right;
|
|
|
|
case ElectricRight:
|
|
|
|
return electric_border_right;
|
|
|
|
case ElectricBottomRight:
|
|
|
|
return electric_border_bottom_right;
|
|
|
|
case ElectricBottom:
|
|
|
|
return electric_border_bottom;
|
|
|
|
case ElectricBottomLeft:
|
|
|
|
return electric_border_bottom_left;
|
|
|
|
case ElectricLeft:
|
|
|
|
return electric_border_left;
|
|
|
|
case ElectricTopLeft:
|
|
|
|
return electric_border_top_left;
|
2009-09-11 23:44:29 +00:00
|
|
|
default:
|
|
|
|
// fallthrough
|
|
|
|
break;
|
2009-02-28 08:33:16 +00:00
|
|
|
}
|
|
|
|
return ElectricActionNone;
|
|
|
|
}
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
int Options::electricBorders()
|
|
|
|
{
|
|
|
|
return electric_borders;
|
|
|
|
}
|
|
|
|
|
|
|
|
int Options::electricBorderDelay()
|
|
|
|
{
|
|
|
|
return electric_border_delay;
|
|
|
|
}
|
|
|
|
|
2009-02-28 08:33:16 +00:00
|
|
|
int Options::electricBorderCooldown()
|
|
|
|
{
|
|
|
|
return electric_border_cooldown;
|
|
|
|
}
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
bool Options::checkIgnoreFocusStealing( const Client* c )
|
|
|
|
{
|
|
|
|
return ignoreFocusStealingClasses.contains(QString::fromLatin1(c->resourceClass()));
|
|
|
|
}
|
|
|
|
|
|
|
|
Options::MouseCommand Options::wheelToMouseCommand( MouseWheelCommand com, int delta )
|
|
|
|
{
|
|
|
|
switch( com )
|
|
|
|
{
|
|
|
|
case MouseWheelRaiseLower:
|
|
|
|
return delta > 0 ? MouseRaise : MouseLower;
|
|
|
|
case MouseWheelShadeUnshade:
|
|
|
|
return delta > 0 ? MouseSetShade : MouseUnsetShade;
|
|
|
|
case MouseWheelMaximizeRestore:
|
|
|
|
return delta > 0 ? MouseMaximize : MouseRestore;
|
|
|
|
case MouseWheelAboveBelow:
|
|
|
|
return delta > 0 ? MouseAbove : MouseBelow;
|
|
|
|
case MouseWheelPreviousNextDesktop:
|
|
|
|
return delta > 0 ? MousePreviousDesktop : MouseNextDesktop;
|
|
|
|
case MouseWheelChangeOpacity:
|
|
|
|
return delta > 0 ? MouseOpacityMore : MouseOpacityLess;
|
2009-11-15 12:34:46 +00:00
|
|
|
case MouseWheelChangeGroupWindow:
|
|
|
|
return delta > 0 ? MouseLeftGroupWindow : MouseRightGroupWindow;
|
2007-04-29 17:35:43 +00:00
|
|
|
default:
|
|
|
|
return MouseNothing;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
Options::MoveResizeMode Options::stringToMoveResizeMode( const QString& s )
|
|
|
|
{
|
|
|
|
return s == "Opaque" ? Opaque : Transparent;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char* Options::moveResizeModeToString( MoveResizeMode mode )
|
|
|
|
{
|
|
|
|
return mode == Opaque ? "Opaque" : "Transparent";
|
|
|
|
}
|
|
|
|
|
2008-08-30 07:25:54 +00:00
|
|
|
double Options::animationTimeFactor() const
|
|
|
|
{
|
|
|
|
const double factors[] = { 0, 0.2, 0.5, 1, 2, 4, 20 };
|
|
|
|
return factors[ animationSpeed ];
|
|
|
|
}
|
|
|
|
|
2007-04-29 17:35:43 +00:00
|
|
|
} // namespace
|