2006-07-05 12:30:03 +00:00
|
|
|
/*****************************************************************
|
|
|
|
KWin - the KDE window manager
|
|
|
|
This file is part of the KDE project.
|
|
|
|
|
|
|
|
Copyright (C) 2006 Lubos Lunak <l.lunak@kde.org>
|
|
|
|
|
|
|
|
You can Freely distribute this program under the GNU General Public
|
|
|
|
License. See the file "COPYING" for the exact licensing terms.
|
|
|
|
******************************************************************/
|
|
|
|
|
|
|
|
#include "scene_basic.h"
|
2006-10-15 08:58:38 +00:00
|
|
|
#include "client.h"
|
|
|
|
|
|
|
|
#include <X11/extensions/shape.h>
|
2006-07-05 12:30:03 +00:00
|
|
|
|
|
|
|
namespace KWinInternal
|
|
|
|
{
|
|
|
|
|
|
|
|
//****************************************
|
|
|
|
// Scene
|
|
|
|
//****************************************
|
|
|
|
|
2006-10-15 08:58:38 +00:00
|
|
|
Scene* scene;
|
|
|
|
|
2006-07-05 12:30:03 +00:00
|
|
|
Scene::Scene( Workspace* ws )
|
|
|
|
: wspace( ws )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
Scene::~Scene()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-07-05 20:52:57 +00:00
|
|
|
void Scene::windowGeometryShapeChanged( Toplevel* )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void Scene::windowOpacityChanged( Toplevel* )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-09-29 19:05:36 +00:00
|
|
|
void Scene::windowAdded( Toplevel* )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-07-05 20:52:57 +00:00
|
|
|
void Scene::windowDeleted( Toplevel* )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
//****************************************
|
|
|
|
// Scene::Window
|
|
|
|
//****************************************
|
|
|
|
|
2006-10-15 08:58:38 +00:00
|
|
|
Scene::Window::Window( Toplevel * c )
|
|
|
|
: toplevel( c )
|
|
|
|
, shape_valid( false )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-10-16 10:12:48 +00:00
|
|
|
Scene::Window::~Window()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2006-10-15 08:58:38 +00:00
|
|
|
void Scene::Window::discardShape()
|
|
|
|
{
|
|
|
|
shape_valid = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
QRegion Scene::Window::shape() const
|
|
|
|
{
|
|
|
|
if( !shape_valid )
|
|
|
|
{
|
|
|
|
Client* c = dynamic_cast< Client* >( toplevel );
|
|
|
|
if( toplevel->shape() || ( c != NULL && !c->mask().isEmpty()))
|
|
|
|
{
|
|
|
|
int count, order;
|
|
|
|
XRectangle* rects = XShapeGetRectangles( display(), toplevel->handle(),
|
|
|
|
ShapeBounding, &count, &order );
|
|
|
|
if(rects)
|
|
|
|
{
|
|
|
|
shape_region = QRegion();
|
|
|
|
for( int i = 0;
|
|
|
|
i < count;
|
|
|
|
++i )
|
|
|
|
shape_region += QRegion( rects[ i ].x, rects[ i ].y,
|
|
|
|
rects[ i ].width, rects[ i ].height );
|
|
|
|
XFree(rects);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
shape_region = QRegion( 0, 0, width(), height());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
shape_region = QRegion( 0, 0, width(), height());
|
|
|
|
shape_valid = true;
|
|
|
|
}
|
|
|
|
return shape_region;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Scene::Window::isVisible() const
|
|
|
|
{
|
|
|
|
// TODO mapping state?
|
|
|
|
return !toplevel->geometry()
|
|
|
|
.intersect( QRect( 0, 0, displayWidth(), displayHeight()))
|
|
|
|
.isEmpty();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Scene::Window::isOpaque() const
|
|
|
|
{
|
|
|
|
return toplevel->opacity() == 1.0 && !toplevel->hasAlpha();
|
|
|
|
}
|
2006-07-05 12:30:03 +00:00
|
|
|
|
|
|
|
} // namespace
|