Use the correct desktop layout when navigating the desktop grid with the

cursor keys.
BUG: 176498

svn path=/trunk/KDE/kdebase/workspace/; revision=896318
This commit is contained in:
Lucas Murray 2008-12-13 09:20:02 +00:00
parent 1fb0e16b47
commit e0a4d8e5e9
2 changed files with 124 additions and 4 deletions

View file

@ -374,16 +374,16 @@ void DesktopGridEffect::grabbedKeyboardEvent( QKeyEvent* e )
switch( e->key())
{ // Wrap only on autorepeat
case Qt::Key_Left:
setHighlightedDesktop( effects->desktopToLeft( highlightedDesktop, !e->isAutoRepeat()));
setHighlightedDesktop( desktopToLeft( highlightedDesktop, !e->isAutoRepeat()));
break;
case Qt::Key_Right:
setHighlightedDesktop( effects->desktopToRight( highlightedDesktop, !e->isAutoRepeat()));
setHighlightedDesktop( desktopToRight( highlightedDesktop, !e->isAutoRepeat()));
break;
case Qt::Key_Up:
setHighlightedDesktop( effects->desktopUp( highlightedDesktop, !e->isAutoRepeat()));
setHighlightedDesktop( desktopUp( highlightedDesktop, !e->isAutoRepeat()));
break;
case Qt::Key_Down:
setHighlightedDesktop( effects->desktopDown( highlightedDesktop, !e->isAutoRepeat()));
setHighlightedDesktop( desktopDown( highlightedDesktop, !e->isAutoRepeat()));
break;
case Qt::Key_Escape:
setActive( false );
@ -577,6 +577,122 @@ void DesktopGridEffect::setHighlightedDesktop( int d )
effects->addRepaintFull();
}
int DesktopGridEffect::desktopToRight( int desktop, bool wrap ) const
{ // Copied from Workspace::desktopToRight()
int dt = desktop - 1;
if( orientation == Qt::Vertical )
{
dt += gridSize.height();
if( dt >= effects->numberOfDesktops() )
{
if( wrap )
dt -= effects->numberOfDesktops();
else
return desktop;
}
}
else
{
int d = ( dt % gridSize.width() ) + 1;
if( d >= gridSize.width() )
{
if( wrap )
d -= gridSize.width();
else
return desktop;
}
dt = dt - ( dt % gridSize.width() ) + d;
}
return dt + 1;
}
int DesktopGridEffect::desktopToLeft( int desktop, bool wrap ) const
{ // Copied from Workspace::desktopToLeft()
int dt = desktop - 1;
if( orientation == Qt::Vertical )
{
dt -= gridSize.height();
if( dt < 0 )
{
if( wrap )
dt += effects->numberOfDesktops();
else
return desktop;
}
}
else
{
int d = ( dt % gridSize.width() ) - 1;
if( d < 0 )
{
if( wrap )
d += gridSize.width();
else
return desktop;
}
dt = dt - ( dt % gridSize.width() ) + d;
}
return dt + 1;
}
int DesktopGridEffect::desktopUp( int desktop, bool wrap ) const
{ // Copied from Workspace::desktopUp()
int dt = desktop - 1;
if( orientation == Qt::Horizontal )
{
dt -= gridSize.width();
if( dt < 0 )
{
if( wrap )
dt += effects->numberOfDesktops();
else
return desktop;
}
}
else
{
int d = ( dt % gridSize.height() ) - 1;
if( d < 0 )
{
if( wrap )
d += gridSize.height();
else
return desktop;
}
dt = dt - ( dt % gridSize.height() ) + d;
}
return dt + 1;
}
int DesktopGridEffect::desktopDown( int desktop, bool wrap ) const
{ // Copied from Workspace::desktopDown()
int dt = desktop - 1;
if( orientation == Qt::Horizontal )
{
dt += gridSize.width();
if( dt >= effects->numberOfDesktops() )
{
if( wrap )
dt -= effects->numberOfDesktops();
else
return desktop;
}
}
else
{
int d = ( dt % gridSize.height() ) + 1;
if( d >= gridSize.height() )
{
if( wrap )
d -= gridSize.height();
else
return desktop;
}
dt = dt - ( dt % gridSize.height() ) + d;
}
return dt + 1;
}
//-----------------------------------------------------------------------------
// Activation

View file

@ -58,6 +58,10 @@ class DesktopGridEffect
EffectWindow* windowAt( QPoint pos ) const;
void setCurrentDesktop( int desktop );
void setHighlightedDesktop( int desktop );
int desktopToRight( int desktop, bool wrap = true ) const;
int desktopToLeft( int desktop, bool wrap = true ) const;
int desktopUp( int desktop, bool wrap = true ) const;
int desktopDown( int desktop, bool wrap = true ) const;
void setActive( bool active );
void setup();
void finish();