76f17e6de1
* Models and Delegates for Clients and Desktops * Horizontal, vertical and tabular layout * Layout of one item can be configured by an XML definition * A desktop item can include a client list * An optional second list view showing only the selected item * A new KCM "kwintabbox" * An alternative TabBox with independent settings and keybindings * Optional Highlight Windows effect integration * List scrolls instead of removing items * Scroll wheel support * Cursor key support * Middle click on item closes window BUG: 195745 BUG: 197187 BUG: 201103 FEATURE: 118184 FEATURE: 156723 FEATURE: 177441 FEATURE: 182897 FEATURE: 193882 GUI: svn path=/trunk/KDE/kdebase/workspace/; revision=1022861
179 lines
4.8 KiB
C++
179 lines
4.8 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2009 Martin Gräßlin <kde@martin-graesslin.com>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
|
|
#include "previewhandlerimpl.h"
|
|
#include <kephal/screens.h>
|
|
#include <klocalizedstring.h>
|
|
#include <kwindowsystem.h>
|
|
#include <KDebug>
|
|
|
|
namespace KWin
|
|
{
|
|
namespace TabBox
|
|
{
|
|
|
|
PreviewClientImpl::PreviewClientImpl(WId id)
|
|
: m_id( id )
|
|
{
|
|
}
|
|
|
|
PreviewClientImpl::~PreviewClientImpl()
|
|
{
|
|
}
|
|
|
|
QString PreviewClientImpl::caption() const
|
|
{
|
|
KWindowInfo info = KWindowSystem::windowInfo( m_id, NET::WMVisibleName );
|
|
return info.visibleName();
|
|
}
|
|
|
|
QPixmap PreviewClientImpl::icon() const
|
|
{
|
|
return KWindowSystem::icon( m_id );
|
|
}
|
|
|
|
bool PreviewClientImpl::isMinimized() const
|
|
{
|
|
KWindowInfo info = KWindowSystem::windowInfo( m_id, NET::WMState | NET::XAWMState );
|
|
return info.isMinimized();
|
|
}
|
|
|
|
int PreviewClientImpl::width() const
|
|
{
|
|
return 0; // only needed for the outline - not needed in preview
|
|
}
|
|
|
|
int PreviewClientImpl::height() const
|
|
{
|
|
return 0; // only needed for the outline - not needed in preview
|
|
}
|
|
|
|
WId PreviewClientImpl::window() const
|
|
{
|
|
return m_id;
|
|
}
|
|
|
|
int PreviewClientImpl::x() const
|
|
{
|
|
return 0; // only needed for the outline - not needed in preview
|
|
}
|
|
|
|
int PreviewClientImpl::y() const
|
|
{
|
|
return 0; // only needed for the outline - not needed in preview
|
|
}
|
|
|
|
/*******************************************************
|
|
* PreviewHandlerImpl
|
|
*******************************************************/
|
|
PreviewHandlerImpl::PreviewHandlerImpl()
|
|
{
|
|
QList< WId > windows = KWindowSystem::stackingOrder();
|
|
foreach( WId w, windows )
|
|
{
|
|
m_stackingOrder.append( new PreviewClientImpl( w ) );
|
|
kDebug( 1212 ) << "Window " << w;
|
|
}
|
|
}
|
|
|
|
PreviewHandlerImpl::~PreviewHandlerImpl()
|
|
{
|
|
qDeleteAll( m_stackingOrder.begin(), m_stackingOrder.end() );
|
|
m_stackingOrder.clear();
|
|
}
|
|
|
|
TabBoxClient* PreviewHandlerImpl::clientToAddToList( TabBoxClient* client, int desktop, bool allDesktops ) const
|
|
{
|
|
Q_UNUSED( desktop )
|
|
Q_UNUSED( allDesktops )
|
|
// don't include desktops and panels
|
|
KWindowInfo info = KWindowSystem::windowInfo( client->window(), NET::WMWindowType );
|
|
NET::WindowType wType = info.windowType(NET::NormalMask | NET::DesktopMask | NET::DockMask |
|
|
NET::ToolbarMask | NET::MenuMask | NET::DialogMask |
|
|
NET::OverrideMask | NET::TopMenuMask |
|
|
NET::UtilityMask | NET::SplashMask);
|
|
|
|
if (wType != NET::Normal && wType != NET::Override && wType != NET::Unknown &&
|
|
wType != NET::Dialog && wType != NET::Utility)
|
|
{
|
|
return NULL;
|
|
}
|
|
return client;
|
|
}
|
|
|
|
TabBoxClientList PreviewHandlerImpl::stackingOrder() const
|
|
{
|
|
return m_stackingOrder;
|
|
}
|
|
|
|
int PreviewHandlerImpl::nextDesktopFocusChain( int desktop ) const
|
|
{
|
|
int ret = desktop + 1;
|
|
if( ret > numberOfDesktops() )
|
|
ret = 1;
|
|
return ret;
|
|
}
|
|
|
|
int PreviewHandlerImpl::numberOfDesktops() const
|
|
{
|
|
return KWindowSystem::numberOfDesktops();
|
|
}
|
|
|
|
int PreviewHandlerImpl::currentDesktop() const
|
|
{
|
|
return KWindowSystem::currentDesktop();
|
|
}
|
|
|
|
QString PreviewHandlerImpl::desktopName( int desktop ) const
|
|
{
|
|
return KWindowSystem::desktopName( desktop );
|
|
}
|
|
|
|
QString PreviewHandlerImpl::desktopName( TabBoxClient* client ) const
|
|
{
|
|
Q_UNUSED( client )
|
|
return desktopName( 1 );
|
|
}
|
|
|
|
TabBoxClient* PreviewHandlerImpl::nextClientFocusChain( TabBoxClient* client ) const
|
|
{
|
|
if( m_stackingOrder.isEmpty() )
|
|
return NULL;
|
|
int index = m_stackingOrder.indexOf( client );
|
|
index++;
|
|
if( index >= m_stackingOrder.count() )
|
|
index = 0;
|
|
return m_stackingOrder[ index ];
|
|
}
|
|
|
|
KWin::TabBox::TabBoxClient* PreviewHandlerImpl::activeClient() const
|
|
{
|
|
if( m_stackingOrder.isEmpty() )
|
|
return NULL;
|
|
return m_stackingOrder[ 0 ];
|
|
}
|
|
|
|
int PreviewHandlerImpl::activeScreen() const
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
} // namespace TabBox
|
|
} // namespace KWin
|