run, not crash
svn path=/trunk/kdebase/kwin/; revision=32543
This commit is contained in:
parent
b626b02a95
commit
cb82f77388
5 changed files with 8 additions and 93 deletions
89
client.cpp
89
client.cpp
|
@ -16,9 +16,6 @@
|
|||
|
||||
extern Atom qt_wm_state;
|
||||
|
||||
static QImage* imgClient = 0;
|
||||
static QPixmap* pmBackground = 0;
|
||||
static QImage* imgBackground = 0;
|
||||
|
||||
static QRect* visible_bound = 0;
|
||||
|
||||
|
@ -856,21 +853,6 @@ void Client::mouseReleaseEvent( QMouseEvent * e)
|
|||
buttonDown = FALSE;
|
||||
if ( moveResizeMode ) {
|
||||
clearbound();
|
||||
if ( isMove() && options->moveMode == Options::HalfTransparent ) {
|
||||
QPainter p ( workspace()->desktopWidget() );
|
||||
if ( !mask.isNull() ) {
|
||||
QRegion r( mask );
|
||||
r.translate( x(), y() );
|
||||
p.setClipRegion( r );
|
||||
}
|
||||
p.drawImage( x(), y(), *imgClient);
|
||||
}
|
||||
delete imgClient;
|
||||
imgClient = 0;
|
||||
delete imgBackground;
|
||||
imgBackground = 0;
|
||||
delete pmBackground;
|
||||
pmBackground = 0;
|
||||
if ( ( isMove() && options->moveMode != Options::Opaque )
|
||||
|| ( isResize() && options->resizeMode != Options::Opaque ) )
|
||||
XUngrabServer( qt_xdisplay() );
|
||||
|
@ -903,23 +885,6 @@ void Client::mouseMoveEvent( QMouseEvent * e)
|
|||
if ( ( isMove() && options->moveMode != Options::Opaque )
|
||||
|| ( isResize() && options->resizeMode != Options::Opaque ) )
|
||||
XGrabServer( qt_xdisplay() );
|
||||
|
||||
if ( isMove() && options->moveMode == Options::HalfTransparent ) {
|
||||
imgClient = 0; //new QImage( QPixmap::grabWidget( this ).convertToImage() );
|
||||
// TODO SLOW!!!
|
||||
pmBackground = new QPixmap( QPixmap::grabWindow( qt_xrootwin() ));
|
||||
imgBackground = new QImage( pmBackground->convertToImage() );
|
||||
QRect ww( windowWrapper()->geometry() );
|
||||
ww.moveBy( x(), y() );
|
||||
ww = ww.intersect( workspace()->geometry() );
|
||||
ww.moveBy( -x(), -y() );
|
||||
bitBlt( imgClient,
|
||||
ww.x(),
|
||||
ww.y(),
|
||||
imgBackground,
|
||||
x()+ww.x(), y()+ww.y(), ww.width(), ww.height() );
|
||||
oldGeom.setRect(0,0,0,0);
|
||||
}
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
@ -994,57 +959,8 @@ void Client::mouseMoveEvent( QMouseEvent * e)
|
|||
clearbound();
|
||||
drawbound( geom );
|
||||
break;
|
||||
case Options::HalfTransparent:
|
||||
{
|
||||
QPainter p ( workspace()->desktopWidget() );
|
||||
QRegion now( geom );
|
||||
if ( !mask.isNull() ) {
|
||||
QRegion r( mask );
|
||||
r.translate( geom.x(), geom.y() );
|
||||
now = r;
|
||||
}
|
||||
if ( !oldGeom.isEmpty() ) {
|
||||
QRegion r( oldGeom );
|
||||
r = r.subtract( now );
|
||||
p.setClipRegion( r );
|
||||
p.drawPixmap( oldGeom.x(), oldGeom.y(),
|
||||
*pmBackground,
|
||||
oldGeom.x(), oldGeom.y(),
|
||||
oldGeom.width(), oldGeom.height() );
|
||||
}
|
||||
p.setClipRegion( now );
|
||||
QImage img ( *imgClient );
|
||||
img.detach();
|
||||
QRect visibleRect = QRect( 0, 0,
|
||||
workspace()->geometry().width(),
|
||||
workspace()->geometry().height() ).intersect( geom );
|
||||
for ( int i=visibleRect.top(); i<=visibleRect.bottom(); i++ ) {
|
||||
uint *p = (uint *)imgBackground->scanLine(i);
|
||||
uint *end = p + visibleRect.right();
|
||||
p += visibleRect.left();
|
||||
uint *pimg = (uint *)img.scanLine(i - geom.top() );
|
||||
pimg += visibleRect.left() - geom.left();
|
||||
while ( p <= end ) {
|
||||
int r = (*p&0x00ff0000) >> 16;
|
||||
int r2 = (*pimg&0x00ff0000) >> 16;
|
||||
int g = (*p&0x0000ff00) >> 8;
|
||||
int g2 = (*pimg&0x0000ff00) >> 8;
|
||||
int b = (*p&0x000000ff );
|
||||
int b2 = (*pimg&0x000000ff );
|
||||
*pimg = ( ( (r+2*r2)/3 ) << 16 )
|
||||
+ ( ( (g+2*g2)/3 ) << 8 )
|
||||
+ ( (b+2*b2)/3 );
|
||||
p++;
|
||||
pimg++;
|
||||
}
|
||||
}
|
||||
|
||||
p.drawImage( geom.x(), geom.y(), img );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -1577,9 +1493,8 @@ void Client::getWindowProtocols(){
|
|||
*/
|
||||
void Client::takeFocus()
|
||||
{
|
||||
if ( !Ptakefocus )
|
||||
XSetInputFocus( qt_xdisplay(), win, RevertToPointerRoot, CurrentTime );
|
||||
else
|
||||
XSetInputFocus( qt_xdisplay(), win, RevertToPointerRoot, CurrentTime );
|
||||
if ( Ptakefocus )
|
||||
sendClientMessage(win, atoms->wm_protocols, atoms->wm_take_focus);
|
||||
}
|
||||
|
||||
|
|
4
main.cpp
4
main.cpp
|
@ -52,7 +52,7 @@ int x11ErrorHandler(Display *d, XErrorEvent *e){
|
|||
}
|
||||
|
||||
Application::Application( int &argc, char *argv[] )
|
||||
: QApplication( argc, argv )
|
||||
: KApplication( argc, argv, "kwin" )
|
||||
{
|
||||
initting = TRUE;
|
||||
options = new Options;
|
||||
|
@ -61,7 +61,7 @@ Application::Application( int &argc, char *argv[] )
|
|||
// install X11 error handler
|
||||
XSetErrorHandler( x11ErrorHandler );
|
||||
|
||||
// create a workspace.
|
||||
// create a workspace.
|
||||
workspaces += new Workspace();
|
||||
initting = FALSE;
|
||||
if ( argc > 1 ) {
|
||||
|
|
4
main.h
4
main.h
|
@ -1,11 +1,11 @@
|
|||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
#include <qapplication.h>
|
||||
#include <kapp.h>
|
||||
#include "workspace.h"
|
||||
|
||||
typedef QValueList<Workspace*> WorkspaceList;
|
||||
class Application : public QApplication
|
||||
class Application : public KApplication
|
||||
{
|
||||
public:
|
||||
Application( int &argc, char **argv );
|
||||
|
|
|
@ -48,7 +48,7 @@ void Options::reload()
|
|||
{
|
||||
focusPolicy = ClickToFocus;
|
||||
resizeMode = Opaque;
|
||||
moveMode = Transparent;//HalfTransparent;
|
||||
moveMode = Opaque;// Transparent;
|
||||
|
||||
QPalette pal = QApplication::palette();
|
||||
KConfig *config = KGlobal::config();
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
enum FocusPolicy { ClickToFocus, FocusFollowsMouse, FocusUnderMouse, FocusStricklyUnderMouse };
|
||||
FocusPolicy focusPolicy;
|
||||
|
||||
enum MoveResizeMode { Transparent, Opaque, HalfTransparent };
|
||||
enum MoveResizeMode { Transparent, Opaque };
|
||||
|
||||
/**
|
||||
* Basic color types that should be recognized by all decoration styles.
|
||||
|
|
Loading…
Reference in a new issue