Added comments to some tiling related code
svn path=/trunk/KDE/kdebase/workspace/; revision=1124486
This commit is contained in:
parent
7913a98465
commit
3e9377e6b4
8 changed files with 59 additions and 3 deletions
|
@ -669,6 +669,10 @@ KAdvancedConfig::KAdvancedConfig (bool _standAlone, KConfig *_config, const KCom
|
||||||
tilBoxLay->addWidget( tilingRaiseLabel, 2, 0 );
|
tilBoxLay->addWidget( tilingRaiseLabel, 2, 0 );
|
||||||
|
|
||||||
tilingRaiseCombo = new KComboBox( tilBox );
|
tilingRaiseCombo = new KComboBox( tilBox );
|
||||||
|
// when a floating window is activated, all other floating
|
||||||
|
// windows are also brought to the front, above the tiled windows
|
||||||
|
// when a tiled window is focused, all floating windows go to the back.
|
||||||
|
// NOTE: If the user has explicitly set a client to "keep above others", that will be respected.
|
||||||
tilingRaiseCombo->addItem( i18nc( "Window Raising Policy", "Raise/Lower all floating windows" ) );
|
tilingRaiseCombo->addItem( i18nc( "Window Raising Policy", "Raise/Lower all floating windows" ) );
|
||||||
tilingRaiseCombo->addItem( i18nc( "Window Raising Policy", "Raise/Lower current window only") );
|
tilingRaiseCombo->addItem( i18nc( "Window Raising Policy", "Raise/Lower current window only") );
|
||||||
tilingRaiseCombo->addItem( i18nc( "Window Raising Policy", "Floating windows are always on top" ) );
|
tilingRaiseCombo->addItem( i18nc( "Window Raising Policy", "Floating windows are always on top" ) );
|
||||||
|
|
|
@ -226,10 +226,8 @@ void Workspace::notifyWindowDesktopChanged( Client *c, int old_desktop )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make this configurable
|
|
||||||
/*
|
/*
|
||||||
* If a floating window was activated, raise all floating windows.
|
* Implements the 3 raising modes in Window Behaviour -> Advanced
|
||||||
* If a tiled window was activated, lower all floating windows.
|
|
||||||
*/
|
*/
|
||||||
void Workspace::notifyWindowActivated( Client *c )
|
void Workspace::notifyWindowActivated( Client *c )
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,6 +60,7 @@ Tile* TilingLayout::findTile( Client *c ) const
|
||||||
|
|
||||||
void TilingLayout::clientMinimizeToggled( Client *c )
|
void TilingLayout::clientMinimizeToggled( Client *c )
|
||||||
{
|
{
|
||||||
|
// just rearrange since that will check for state
|
||||||
Tile *t = findTile( c );
|
Tile *t = findTile( c );
|
||||||
if( t )
|
if( t )
|
||||||
arrange( layoutArea( t ) );
|
arrange( layoutArea( t ) );
|
||||||
|
@ -81,6 +82,7 @@ void TilingLayout::clientResized( Client *c, const QRect &moveResizeGeom, const
|
||||||
commit();
|
commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tries to swap the tile with the one in the new position right now
|
||||||
void TilingLayout::clientMoved( Client *c, const QRect &moveResizeGeom, const QRect &orig )
|
void TilingLayout::clientMoved( Client *c, const QRect &moveResizeGeom, const QRect &orig )
|
||||||
{
|
{
|
||||||
if( moveResizeGeom == orig )
|
if( moveResizeGeom == orig )
|
||||||
|
|
|
@ -39,6 +39,10 @@ class TilingLayout
|
||||||
TilingLayout( Workspace *w );
|
TilingLayout( Workspace *w );
|
||||||
virtual ~TilingLayout();
|
virtual ~TilingLayout();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reimplement this to decide how the client(s) should
|
||||||
|
* be resized.
|
||||||
|
*/
|
||||||
virtual void clientResized( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
virtual void clientResized( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
||||||
void clientMoved( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
void clientMoved( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
||||||
void clientMinimizeToggled( Client *c );
|
void clientMinimizeToggled( Client *c );
|
||||||
|
@ -56,14 +60,33 @@ class TilingLayout
|
||||||
void swapTiles( Tile *a, Tile *b );
|
void swapTiles( Tile *a, Tile *b );
|
||||||
void reconfigureTiling();
|
void reconfigureTiling();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All tiling layouts do not allow the user to manually
|
||||||
|
* resize clients. This method will be called when the user
|
||||||
|
* attempts a resize. Return any valid position to allow
|
||||||
|
* resizing in that direction. currentMode will be the direction
|
||||||
|
* of resize attempted by the user. You do not have to return the same value.
|
||||||
|
* If you do not want to allow resizing at all, or you do not
|
||||||
|
* want to allow resizing for this client, then return KDecorationDefines::PositionCenter.
|
||||||
|
*/
|
||||||
virtual KDecorationDefines::Position resizeMode( Client *c, KDecorationDefines::Position currentMode ) const;
|
virtual KDecorationDefines::Position resizeMode( Client *c, KDecorationDefines::Position currentMode ) const;
|
||||||
|
|
||||||
const QList<Tile *>& tiles() const;
|
const QList<Tile *>& tiles() const;
|
||||||
Tile* findTile( Client *c ) const;
|
Tile* findTile( Client *c ) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
/**
|
||||||
|
* Get a pointer to the Workspace.
|
||||||
|
*/
|
||||||
Workspace * workspace() const;
|
Workspace * workspace() const;
|
||||||
|
/**
|
||||||
|
* Get a area in which the Tile can be placed.
|
||||||
|
*/
|
||||||
const QRect layoutArea( Tile *t ) const;
|
const QRect layoutArea( Tile *t ) const;
|
||||||
|
/**
|
||||||
|
* Hooks called after a tile is added to
|
||||||
|
* layout and before it is removed.
|
||||||
|
*/
|
||||||
// currently only required by floating layout
|
// currently only required by floating layout
|
||||||
virtual void postAddTile( Tile *t );
|
virtual void postAddTile( Tile *t );
|
||||||
virtual void preRemoveTile( Tile *t );
|
virtual void preRemoveTile( Tile *t );
|
||||||
|
|
|
@ -27,6 +27,14 @@ namespace KWin
|
||||||
class Workspace;
|
class Workspace;
|
||||||
class TilingLayout;
|
class TilingLayout;
|
||||||
class Tile;
|
class Tile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The tiling layout factory is used to create tiling layouts.
|
||||||
|
* To add a new layout, include the appropriate header in tilinglayoutfactory.cpp
|
||||||
|
* and use the ADD_LAYOUT macro to create a case entry.
|
||||||
|
* Also insert your layout in the Layouts enumeration. Do NOT
|
||||||
|
* change the position of FirstLayout and LastLayout
|
||||||
|
*/
|
||||||
class TilingLayoutFactory
|
class TilingLayoutFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -698,6 +698,7 @@ void Workspace::performWindowOperation( Client* c, Options::WindowOperation op )
|
||||||
if ( !c )
|
if ( !c )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Allows us to float a window when it is maximized, if it is tiled.
|
||||||
if( tilingEnabled()
|
if( tilingEnabled()
|
||||||
&& ( op == Options::MaximizeOp
|
&& ( op == Options::MaximizeOp
|
||||||
|| op == Options::HMaximizeOp
|
|| op == Options::HMaximizeOp
|
||||||
|
|
|
@ -1422,6 +1422,9 @@ bool Workspace::setCurrentDesktop( int new_desktop )
|
||||||
// Now propagate the change, after hiding, before showing
|
// Now propagate the change, after hiding, before showing
|
||||||
rootInfo->setCurrentDesktop( currentDesktop() );
|
rootInfo->setCurrentDesktop( currentDesktop() );
|
||||||
|
|
||||||
|
// if the client is moved to another desktop, that desktop may
|
||||||
|
// not have an existing layout. In addition this tiling layout
|
||||||
|
// will require rearrangement, so notify about desktop changes.
|
||||||
if( movingClient && !movingClient->isOnDesktop( new_desktop ))
|
if( movingClient && !movingClient->isOnDesktop( new_desktop ))
|
||||||
{
|
{
|
||||||
int old_desktop = movingClient->desktop();
|
int old_desktop = movingClient->desktop();
|
||||||
|
|
17
workspace.h
17
workspace.h
|
@ -178,7 +178,14 @@ class Workspace : public QObject, public KDecorationDefines
|
||||||
void setTilingEnabled( bool tiling );
|
void setTilingEnabled( bool tiling );
|
||||||
bool tileable( Client *c );
|
bool tileable( Client *c );
|
||||||
void createTile( Client *c );
|
void createTile( Client *c );
|
||||||
|
// updates geometry of tiles on all desktops,
|
||||||
|
// this rearranges the tiles.
|
||||||
void updateAllTiles();
|
void updateAllTiles();
|
||||||
|
|
||||||
|
// The notification funtions are called from
|
||||||
|
// various points in existing code so that
|
||||||
|
// tiling can take any action if required.
|
||||||
|
// They are defined in tiling.cpp
|
||||||
void notifyWindowResize( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
void notifyWindowResize( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
||||||
void notifyWindowMove( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
void notifyWindowMove( Client *c, const QRect &moveResizeGeom, const QRect &orig );
|
||||||
void notifyWindowResizeDone( Client *c, const QRect &moveResizeGeom, const QRect &orig, bool canceled );
|
void notifyWindowResizeDone( Client *c, const QRect &moveResizeGeom, const QRect &orig, bool canceled );
|
||||||
|
@ -308,6 +315,10 @@ class Workspace : public QObject, public KDecorationDefines
|
||||||
bool desktopLayoutDynamicity_;
|
bool desktopLayoutDynamicity_;
|
||||||
|
|
||||||
bool tilingEnabled_;
|
bool tilingEnabled_;
|
||||||
|
// Each tilingLayout is for one virtual desktop.
|
||||||
|
// The length is always one more than the number of
|
||||||
|
// virtual desktops so that we can quickly index them
|
||||||
|
// without having to remember to subtract one.
|
||||||
QVector<TilingLayout *> tilingLayouts;
|
QVector<TilingLayout *> tilingLayouts;
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -679,15 +690,19 @@ class Workspace : public QObject, public KDecorationDefines
|
||||||
void suspendCompositing();
|
void suspendCompositing();
|
||||||
void suspendCompositing( bool suspend );
|
void suspendCompositing( bool suspend );
|
||||||
|
|
||||||
|
// user actions, usually bound to shortcuts
|
||||||
|
// and also provided through the D-BUS interface.
|
||||||
void slotToggleTiling();
|
void slotToggleTiling();
|
||||||
void slotToggleFloating();
|
void slotToggleFloating();
|
||||||
void slotNextTileLayout();
|
void slotNextTileLayout();
|
||||||
void slotPreviousTileLayout();
|
void slotPreviousTileLayout();
|
||||||
|
|
||||||
|
// Changes the focused client
|
||||||
void slotLeft();
|
void slotLeft();
|
||||||
void slotRight();
|
void slotRight();
|
||||||
void slotTop();
|
void slotTop();
|
||||||
void slotBottom();
|
void slotBottom();
|
||||||
|
// swaps active and adjacent client.
|
||||||
void slotMoveLeft();
|
void slotMoveLeft();
|
||||||
void slotMoveRight();
|
void slotMoveRight();
|
||||||
void slotMoveTop();
|
void slotMoveTop();
|
||||||
|
@ -844,6 +859,8 @@ class Workspace : public QObject, public KDecorationDefines
|
||||||
static NET::WindowType txtToWindowType( const char* txt );
|
static NET::WindowType txtToWindowType( const char* txt );
|
||||||
static bool sessionInfoWindowTypeMatch( Client* c, SessionInfo* info );
|
static bool sessionInfoWindowTypeMatch( Client* c, SessionInfo* info );
|
||||||
|
|
||||||
|
// try to get a decent tile, either the one with
|
||||||
|
// focus or the one below the mouse.
|
||||||
Tile* getNiceTile() const;
|
Tile* getNiceTile() const;
|
||||||
void removeTile( Client *c );
|
void removeTile( Client *c );
|
||||||
// int, and not Tile::Direction because
|
// int, and not Tile::Direction because
|
||||||
|
|
Loading…
Reference in a new issue