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:
parent
1fb0e16b47
commit
e0a4d8e5e9
2 changed files with 124 additions and 4 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue