You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
/***************************************************************** |
|
KWin - the KDE window manager |
|
This file is part of the KDE project. |
|
|
|
Copyright (C) 2007 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. |
|
******************************************************************/ |
|
|
|
/* |
|
|
|
Testing of handling input in effects. This testing effect moves all windows |
|
by 100 pixels down, creates an input window that'll intercept all mouse events |
|
and activates the window that's been clicked (click position needs to be |
|
transformed). This is useful for effects that present something on the screen |
|
and let the user interact with it (e.g. a list of window thumbnails and the |
|
user can activate the window by clicking its thumbnail). |
|
|
|
*/ |
|
|
|
#include "test_input.h" |
|
|
|
#include <assert.h> |
|
|
|
#include <qcursor.h> |
|
#include <qevent.h> |
|
|
|
namespace KWin |
|
{ |
|
|
|
KWIN_EFFECT( test_input, TestInputEffect ) |
|
|
|
TestInputEffect::TestInputEffect() |
|
{ |
|
input = effects->createInputWindow( this, 0, 0, displayWidth(), displayHeight(), Qt::CrossCursor ); |
|
} |
|
|
|
TestInputEffect::~TestInputEffect() |
|
{ |
|
effects->destroyInputWindow( input ); |
|
} |
|
|
|
void TestInputEffect::prePaintScreen( ScreenPrePaintData& data, int time ) |
|
{ |
|
data.mask |= PAINT_SCREEN_TRANSFORMED; |
|
effects->prePaintScreen( data, time ); |
|
} |
|
|
|
void TestInputEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data ) |
|
{ |
|
data.yTranslate += 100; |
|
effects->paintScreen( mask, region, data ); |
|
} |
|
|
|
void TestInputEffect::windowInputMouseEvent( Window w, QEvent* e ) |
|
{ |
|
assert( w == input ); |
|
if( e->type() != QEvent::MouseButtonPress ) |
|
return; |
|
QPoint pos = static_cast< QMouseEvent* >( e )->pos(); |
|
pos -= QPoint( 0, 100 ); // adjust for transformation |
|
foreach( EffectWindow* c, effects->stackingOrder()) |
|
{ |
|
if( /* TODO c->isShown( true ) && */c->isOnCurrentDesktop() |
|
&& c->geometry().contains( pos )) |
|
{ |
|
effects->activateWindow( c ); |
|
return; |
|
} |
|
} |
|
} |
|
|
|
} // namespace
|
|
|