00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "bridge.h"
00012
00013 #include "client.h"
00014 #include "options.h"
00015
00016 namespace KWinInternal
00017 {
00018
00019 Bridge::Bridge( Client* cl )
00020 : c( cl )
00021 {
00022 }
00023
00024 #define BRIDGE_HELPER( rettype, prototype, args1, args2, cst ) \
00025 rettype Bridge::prototype ( args1 ) cst \
00026 { \
00027 return c->prototype( args2 ); \
00028 }
00029
00030 BRIDGE_HELPER( bool, isActive,,, const )
00031 BRIDGE_HELPER( bool, isCloseable,,, const )
00032 BRIDGE_HELPER( bool, isMaximizable,,, const )
00033 BRIDGE_HELPER( Bridge::MaximizeMode, maximizeMode,,, const )
00034 BRIDGE_HELPER( bool, isMinimizable,,, const )
00035 BRIDGE_HELPER( bool, providesContextHelp,,, const )
00036 BRIDGE_HELPER( int, desktop,,, const )
00037 BRIDGE_HELPER( bool, isModal,,, const )
00038 BRIDGE_HELPER( bool, isShadeable,,, const )
00039 BRIDGE_HELPER( bool, isShade,,, const )
00040 BRIDGE_HELPER( bool, keepAbove,,, const )
00041 BRIDGE_HELPER( bool, keepBelow,,, const )
00042 BRIDGE_HELPER( bool, isMovable,,, const )
00043 BRIDGE_HELPER( bool, isResizable,,, const )
00044 BRIDGE_HELPER( QString, caption,,, const )
00045 BRIDGE_HELPER( void, processMousePressEvent, QMouseEvent* e, e, )
00046 BRIDGE_HELPER( QRect, geometry,,, const )
00047 BRIDGE_HELPER( void, closeWindow,,, )
00048 BRIDGE_HELPER( void, maximize, MaximizeMode m, m, )
00049 BRIDGE_HELPER( void, minimize,,, )
00050 BRIDGE_HELPER( void, showContextHelp,,, )
00051 BRIDGE_HELPER( void, setDesktop, int desktop, desktop, )
00052
00053 void Bridge::setKeepAbove( bool set )
00054 {
00055 if( c->keepAbove() != set )
00056 c->workspace()->performWindowOperation( c, KeepAboveOp );
00057 }
00058
00059 void Bridge::setKeepBelow( bool set )
00060 {
00061 if( c->keepBelow() != set )
00062 c->workspace()->performWindowOperation( c, KeepBelowOp );
00063 }
00064
00065 NET::WindowType Bridge::windowType( unsigned long supported_types ) const
00066 {
00067 return c->windowType( false, supported_types );
00068 }
00069
00070 QIconSet Bridge::icon() const
00071 {
00072 return QIconSet( c->miniIcon(), c->icon());
00073 }
00074
00075 bool Bridge::isSetShade() const
00076 {
00077 return c->shadeMode() != ShadeNone;
00078 }
00079
00080 void Bridge::showWindowMenu( QPoint p )
00081 {
00082 c->workspace()->showWindowMenu( p, c );
00083 }
00084
00085 void Bridge::showWindowMenu( const QRect &p )
00086 {
00087 c->workspace()->showWindowMenu( p, c );
00088 }
00089
00090 void Bridge::performWindowOperation( WindowOperation op )
00091 {
00092 c->workspace()->performWindowOperation( c, op );
00093 }
00094
00095 void Bridge::setMask( const QRegion& r, int mode )
00096 {
00097 c->setMask( r, mode );
00098 }
00099
00100 bool Bridge::isPreview() const
00101 {
00102 return false;
00103 }
00104
00105 QRect Bridge::iconGeometry() const
00106 {
00107 NETRect r = c->info->iconGeometry();
00108 return QRect( r.pos.x, r.pos.y, r.size.width, r.size.height );
00109 }
00110
00111 QWidget* Bridge::workspaceWidget() const
00112 {
00113 return c->workspace()->desktopWidget();
00114 }
00115
00116 WId Bridge::windowId() const
00117 {
00118 return c->window();
00119 }
00120
00121 void Bridge::titlebarDblClickOperation()
00122 {
00123 c->workspace()->performWindowOperation( c, options->operationTitlebarDblClick());
00124 }
00125
00126 void Bridge::titlebarMouseWheelOperation( int delta )
00127 {
00128 c->performMouseCommand( options->operationTitlebarMouseWheel( delta ), QCursor::pos());
00129 }
00130
00131 void Bridge::setShade( bool set )
00132 {
00133 c->setShade( set ? ShadeNormal : ShadeNone );
00134 }
00135
00136 int Bridge::currentDesktop() const
00137 {
00138 return c->workspace()->currentDesktop();
00139 }
00140
00141 QWidget* Bridge::initialParentWidget() const
00142 {
00143 return NULL;
00144 }
00145
00146 Qt::WFlags Bridge::initialWFlags() const
00147 {
00148 return 0;
00149 }
00150
00151 void Bridge::helperShowHide( bool show )
00152 {
00153 if( show )
00154 c->rawShow();
00155 else
00156 c->rawHide();
00157 }
00158
00159 QRegion Bridge::unobscuredRegion( const QRegion& r ) const
00160 {
00161 QRegion reg( r );
00162 const ClientList stacking_order = c->workspace()->stackingOrder();
00163 ClientList::ConstIterator it = stacking_order.find( c );
00164 ++it;
00165 for(;
00166 it != stacking_order.end();
00167 ++it )
00168 {
00169 if( !(*it)->isShown( true ))
00170 continue;
00171 if( c->isOnAllDesktops())
00172 {
00173 if( !(*it)->isOnCurrentDesktop())
00174 continue;
00175 }
00176 else
00177 {
00178 if( !(*it)->isOnDesktop( c->desktop()))
00179 continue;
00180 }
00181
00182
00183
00184 int dx = (*it)->x() - c->x();
00185 int dy = (*it)->y() - c->y();
00186 QRegion creg = (*it)->mask();
00187 creg.translate(dx, dy);
00188 reg -= creg;
00189 if (reg.isEmpty())
00190 {
00191
00192 break;
00193 }
00194 }
00195 return reg;
00196 }
00197
00198 void Bridge::grabXServer( bool grab )
00199 {
00200 if( grab )
00201 KWinInternal::grabXServer();
00202 else
00203 KWinInternal::ungrabXServer();
00204 }
00205
00206 }