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())
|
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
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue