00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "client.h"
00021
#include "workspace.h"
00022
00023
#include <qpopupmenu.h>
00024
#include <kglobalsettings.h>
00025
#include <kiconloader.h>
00026
#include <klocale.h>
00027
#include <kconfig.h>
00028
#include <kglobalaccel.h>
00029
#include <kapplication.h>
00030
00031
#include "popupinfo.h"
00032
#include "killwindow.h"
00033
#include "tabbox.h"
00034
00035
namespace KWinInternal
00036 {
00037
00038
00039
00040
00041
00042 QPopupMenu* Workspace::clientPopup()
00043 {
00044
if ( !popup )
00045 {
00046 popup =
new QPopupMenu;
00047 popup->setCheckable( TRUE );
00048 popup->setFont(KGlobalSettings::menuFont());
00049 connect( popup, SIGNAL( aboutToShow() ),
this, SLOT( clientPopupAboutToShow() ) );
00050 connect( popup, SIGNAL( activated(
int) ),
this, SLOT( clientPopupActivated(
int) ) );
00051
00052 advanced_popup =
new QPopupMenu( popup );
00053 advanced_popup->setCheckable( TRUE );
00054 advanced_popup->setFont(KGlobalSettings::menuFont());
00055 connect( advanced_popup, SIGNAL( activated(
int) ),
this, SLOT( clientPopupActivated(
int) ) );
00056 advanced_popup->insertItem( SmallIconSet(
"up" ), i18n(
"Keep &Above Others"), Options::KeepAboveOp );
00057 advanced_popup->insertItem( SmallIconSet(
"down" ), i18n(
"Keep &Below Others"), Options::KeepBelowOp );
00058 advanced_popup->insertItem( SmallIconSet(
"window_fullscreen" ), i18n(
"&Fullscreen"), Options::FullScreenOp );
00059 advanced_popup->insertItem( i18n(
"&No Border"), Options::NoBorderOp );
00060 advanced_popup->insertItem( SmallIconSet(
"filesave" ), i18n(
"Sto&re Window Settings"), Options::ToggleStoreSettingsOp );
00061
00062 popup->insertItem(i18n(
"Ad&vanced"), advanced_popup );
00063 desk_popup_index = popup->count();
00064 popup->insertItem( SmallIconSet(
"move" ), i18n(
"&Move")+
'\t'+keys->shortcut(
"Window Move").seq(0).toString(), Options::MoveOp );
00065 popup->insertItem( i18n(
"Re&size")+
'\t'+keys->shortcut(
"Window Resize").seq(0).toString(), Options::ResizeOp );
00066 popup->insertItem( i18n(
"Mi&nimize")+
'\t'+keys->shortcut(
"Window Minimize").seq(0).toString(), Options::MinimizeOp );
00067 popup->insertItem( i18n(
"Ma&ximize")+
'\t'+keys->shortcut(
"Window Maximize").seq(0).toString(), Options::MaximizeOp );
00068 popup->insertItem( i18n(
"Sh&ade")+
'\t'+keys->shortcut(
"Window Shade").seq(0).toString(), Options::ShadeOp );
00069
00070 popup->insertSeparator();
00071
00072
if (!KGlobal::config()->isImmutable() &&
00073 !kapp->authorizeControlModules(Workspace::configModules(
true)).isEmpty())
00074 {
00075 popup->insertItem(SmallIconSet(
"configure" ), i18n(
"Configur&e Window Behavior..."),
this, SLOT( configureWM() ));
00076 popup->insertSeparator();
00077 }
00078
00079 popup->insertItem( SmallIconSet(
"fileclose" ), i18n(
"&Close")+
'\t'+keys->shortcut(
"Window Close").seq(0).toString(), Options::CloseOp );
00080 }
00081
return popup;
00082 }
00083
00089
void Workspace::clientPopupAboutToShow()
00090 {
00091
if ( !popup_client || !popup )
00092
return;
00093
00094
if ( numberOfDesktops() == 1 )
00095 {
00096
delete desk_popup;
00097 desk_popup = 0;
00098 }
00099
else
00100 {
00101 initDesktopPopup();
00102 }
00103
00104 popup->setItemEnabled( Options::ResizeOp, popup_client->isResizable() );
00105 popup->setItemEnabled( Options::MoveOp, popup_client->isMovable() );
00106 popup->setItemEnabled( Options::MaximizeOp, popup_client->isMaximizable() );
00107 popup->setItemChecked( Options::MaximizeOp, popup_client->maximizeMode() == Client::MaximizeFull );
00108
00109 popup->setItemChecked( Options::ShadeOp, popup_client->shadeMode() != Client::ShadeNone );
00110 popup->setItemEnabled( Options::ShadeOp, popup_client->isShadeable());
00111 advanced_popup->setItemChecked( Options::KeepAboveOp, popup_client->keepAbove() );
00112 advanced_popup->setItemChecked( Options::KeepBelowOp, popup_client->keepBelow() );
00113 advanced_popup->setItemChecked( Options::FullScreenOp, popup_client->isFullScreen() );
00114 advanced_popup->setItemEnabled( Options::FullScreenOp, popup_client->userCanSetFullScreen() );
00115 advanced_popup->setItemChecked( Options::NoBorderOp, popup_client->noBorder() );
00116 advanced_popup->setItemEnabled( Options::NoBorderOp, popup_client->userCanSetNoBorder() );
00117 popup->setItemEnabled( Options::MinimizeOp, popup_client->isMinimizable() );
00118 advanced_popup->setItemChecked( Options::ToggleStoreSettingsOp, popup_client->storeSettings() );
00119 popup->setItemEnabled( Options::CloseOp, popup_client->isCloseable() );
00120 }
00121
00122
00123
void Workspace::initDesktopPopup()
00124 {
00125
if (desk_popup)
00126
return;
00127
00128 desk_popup =
new QPopupMenu( popup );
00129 desk_popup->setCheckable( TRUE );
00130 desk_popup->setFont(KGlobalSettings::menuFont());
00131 connect( desk_popup, SIGNAL( activated(
int) ),
00132
this, SLOT( sendToDesktop(
int) ) );
00133 connect( desk_popup, SIGNAL( aboutToShow() ),
00134
this, SLOT( desktopPopupAboutToShow() ) );
00135
00136 popup->insertItem(i18n(
"To &Desktop"), desk_popup, -1, desk_popup_index );
00137 }
00138
00143
void Workspace::desktopPopupAboutToShow()
00144 {
00145
if ( !desk_popup )
00146
return;
00147
00148 desk_popup->clear();
00149 desk_popup->insertItem( i18n(
"&All Desktops"), 0 );
00150
if ( active_client && active_client->isOnAllDesktops() )
00151 desk_popup->setItemChecked( 0, TRUE );
00152 desk_popup->insertSeparator( -1 );
00153
int id;
00154
const int BASE = 10;
00155
for (
int i = 1; i <= numberOfDesktops(); i++ )
00156 {
00157 QString basic_name(
"%1 %2");
00158
if (i<BASE)
00159 {
00160 basic_name.prepend(
'&');
00161 }
00162
id = desk_popup->insertItem(
00163 basic_name
00164 .arg(i)
00165 .arg( desktopName(i).replace(
'&',
"&&" )),
00166 i );
00167
if ( active_client &&
00168 !active_client->isOnAllDesktops() && active_client->desktop() == i )
00169 desk_popup->setItemChecked(
id, TRUE );
00170 }
00171 }
00172
00173
00174
00178
void Workspace::initShortcuts()
00179 {
00180 keys =
new KGlobalAccel(
this );
00181
#include "kwinbindings.cpp"
00182 readShortcuts();
00183 }
00184
00185
void Workspace::readShortcuts()
00186 {
00187 keys->readSettings();
00188
00189 cutWalkThroughDesktops = keys->shortcut(
"Walk Through Desktops");
00190 cutWalkThroughDesktopsReverse = keys->shortcut(
"Walk Through Desktops (Reverse)");
00191 cutWalkThroughDesktopList = keys->shortcut(
"Walk Through Desktop List");
00192 cutWalkThroughDesktopListReverse = keys->shortcut(
"Walk Through Desktop List (Reverse)");
00193 cutWalkThroughWindows = keys->shortcut(
"Walk Through Windows");
00194 cutWalkThroughWindowsReverse = keys->shortcut(
"Walk Through Windows (Reverse)");
00195
00196 keys->updateConnections();
00197 }
00198
00199
00200
void Workspace::clientPopupActivated(
int id )
00201 {
00202 WindowOperation op = static_cast< WindowOperation >(
id );
00203
Client* c = popup_client ? popup_client : active_client;
00204 QString type;
00205
switch( op )
00206 {
00207
case FullScreenOp:
00208
if( !c->isFullScreen() && c->userCanSetFullScreen())
00209 type =
"fullscreenaltf3";
00210
break;
00211
case NoBorderOp:
00212
if( !c->noBorder() && c->userCanSetNoBorder())
00213 type =
"noborderaltf3";
00214
break;
00215
default:
00216
break;
00217 };
00218
if( !type.isEmpty())
00219 helperDialog( type, c );
00220 performWindowOperation( c, op );
00221 }
00222
00223
00224
void Workspace::performWindowOperation( Client* c, Options::WindowOperation op )
00225 {
00226
if ( !c )
00227
return;
00228
00229
if (op == Options::MoveOp || op == Options::UnrestrictedMoveOp )
00230 QCursor::setPos( c->geometry().center() );
00231
if (op == Options::ResizeOp || op == Options::UnrestrictedResizeOp )
00232 QCursor::setPos( c->geometry().bottomRight());
00233
switch ( op )
00234 {
00235
case Options::MoveOp:
00236 c->performMouseCommand( Options::MouseMove, QCursor::pos() );
00237
break;
00238
case Options::UnrestrictedMoveOp:
00239 c->performMouseCommand( Options::MouseUnrestrictedMove, QCursor::pos() );
00240
break;
00241
case Options::ResizeOp:
00242 c->performMouseCommand( Options::MouseResize, QCursor::pos() );
00243
break;
00244
case Options::UnrestrictedResizeOp:
00245 c->performMouseCommand( Options::MouseUnrestrictedResize, QCursor::pos() );
00246
break;
00247
case Options::CloseOp:
00248 c->closeWindow();
00249
break;
00250
case Options::MaximizeOp:
00251 c->maximize( c->maximizeMode() == Client::MaximizeFull
00252 ? Client::MaximizeRestore : Client::MaximizeFull );
00253
break;
00254
case Options::HMaximizeOp:
00255 c->maximize( c->maximizeMode() ^ Client::MaximizeHorizontal );
00256
break;
00257
case Options::VMaximizeOp:
00258 c->maximize( c->maximizeMode() ^ Client::MaximizeVertical );
00259
break;
00260
case Options::MinimizeOp:
00261 c->minimize();
00262
break;
00263
case Options::ShadeOp:
00264 c->toggleShade();
00265
break;
00266
case Options::OnAllDesktopsOp:
00267 c->setOnAllDesktops( !c->isOnAllDesktops() );
00268
break;
00269
case Options::FullScreenOp:
00270 c->setFullScreen( !c->isFullScreen(),
true );
00271
break;
00272
case Options::NoBorderOp:
00273 c->setUserNoBorder( !c->isUserNoBorder());
00274
break;
00275
case Options::KeepAboveOp:
00276 c->setKeepAbove( !c->keepAbove() );
00277
break;
00278
case Options::KeepBelowOp:
00279 c->setKeepBelow( !c->keepBelow() );
00280
break;
00281
case Options::ToggleStoreSettingsOp:
00282 c->setStoreSettings( !c->storeSettings() );
00283
break;
00284
case Options::LowerOp:
00285 lowerClient(c);
00286
break;
00287
default:
00288
break;
00289 }
00290 }
00291
00295
bool Client::performMouseCommand( Options::MouseCommand command, QPoint globalPos)
00296 {
00297
bool replay = FALSE;
00298
switch (command)
00299 {
00300
case Options::MouseRaise:
00301 workspace()->raiseClient(
this );
00302
break;
00303
case Options::MouseLower:
00304 workspace()->lowerClient(
this );
00305
break;
00306
case Options::MouseShade :
00307 toggleShade();
00308
break;
00309
case Options::MouseOperationsMenu:
00310
if ( isActive() & options->clickRaise )
00311 autoRaise();
00312 workspace()->showWindowMenu( globalPos,
this );
00313
break;
00314
case Options::MouseToggleRaiseAndLower:
00315 workspace()->raiseOrLowerClient(
this );
00316
break;
00317
case Options::MouseActivateAndRaise:
00318 replay = isActive();
00319 workspace()->requestFocus(
this );
00320 workspace()->raiseClient(
this );
00321
break;
00322
case Options::MouseActivateAndLower:
00323 workspace()->requestFocus(
this );
00324 workspace()->lowerClient(
this );
00325
break;
00326
case Options::MouseActivate:
00327 replay = isActive();
00328 workspace()->requestFocus(
this );
00329
break;
00330
case Options::MouseActivateRaiseAndPassClick:
00331 workspace()->requestFocus(
this );
00332 workspace()->raiseClient(
this );
00333 replay = TRUE;
00334
break;
00335
case Options::MouseActivateAndPassClick:
00336 workspace()->requestFocus(
this );
00337 replay = TRUE;
00338
break;
00339
case Options::MouseActivateRaiseAndMove:
00340
case Options::MouseActivateRaiseAndUnrestrictedMove:
00341 workspace()->raiseClient(
this );
00342 workspace()->requestFocus(
this );
00343
if( options->moveMode == Options::Transparent &&
isMovable())
00344 move_faked_activity = workspace()->fakeRequestedActivity(
this );
00345
00346
case Options::MouseMove:
00347
case Options::MouseUnrestrictedMove:
00348 {
00349
if (!
isMovable())
00350
break;
00351
if( moveResizeMode )
00352 finishMoveResize(
false );
00353 mode = PositionCenter;
00354 buttonDown = TRUE;
00355 moveOffset = QPoint( globalPos.x() - x(), globalPos.y() - y());
00356 invertedMoveOffset = rect().bottomRight() - moveOffset;
00357 unrestrictedMoveResize = ( command == Options::MouseActivateRaiseAndUnrestrictedMove
00358 || command == Options::MouseUnrestrictedMove );
00359 setCursor( mode );
00360
if( !startMoveResize())
00361 {
00362 buttonDown =
false;
00363 setCursor( mode );
00364 }
00365
break;
00366 }
00367
case Options::MouseResize:
00368
case Options::MouseUnrestrictedResize:
00369 {
00370
if (!
isResizable() || isShade())
00371
break;
00372
if( moveResizeMode )
00373 finishMoveResize(
false );
00374 buttonDown = TRUE;
00375 moveOffset = QPoint( globalPos.x() - x(), globalPos.y() - y());
00376
int x = moveOffset.x(), y = moveOffset.y();
00377
bool left = x < width() / 3;
00378
bool right = x >= 2 * width() / 3;
00379
bool top = y < height() / 3;
00380
bool bot = y >= 2 * height() / 3;
00381
if (top)
00382 mode = left ? PositionTopLeft : (right ? PositionTopRight : PositionTop);
00383
else if (bot)
00384 mode = left ? PositionBottomLeft : (right ? PositionBottomRight : PositionBottom);
00385
else
00386 mode = (x < width() / 2) ? PositionLeft : PositionRight;
00387 invertedMoveOffset = rect().bottomRight() - moveOffset;
00388 unrestrictedMoveResize = ( command == Options::MouseUnrestrictedResize );
00389 setCursor( mode );
00390
if( !startMoveResize())
00391 {
00392 buttonDown =
false;
00393 setCursor( mode );
00394 }
00395
break;
00396 }
00397
case Options::MouseMinimize:
00398
minimize();
00399
break;
00400
case Options::MouseNothing:
00401
00402
default:
00403 replay = TRUE;
00404
break;
00405 }
00406
return replay;
00407 }
00408
00409
00410
void Workspace::showWindowMenuAt(
unsigned long,
int,
int )
00411 {
00412 slotWindowOperations();
00413 }
00414
00415
void Workspace::slotActivateAttentionWindow()
00416 {
00417
if( attention_chain.count() > 0 )
00418 activateClient( attention_chain.first());
00419 }
00420
00421
void Workspace::slotSwitchDesktopNext()
00422 {
00423
int d = currentDesktop() + 1;
00424
if ( d > numberOfDesktops() )
00425 {
00426
if ( options->rollOverDesktops )
00427 {
00428 d = 1;
00429 }
00430
else
00431 {
00432
return;
00433 }
00434 }
00435 setCurrentDesktop(d);
00436 popupinfo->showInfo( desktopName(currentDesktop()) );
00437 }
00438
00439
void Workspace::slotSwitchDesktopPrevious()
00440 {
00441
int d = currentDesktop() - 1;
00442
if ( d <= 0 )
00443 {
00444
if ( options->rollOverDesktops )
00445 d = numberOfDesktops();
00446
else
00447
return;
00448 }
00449 setCurrentDesktop(d);
00450 popupinfo->showInfo( desktopName(currentDesktop()) );
00451 }
00452
00453
void Workspace::slotSwitchDesktopRight()
00454 {
00455
int x,y;
00456 calcDesktopLayout(x,y);
00457
int dt = currentDesktop()-1;
00458
if (layoutOrientation == Qt::Vertical)
00459 {
00460 dt += y;
00461
if ( dt >= numberOfDesktops() )
00462 {
00463
if ( options->rollOverDesktops )
00464 dt -= numberOfDesktops();
00465
else
00466
return;
00467 }
00468 }
00469
else
00470 {
00471
int d = (dt % x) + 1;
00472
if ( d >= x )
00473 {
00474
if ( options->rollOverDesktops )
00475 d -= x;
00476
else
00477
return;
00478 }
00479 dt = dt - (dt % x) + d;
00480 }
00481 setCurrentDesktop(dt+1);
00482 popupinfo->showInfo( desktopName(currentDesktop()) );
00483 }
00484
00485
void Workspace::slotSwitchDesktopLeft()
00486 {
00487
int x,y;
00488 calcDesktopLayout(x,y);
00489
int dt = currentDesktop()-1;
00490
if (layoutOrientation == Qt::Vertical)
00491 {
00492 dt -= y;
00493
if ( dt < 0 )
00494 {
00495
if ( options->rollOverDesktops )
00496 dt += numberOfDesktops();
00497
else
00498
return;
00499 }
00500 }
00501
else
00502 {
00503
int d = (dt % x) - 1;
00504
if ( d < 0 )
00505 {
00506
if ( options->rollOverDesktops )
00507 d += x;
00508
else
00509
return;
00510 }
00511 dt = dt - (dt % x) + d;
00512 }
00513 setCurrentDesktop(dt+1);
00514 popupinfo->showInfo( desktopName(currentDesktop()) );
00515 }
00516
00517
void Workspace::slotSwitchDesktopUp()
00518 {
00519
int x,y;
00520 calcDesktopLayout(x,y);
00521
int dt = currentDesktop()-1;
00522
if (layoutOrientation == Qt::Horizontal)
00523 {
00524 dt -= x;
00525
if ( dt < 0 )
00526 {
00527
if ( options->rollOverDesktops )
00528 dt += numberOfDesktops();
00529
else
00530
return;
00531 }
00532 }
00533
else
00534 {
00535
int d = (dt % y) - 1;
00536
if ( d < 0 )
00537 {
00538
if ( options->rollOverDesktops )
00539 d += y;
00540
else
00541
return;
00542 }
00543 dt = dt - (dt % y) + d;
00544 }
00545 setCurrentDesktop(dt+1);
00546 popupinfo->showInfo( desktopName(currentDesktop()) );
00547 }
00548
00549
void Workspace::slotSwitchDesktopDown()
00550 {
00551
int x,y;
00552 calcDesktopLayout(x,y);
00553
int dt = currentDesktop()-1;
00554
if (layoutOrientation == Qt::Horizontal)
00555 {
00556 dt += x;
00557
if ( dt >= numberOfDesktops() )
00558 {
00559
if ( options->rollOverDesktops )
00560 dt -= numberOfDesktops();
00561
else
00562
return;
00563 }
00564 }
00565
else
00566 {
00567
int d = (dt % y) + 1;
00568
if ( d >= y )
00569 {
00570
if ( options->rollOverDesktops )
00571 d -= y;
00572
else
00573
return;
00574 }
00575 dt = dt - (dt % y) + d;
00576 }
00577 setCurrentDesktop(dt+1);
00578 popupinfo->showInfo( desktopName(currentDesktop()) );
00579 }
00580
00581
void Workspace::slotSwitchToDesktop(
int i )
00582 {
00583 setCurrentDesktop( i );
00584 popupinfo->showInfo( desktopName(currentDesktop()) );
00585 }
00586
00587
00588
void Workspace::slotWindowToDesktop(
int i )
00589 {
00590
if( i >= 1 && i <= numberOfDesktops() && active_client
00591 && !active_client->isDesktop()
00592 && !active_client->isDock()
00593 && !active_client->isTopMenu())
00594 sendClientToDesktop( active_client, i,
true );
00595 }
00596
00600
void Workspace::slotWindowMaximize()
00601 {
00602
if ( active_client )
00603 performWindowOperation( active_client, Options::MaximizeOp );
00604 }
00605
00609
void Workspace::slotWindowMaximizeVertical()
00610 {
00611
if ( active_client )
00612 performWindowOperation( active_client, Options::VMaximizeOp );
00613 }
00614
00618
void Workspace::slotWindowMaximizeHorizontal()
00619 {
00620
if ( active_client )
00621 performWindowOperation( active_client, Options::HMaximizeOp );
00622 }
00623
00624
00628
void Workspace::slotWindowMinimize()
00629 {
00630 performWindowOperation( active_client, Options::MinimizeOp );
00631 }
00632
00636
void Workspace::slotWindowShade()
00637 {
00638 performWindowOperation( active_client, Options::ShadeOp );
00639 }
00640
00644
void Workspace::slotWindowRaise()
00645 {
00646
if ( active_client )
00647 raiseClient( active_client );
00648 }
00649
00653
void Workspace::slotWindowLower()
00654 {
00655
if ( active_client )
00656 lowerClient( active_client );
00657 }
00658
00662
void Workspace::slotWindowRaiseOrLower()
00663 {
00664
if ( active_client )
00665 raiseOrLowerClient( active_client );
00666 }
00667
00668
void Workspace::slotWindowOnAllDesktops()
00669 {
00670
if( active_client )
00671 active_client->toggleOnAllDesktops();
00672 }
00673
00674
void Workspace::slotWindowFullScreen()
00675 {
00676
if( active_client )
00677 performWindowOperation( active_client, Options::FullScreenOp );
00678 }
00679
00680
void Workspace::slotWindowNoBorder()
00681 {
00682
if( active_client )
00683 performWindowOperation( active_client, Options::NoBorderOp );
00684 }
00685
00686
void Workspace::slotWindowAbove()
00687 {
00688
if( active_client )
00689 performWindowOperation( active_client, Options::KeepAboveOp );
00690 }
00691
00692
void Workspace::slotWindowBelow()
00693 {
00694
if( active_client )
00695 performWindowOperation( active_client, Options::KeepBelowOp );
00696 }
00697
00701
void Workspace::slotWindowToNextDesktop()
00702 {
00703
int d = currentDesktop() + 1;
00704
if ( d > numberOfDesktops() )
00705 d = 1;
00706
if (active_client && !active_client->isDesktop()
00707 && !active_client->isDock() && !active_client->isTopMenu())
00708 sendClientToDesktop(active_client,d,
true);
00709 setCurrentDesktop(d);
00710 popupinfo->showInfo( desktopName(currentDesktop()) );
00711 }
00712
00716
void Workspace::slotWindowToPreviousDesktop()
00717 {
00718
int d = currentDesktop() - 1;
00719
if ( d <= 0 )
00720 d = numberOfDesktops();
00721
if (active_client && !active_client->isDesktop()
00722 && !active_client->isDock() && !active_client->isTopMenu())
00723 sendClientToDesktop(active_client,d,
true);
00724 setCurrentDesktop(d);
00725 popupinfo->showInfo( desktopName(currentDesktop()) );
00726 }
00727
00731
void Workspace::slotKillWindow()
00732 {
00733 KillWindow kill(
this );
00734 kill.start();
00735 }
00736
00742
void Workspace::sendToDesktop(
int desk )
00743 {
00744
if ( !popup_client )
00745
return;
00746
if ( desk == 0 )
00747 {
00748 popup_client->setOnAllDesktops( !popup_client->isOnAllDesktops());
00749
return;
00750 }
00751
00752 sendClientToDesktop( popup_client, desk,
false );
00753
00754 }
00755
00759
void Workspace::slotWindowOperations()
00760 {
00761
if ( !active_client )
00762
return;
00763 QPoint pos = active_client->pos() + active_client->clientPos();
00764 showWindowMenu( pos.x(), pos.y(), active_client );
00765 }
00766
00767
void Workspace::showWindowMenu(
int x,
int y, Client* cl )
00768 {
00769
if (!kapp->authorizeKAction(
"kwin_rmb"))
00770
return;
00771
if( !cl )
00772
return;
00773
if( popup_client != NULL )
00774
return;
00775
if ( cl->isDesktop()
00776 || cl->isDock()
00777 || cl->isTopMenu())
00778
return;
00779
00780 popup_client = cl;
00781 QPopupMenu* p = clientPopup();
00782 p->exec( QPoint( x, y ) );
00783 popup_client = 0;
00784 }
00785
00789
void Workspace::slotWindowClose()
00790 {
00791
if ( tab_box->isVisible() || popupinfo->isVisible() )
00792
return;
00793 performWindowOperation( active_client, Options::CloseOp );
00794 }
00795
00799
void Workspace::slotWindowMove()
00800 {
00801 performWindowOperation( active_client, Options::UnrestrictedMoveOp );
00802 }
00803
00807
void Workspace::slotWindowResize()
00808 {
00809 performWindowOperation( active_client, Options::UnrestrictedResizeOp );
00810 }
00811
00812 }