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()) switch( e->key())
{ // Wrap only on autorepeat { // Wrap only on autorepeat
case Qt::Key_Left: case Qt::Key_Left:
setHighlightedDesktop( effects->desktopToLeft( highlightedDesktop, !e->isAutoRepeat())); setHighlightedDesktop( desktopToLeft( highlightedDesktop, !e->isAutoRepeat()));
break; break;
case Qt::Key_Right: case Qt::Key_Right:
setHighlightedDesktop( effects->desktopToRight( highlightedDesktop, !e->isAutoRepeat())); setHighlightedDesktop( desktopToRight( highlightedDesktop, !e->isAutoRepeat()));
break; break;
case Qt::Key_Up: case Qt::Key_Up:
setHighlightedDesktop( effects->desktopUp( highlightedDesktop, !e->isAutoRepeat())); setHighlightedDesktop( desktopUp( highlightedDesktop, !e->isAutoRepeat()));
break; break;
case Qt::Key_Down: case Qt::Key_Down:
setHighlightedDesktop( effects->desktopDown( highlightedDesktop, !e->isAutoRepeat())); setHighlightedDesktop( desktopDown( highlightedDesktop, !e->isAutoRepeat()));
break; break;
case Qt::Key_Escape: case Qt::Key_Escape:
setActive( false ); setActive( false );
@ -577,6 +577,122 @@ void DesktopGridEffect::setHighlightedDesktop( int d )
effects->addRepaintFull(); 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 // Activation

View file

@ -58,6 +58,10 @@ class DesktopGridEffect
EffectWindow* windowAt( QPoint pos ) const; EffectWindow* windowAt( QPoint pos ) const;
void setCurrentDesktop( int desktop ); void setCurrentDesktop( int desktop );
void setHighlightedDesktop( 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 setActive( bool active );
void setup(); void setup();
void finish(); void finish();