00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include "kdecoration.h"
00026
00027
#include <kdebug.h>
00028
#include <qapplication.h>
00029
#include <kglobal.h>
00030
#include <assert.h>
00031
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
00032
#include <X11/Xlib.h>
00033
#include <fixx11h.h>
00034
#endif
00035
00036
#include "kdecoration_p.h"
00037
#include "kdecorationfactory.h"
00038
00039
KDecorationOptions* KDecoration::options_;
00040
00041 KDecoration::KDecoration( KDecorationBridge* bridge, KDecorationFactory* factory )
00042 : bridge_( bridge ),
00043 w_( NULL ),
00044 factory_( factory )
00045 {
00046 factory->addDecoration(
this );
00047 }
00048
00049 KDecoration::~KDecoration()
00050 {
00051
factory()->removeDecoration(
this );
00052
delete w_;
00053 }
00054
00055 const KDecorationOptions*
KDecoration::options()
00056 {
00057
return options_;
00058 }
00059
00060 void KDecoration::createMainWidget( WFlags flags )
00061 {
00062
00063
setMainWidget(
new QWidget(
initialParentWidget(),
"decoration widget",
initialWFlags() | flags ));
00064 }
00065
00066 void KDecoration::setMainWidget( QWidget* w )
00067 {
00068 assert( w_ == NULL );
00069 w_ = w;
00070 w->setMouseTracking(
true );
00071
widget()->resize(
geometry().size());
00072 }
00073
00074 QWidget*
KDecoration::initialParentWidget()
const
00075
{
00076
return bridge_->initialParentWidget();
00077 }
00078
00079 Qt::WFlags
KDecoration::initialWFlags()
const
00080
{
00081
return bridge_->initialWFlags();
00082 }
00083
00084 bool KDecoration::isActive()
const
00085
{
00086
return bridge_->isActive();
00087 }
00088
00089 bool KDecoration::isCloseable()
const
00090
{
00091
return bridge_->isCloseable();
00092 }
00093
00094 bool KDecoration::isMaximizable()
const
00095
{
00096
return bridge_->isMaximizable();
00097 }
00098
00099 KDecoration::MaximizeMode
KDecoration::maximizeMode()
const
00100
{
00101
return bridge_->maximizeMode();
00102 }
00103
00104 bool KDecoration::isMinimizable()
const
00105
{
00106
return bridge_->isMinimizable();
00107 }
00108
00109 bool KDecoration::providesContextHelp()
const
00110
{
00111
return bridge_->providesContextHelp();
00112 }
00113
00114 int KDecoration::desktop()
const
00115
{
00116
return bridge_->desktop();
00117 }
00118
00119 bool KDecoration::isModal()
const
00120
{
00121
return bridge_->isModal();
00122 }
00123
00124 bool KDecoration::isShadeable()
const
00125
{
00126
return bridge_->isShadeable();
00127 }
00128
00129 bool KDecoration::isShade()
const
00130
{
00131
return bridge_->isShade();
00132 }
00133
00134 bool KDecoration::isSetShade()
const
00135
{
00136
return bridge_->isSetShade();
00137 }
00138
00139 bool KDecoration::keepAbove()
const
00140
{
00141
return bridge_->keepAbove();
00142 }
00143
00144 bool KDecoration::keepBelow()
const
00145
{
00146
return bridge_->keepBelow();
00147 }
00148
00149 bool KDecoration::isMovable()
const
00150
{
00151
return bridge_->isMovable();
00152 }
00153
00154 bool KDecoration::isResizable()
const
00155
{
00156
return bridge_->isResizable();
00157 }
00158
00159 NET::WindowType
KDecoration::windowType(
unsigned long supported_types )
const
00160
{
00161
return bridge_->windowType( supported_types );
00162 }
00163
00164 QIconSet
KDecoration::icon()
const
00165
{
00166
return bridge_->icon();
00167 }
00168
00169 QString
KDecoration::caption()
const
00170
{
00171
return bridge_->caption();
00172 }
00173
00174 void KDecoration::processMousePressEvent( QMouseEvent* e )
00175 {
00176
return bridge_->processMousePressEvent( e );
00177 }
00178
00179 void KDecoration::showWindowMenu(
const QRect &pos )
00180 {
00181 bridge_->showWindowMenu( pos );
00182 }
00183
00184 void KDecoration::showWindowMenu( QPoint pos )
00185 {
00186 bridge_->showWindowMenu( pos );
00187 }
00188
00189 void KDecoration::performWindowOperation( WindowOperation op )
00190 {
00191 bridge_->performWindowOperation( op );
00192 }
00193
00194 void KDecoration::setMask(
const QRegion& reg,
int mode )
00195 {
00196 bridge_->setMask( reg, mode );
00197 }
00198
00199 void KDecoration::clearMask()
00200 {
00201 bridge_->setMask( QRegion(), 0 );
00202 }
00203
00204 bool KDecoration::isPreview()
const
00205
{
00206
return bridge_->isPreview();
00207 }
00208
00209 QRect
KDecoration::geometry()
const
00210
{
00211
return bridge_->geometry();
00212 }
00213
00214 QRect
KDecoration::iconGeometry()
const
00215
{
00216
return bridge_->iconGeometry();
00217 }
00218
00219 QRegion
KDecoration::unobscuredRegion(
const QRegion& r )
const
00220
{
00221
return bridge_->unobscuredRegion( r );
00222 }
00223
00224 QWidget*
KDecoration::workspaceWidget()
const
00225
{
00226
return bridge_->workspaceWidget();
00227 }
00228
00229 void KDecoration::closeWindow()
00230 {
00231 bridge_->closeWindow();
00232 }
00233
00234
void KDecoration::maximize( ButtonState button )
00235 {
00236
00237
if( button == MidButton )
00238
maximize(
maximizeMode() ^ MaximizeVertical );
00239
else if ( button == RightButton )
00240
maximize(
maximizeMode() ^ MaximizeHorizontal );
00241
else
00242
maximize(
maximizeMode() == MaximizeFull ? MaximizeRestore : MaximizeFull );
00243 }
00244
00245 void KDecoration::maximize( MaximizeMode mode )
00246 {
00247 bridge_->maximize( mode );
00248 }
00249
00250 void KDecoration::minimize()
00251 {
00252 bridge_->minimize();
00253 }
00254
00255 void KDecoration::showContextHelp()
00256 {
00257 bridge_->showContextHelp();
00258 }
00259
00260 void KDecoration::setDesktop(
int desktop )
00261 {
00262 bridge_->setDesktop( desktop );
00263 }
00264
00265 void KDecoration::toggleOnAllDesktops()
00266 {
00267
if(
isOnAllDesktops())
00268
setDesktop( bridge_->currentDesktop());
00269
else
00270
setDesktop( NET::OnAllDesktops );
00271 }
00272
00273 void KDecoration::titlebarDblClickOperation()
00274 {
00275 bridge_->titlebarDblClickOperation();
00276 }
00277
00278 void KDecoration::setShade(
bool set )
00279 {
00280 bridge_->setShade( set );
00281 }
00282
00283 void KDecoration::setKeepAbove(
bool set )
00284 {
00285 bridge_->setKeepAbove( set );
00286 }
00287
00288 void KDecoration::setKeepBelow(
bool set )
00289 {
00290 bridge_->setKeepBelow( set );
00291 }
00292
00293 bool KDecoration::drawbound(
const QRect&,
bool )
00294 {
00295
return false;
00296 }
00297
00298 bool KDecoration::animateMinimize(
bool )
00299 {
00300
return false;
00301 }
00302
00303
bool KDecoration::windowDocked( Position )
00304 {
00305
return false;
00306 }
00307
00308 void KDecoration::helperShowHide(
bool show )
00309 {
00310 bridge_->helperShowHide( show );
00311 }
00312
00313 void KDecoration::reset(
unsigned long )
00314 {
00315 }
00316
00317 void KDecoration::grabXServer()
00318 {
00319 bridge_->grabXServer(
true );
00320 }
00321
00322 void KDecoration::ungrabXServer()
00323 {
00324 bridge_->grabXServer(
false );
00325 }
00326
00327 KDecoration::Position
KDecoration::mousePosition(
const QPoint& p )
const
00328
{
00329
const int range = 16;
00330
int bleft, bright, btop, bbottom;
00331
borders( bleft, bright, btop, bbottom );
00332 btop = KMIN( btop, 4 );
00333
00334 Position m = PositionCenter;
00335
00336
if ( ( p.x() > bleft && p.x() <
widget()->width() - bright )
00337 && ( p.y() > btop && p.y() <
widget()->height() - bbottom ) )
00338
return PositionCenter;
00339
00340
if ( p.y() <= KMAX( range, btop ) && p.x() <= KMAX( range, bleft ))
00341 m = PositionTopLeft;
00342
else if ( p.y() >=
widget()->height()- KMAX( range, bbottom )
00343 && p.x() >=
widget()->width()- KMAX( range, bright ))
00344 m = PositionBottomRight;
00345
else if ( p.y() >=
widget()->height()- KMAX( range, bbottom ) && p.x() <= KMAX( range, bleft ))
00346 m = PositionBottomLeft;
00347
else if ( p.y() <= KMAX( range, btop ) && p.x() >=
widget()->width()- KMAX( range, bright ))
00348 m = PositionTopRight;
00349
else if ( p.y() <= btop )
00350 m = PositionTop;
00351
else if ( p.y() >=
widget()->height()-bbottom )
00352 m = PositionBottom;
00353
else if ( p.x() <= bleft )
00354 m = PositionLeft;
00355
else if ( p.x() >=
widget()->width()-bright )
00356 m = PositionRight;
00357
else
00358 m = PositionCenter;
00359
return m;
00360 }
00361
00362 KDecorationOptions::KDecorationOptions()
00363 {
00364 assert( KDecoration::options_ == NULL );
00365 KDecoration::options_ =
this;
00366 }
00367
00368 KDecorationOptions::~KDecorationOptions()
00369 {
00370 assert( KDecoration::options_ ==
this );
00371 KDecoration::options_ = NULL;
00372 }
00373
00374 const QColor&
KDecorationOptions::color(ColorType type,
bool active)
const
00375
{
00376
return(d->colors[type + (active ? 0 : NUM_COLORS)]);
00377 }
00378
00379 const QFont&
KDecorationOptions::font(
bool active,
bool small)
const
00380
{
00381
if ( small )
00382
return(active ? d->activeFontSmall : d->inactiveFontSmall);
00383
else
00384
return(active ? d->activeFont : d->inactiveFont);
00385 }
00386
00387 const QColorGroup&
KDecorationOptions::colorGroup(ColorType type,
bool active)
const
00388
{
00389
int idx = type + (active ? 0 : NUM_COLORS);
00390
if(d->cg[idx])
00391
return(*d->cg[idx]);
00392 d->cg[idx] =
new QColorGroup(Qt::black, d->colors[idx], d->colors[idx].light(150),
00393 d->colors[idx].dark(), d->colors[idx].dark(120),
00394 Qt::black, QApplication::palette().active().
00395 base());
00396
return(*d->cg[idx]);
00397 }
00398
00399 bool KDecorationOptions::customButtonPositions()
const
00400
{
00401
return d->custom_button_positions;
00402 }
00403
00404 QString
KDecorationOptions::titleButtonsLeft()
const
00405
{
00406
return d->title_buttons_left;
00407 }
00408
00409 QString
KDecorationOptions::titleButtonsRight()
const
00410
{
00411
return d->title_buttons_right;
00412 }
00413
00414 bool KDecorationOptions::showTooltips()
const
00415
{
00416
return d->show_tooltips;
00417 }
00418
00419 KDecorationOptions::BorderSize
KDecorationOptions::preferredBorderSize( KDecorationFactory* factory )
const
00420
{
00421 assert( factory != NULL );
00422
if( d->cached_border_size == BordersCount )
00423 d->cached_border_size = d->findPreferredBorderSize( d->border_size,
00424 factory->borderSizes());
00425
return d->cached_border_size;
00426 }
00427
00428
bool KDecorationOptions::moveResizeMaximizedWindows()
const
00429
{
00430
return d->move_resize_maximized_windows;
00431 }
00432
00433
#include "kdecoration.moc"