diff --git a/effects/desktopgrid.cpp b/effects/desktopgrid.cpp
index a468dc563f..f53798f20f 100644
--- a/effects/desktopgrid.cpp
+++ b/effects/desktopgrid.cpp
@@ -71,7 +71,7 @@ DesktopGridEffect::DesktopGridEffect()
border = conf.readEntry( "BorderWidth", 10 );
desktopNameAlignment = Qt::Alignment( conf.readEntry( "DesktopNameAlignment", 0 ));
- customLayout = conf.readEntry( "CustomLayout", 0 ) ? true : false;
+ layoutMode = conf.readEntry( "LayoutMode", int( LayoutPager ));
customLayoutRows = conf.readEntry( "CustomLayoutRows", 2 );
}
@@ -602,11 +602,28 @@ void DesktopGridEffect::setup()
hoverTimeline[effects->currentDesktop() - 1].setProgress( 1.0 );
// We need these variables for every paint so lets cache them
- effects->calcDesktopLayout( &gridSize.rwidth(), &gridSize.rheight(), &orientation );
- if( customLayout )
+ int x, y;
+ int numDesktops = effects->numberOfDesktops();
+ switch( layoutMode )
{
- gridSize.setWidth( ceil( effects->numberOfDesktops() / double( customLayoutRows )));
- gridSize.setHeight( customLayoutRows );
+ default:
+ case LayoutPager:
+ effects->calcDesktopLayout( &gridSize.rwidth(), &gridSize.rheight(), &orientation );
+ break;
+ case LayoutAutomatic:
+ y = sqrt( numDesktops ) + 0.5;
+ x = float( numDesktops ) / float( y ) + 0.5;
+ if( x * y < numDesktops )
+ x++;
+ orientation = Qt::Horizontal;
+ gridSize.setWidth( x );
+ gridSize.setHeight( y );
+ break;
+ case LayoutCustom:
+ effects->calcDesktopLayout( &gridSize.rwidth(), &gridSize.rheight(), &orientation );
+ gridSize.setWidth( ceil( effects->numberOfDesktops() / double( customLayoutRows )));
+ gridSize.setHeight( customLayoutRows );
+ break;
}
setCurrentDesktop( effects->currentDesktop() );
scale.clear();
diff --git a/effects/desktopgrid.h b/effects/desktopgrid.h
index 945755f741..215bf82ae1 100644
--- a/effects/desktopgrid.h
+++ b/effects/desktopgrid.h
@@ -44,8 +44,12 @@ class DesktopGridEffect
virtual void windowInputMouseEvent( Window w, QEvent* e );
virtual void grabbedKeyboardEvent( QKeyEvent* e );
virtual bool borderActivated( ElectricBorder border );
+
+ enum { LayoutPager, LayoutAutomatic, LayoutCustom }; // Layout modes
+
private slots:
void toggle();
+
private:
QPointF scalePos( const QPoint& pos, int desktop, int screen = -1 ) const;
QPoint unscalePos( const QPoint& pos, int* desktop = NULL ) const;
@@ -61,7 +65,7 @@ class DesktopGridEffect
int zoomDuration;
int border;
Qt::Alignment desktopNameAlignment;
- bool customLayout;
+ int layoutMode;
int customLayoutRows;
bool activated;
diff --git a/effects/desktopgrid_config.cpp b/effects/desktopgrid_config.cpp
index c04b96941f..8663910950 100644
--- a/effects/desktopgrid_config.cpp
+++ b/effects/desktopgrid_config.cpp
@@ -95,8 +95,8 @@ DesktopGridEffectConfig::DesktopGridEffectConfig(QWidget* parent, const QVariant
connect( m_ui->zoomDurationSpin, SIGNAL( valueChanged( int )), this, SLOT( changed() ));
connect( m_ui->borderWidthSpin, SIGNAL( valueChanged( int )), this, SLOT( changed() ));
connect( m_ui->desktopNameAlignmentCombo, SIGNAL( currentIndexChanged( int )), this, SLOT( changed() ));
- connect( m_ui->layoutBox, SIGNAL( stateChanged( int )), this, SLOT( changed() ));
- connect( m_ui->layoutBox, SIGNAL( stateChanged( int )), this, SLOT( layoutSelectionChanged() ));
+ connect( m_ui->layoutCombo, SIGNAL( currentIndexChanged( int )), this, SLOT( changed() ));
+ connect( m_ui->layoutCombo, SIGNAL( currentIndexChanged( int )), this, SLOT( layoutSelectionChanged() ));
connect( m_ui->layoutRowsSpin, SIGNAL( valueChanged( int )), this, SLOT( changed() ));
connect( m_ui->shortcutEditor, SIGNAL( keyChange() ), this, SLOT( changed() ));
@@ -126,10 +126,8 @@ void DesktopGridEffectConfig::load()
Qt::Alignment alignment = Qt::Alignment( conf.readEntry( "DesktopNameAlignment", 0 ));
m_ui->desktopNameAlignmentCombo->setCurrentIndex( m_alignmentItems.indexOf( alignment ));
- if( conf.readEntry( "CustomLayout", false ))
- m_ui->layoutBox->setCheckState( Qt::Checked );
- else
- m_ui->layoutBox->setCheckState( Qt::Unchecked );
+ int layoutMode = conf.readEntry( "LayoutMode", int( DesktopGridEffect::LayoutPager ));
+ m_ui->layoutCombo->setCurrentIndex( layoutMode );
layoutSelectionChanged();
m_ui->layoutRowsSpin->setValue( conf.readEntry( "CustomLayoutRows", 2 ));
@@ -155,7 +153,9 @@ void DesktopGridEffectConfig::save()
alignment = int( m_alignmentItems[alignment] );
conf.writeEntry( "DesktopNameAlignment", alignment );
- conf.writeEntry( "CustomLayout", m_ui->layoutBox->checkState() == Qt::Checked ? 1 : 0 );
+ int layoutMode = m_ui->layoutCombo->currentIndex();
+ conf.writeEntry( "LayoutMode", layoutMode );
+
conf.writeEntry( "CustomLayoutRows", m_ui->layoutRowsSpin->value() );
m_ui->shortcutEditor->save();
@@ -172,7 +172,7 @@ void DesktopGridEffectConfig::defaults()
m_ui->zoomDurationSpin->setValue( 0 );
m_ui->borderWidthSpin->setValue( 10 );
m_ui->desktopNameAlignmentCombo->setCurrentIndex( 0 );
- m_ui->layoutBox->setCheckState( Qt::Unchecked );
+ m_ui->layoutCombo->setCurrentIndex( int( DesktopGridEffect::LayoutPager ));
m_ui->layoutRowsSpin->setValue( 2 );
m_ui->shortcutEditor->allDefault();
emit changed(true);
@@ -180,7 +180,7 @@ void DesktopGridEffectConfig::defaults()
void DesktopGridEffectConfig::layoutSelectionChanged()
{
- if( m_ui->layoutBox->checkState() == Qt::Checked )
+ if( m_ui->layoutCombo->currentIndex() == DesktopGridEffect::LayoutCustom )
{
m_ui->layoutRowsLabel->setEnabled( true );
m_ui->layoutRowsSpin->setEnabled( true );
diff --git a/effects/desktopgrid_config.h b/effects/desktopgrid_config.h
index 938fd208dd..457ab31dce 100644
--- a/effects/desktopgrid_config.h
+++ b/effects/desktopgrid_config.h
@@ -25,6 +25,7 @@ along with this program. If not, see .
#include
#include "ui_desktopgrid_config.h"
+#include "desktopgrid.h"
namespace KWin
{
diff --git a/effects/desktopgrid_config.ui b/effects/desktopgrid_config.ui
index 7d986c5e90..415dac76ce 100644
--- a/effects/desktopgrid_config.ui
+++ b/effects/desktopgrid_config.ui
@@ -79,10 +79,32 @@
-
-
+
- Custom grid &layout
+ &Layout mode:
+
+ desktopNameAlignmentCombo
+
+
+
+ -
+
+
-
+
+ Pager
+
+
+ -
+
+ Automatic
+
+
+ -
+
+ Custom
+
+
-
@@ -173,8 +195,9 @@
zoomDurationSpin
borderWidthSpin
desktopNameAlignmentCombo
- layoutBox
+ layoutCombo
layoutRowsSpin
+ screenEdgeCombo