kwin Library API Documentation

client.h

00001 /***************************************************************** 00002 KWin - the KDE window manager 00003 This file is part of the KDE project. 00004 00005 Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org> 00006 Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org> 00007 00008 You can Freely distribute this program under the GNU General Public 00009 License. See the file "COPYING" for the exact licensing terms. 00010 ******************************************************************/ 00011 00012 #ifndef KWIN_CLIENT_H 00013 #define KWIN_CLIENT_H 00014 00015 #include "utils.h" 00016 #include "options.h" 00017 #include "workspace.h" 00018 #include "kdecoration.h" 00019 #include <qframe.h> 00020 #include <qvbox.h> 00021 #include <qpixmap.h> 00022 #include <netwm.h> 00023 #include <kdebug.h> 00024 #include <assert.h> 00025 #include <X11/X.h> 00026 #include <X11/Xlib.h> 00027 #include <X11/Xutil.h> 00028 #include <fixx11h.h> 00029 00030 class QTimer; 00031 class KProcess; 00032 class KStartupInfoData; 00033 00034 namespace KWinInternal 00035 { 00036 00037 class Workspace; 00038 class Client; 00039 class WinInfo; 00040 class SessionInfo; 00041 class Bridge; 00042 00043 class Client : public QObject, public KDecorationDefines 00044 { 00045 Q_OBJECT 00046 public: 00047 Client( Workspace *ws ); 00048 Window window() const; 00049 Window frameId() const; 00050 Window wrapperId() const; 00051 Window decorationId() const; 00052 00053 Workspace* workspace() const; 00054 const Client* transientFor() const; 00055 Client* transientFor(); 00056 bool isTransient() const; 00057 bool groupTransient() const; 00058 bool wasOriginallyGroupTransient() const; 00059 ClientList mainClients() const; // call once before loop , is not indirect 00060 bool hasTransient( const Client* c, bool indirect ) const; 00061 const ClientList& transients() const; // is not indirect 00062 void checkTransient( Window w ); 00063 Client* findModal(); 00064 const Group* group() const; 00065 Group* group(); 00066 void checkGroup( Group* gr = NULL, bool force = false ); 00067 // prefer isXXX() instead 00068 NET::WindowType windowType( bool strict = false, int supported_types = SUPPORTED_WINDOW_TYPES_MASK ) const; 00069 00070 QRect geometry() const; 00071 QSize size() const; 00072 QSize minSize() const; 00073 QPoint pos() const; 00074 QRect rect() const; 00075 int x() const; 00076 int y() const; 00077 int width() const; 00078 int height() const; 00079 QPoint clientPos() const; // inside of geometry() 00080 QSize clientSize() const; 00081 00082 bool windowEvent( XEvent* e ); 00083 virtual bool eventFilter( QObject* o, QEvent* e ); 00084 00085 bool manage( Window w, bool isMapped ); 00086 00087 void releaseWindow( bool on_shutdown = false ); 00088 00089 enum Sizemode // how to resize the window in order to obey constains (mainly aspect ratios) 00090 { 00091 SizemodeAny, 00092 SizemodeFixedW, // try not to affect width 00093 SizemodeFixedH, // try not to affect height 00094 SizemodeMax, // try not to make it larger in either direction 00095 SizemodeShaded // shaded - height == 0 00096 }; 00097 QSize adjustedSize( const QSize&, Sizemode mode = SizemodeAny ) const; 00098 00099 QPixmap icon() const; 00100 QPixmap miniIcon() const; 00101 00102 bool isActive() const; 00103 void setActive( bool ); 00104 00105 int desktop() const; 00106 void setDesktop( int ); 00107 bool isOnDesktop( int d ) const; 00108 bool isOnCurrentDesktop() const; 00109 bool isOnAllDesktops() const; 00110 void setOnAllDesktops( bool set ); 00111 00112 // !isMinimized() && not hidden, i.e. normally visible on some virtual desktop 00113 bool isShown( bool shaded_is_shown ) const; 00114 00115 enum ShadeMode 00116 { 00117 ShadeNone, // not shaded 00118 ShadeNormal, // normally shaded - isShade() is true only here 00119 ShadeHover, // "shaded", but visible due to hover unshade 00120 ShadeActivated // "shaded", but visible due to alt+tab to the window 00121 }; 00122 bool isShade() const; // true only for ShadeNormal 00123 ShadeMode shadeMode() const; // prefer isShade() 00124 void setShade( ShadeMode mode ); 00125 bool isShadeable() const; 00126 00127 bool isMinimized() const; 00128 bool isMaximizable() const; 00129 QRect geometryRestore() const; 00130 MaximizeMode maximizeMode() const; 00131 bool isMinimizable() const; 00132 void setMaximize( bool vertically, bool horizontally ); 00133 00134 void setFullScreen( bool set, bool user ); 00135 bool isFullScreen() const; 00136 bool isFullScreenable( bool fullscreen_hack = false ) const; 00137 bool userCanSetFullScreen() const; 00138 QRect geometryFSRestore() const { return geom_fs_restore; } // only for session saving 00139 int fullScreenMode() const { return fullscreen_mode; } // only for session saving 00140 00141 bool isUserNoBorder() const; 00142 void setUserNoBorder( bool set ); 00143 bool userCanSetNoBorder() const; 00144 bool noBorder() const; 00145 00146 bool skipTaskbar( bool from_outside = false ) const; 00147 void setSkipTaskbar( bool set, bool from_outside ); 00148 00149 bool skipPager() const; 00150 void setSkipPager( bool ); 00151 00152 bool keepAbove() const; 00153 void setKeepAbove( bool ); 00154 bool keepBelow() const; 00155 void setKeepBelow( bool ); 00156 Layer layer() const; 00157 Layer belongsToLayer() const; 00158 void invalidateLayer(); 00159 00160 void setModal( bool modal ); 00161 bool isModal() const; 00162 00163 bool storeSettings() const; 00164 void setStoreSettings( bool ); 00165 00166 // auxiliary functions, depend on the windowType 00167 bool wantsTabFocus() const; 00168 bool wantsInput() const; 00169 bool hasNETSupport() const; 00170 bool isMovable() const; 00171 bool isDesktop() const; 00172 bool isDock() const; 00173 bool isToolbar() const; 00174 bool isTopMenu() const; 00175 bool isMenu() const; 00176 bool isNormalWindow() const; // normal as in 'NET::Normal or NET::Unknown non-transient' 00177 bool isDialog() const; 00178 bool isSplash() const; 00179 bool isUtility() const; 00180 bool isOverride() const; // not override redirect, but NET::Override 00181 // returns true for "special" windows and false for windows which are "normal" 00182 // (normal=window which has a border, can be moved by the user, can be closed, etc.) 00183 // true for Desktop, Dock, Splash, Override and TopMenu (and Toolbar??? - for now) 00184 // false for Normal, Dialog, Utility and Menu (and Toolbar??? - not yet) TODO 00185 bool isSpecialWindow() const; 00186 00187 bool isResizable() const; 00188 bool isCloseable() const; // may be closed by the user (may have a close button) 00189 00190 void takeFocus( bool force, allowed_t ); 00191 void demandAttention( bool set = true ); 00192 00193 void setMask( const QRegion& r, int mode = X::Unsorted ); 00194 QRegion mask() const; 00195 00196 void updateDecoration( bool check_workspace_pos, bool force = false ); 00197 void checkBorderSizes(); 00198 00199 // shape extensions 00200 bool shape() const; 00201 void updateShape(); 00202 00203 void setGeometry( int x, int y, int w, int h, ForceGeometry_t force = NormalGeometrySet ); 00204 void setGeometry( const QRect& r, ForceGeometry_t force = NormalGeometrySet ); 00205 void move( int x, int y, ForceGeometry_t force = NormalGeometrySet ); 00206 void move( const QPoint & p, ForceGeometry_t force = NormalGeometrySet ); 00207 // plainResize() simply resizes 00208 void plainResize( int w, int h, ForceGeometry_t force = NormalGeometrySet ); 00209 void plainResize( const QSize& s, ForceGeometry_t force = NormalGeometrySet ); 00210 void keepInArea( const QRect& area ); 00211 00212 void growHorizontal(); 00213 void shrinkHorizontal(); 00214 void growVertical(); 00215 void shrinkVertical(); 00216 00217 bool providesContextHelp() const; 00218 00219 bool performMouseCommand( Options::MouseCommand, QPoint globalPos ); 00220 00221 QCString windowRole() const; 00222 QCString sessionId(); 00223 QCString resourceName() const; 00224 QCString resourceClass() const; 00225 QCString wmCommand(); 00226 QCString wmClientMachine() const; 00227 Window wmClientLeader() const; 00228 pid_t pid() const; 00229 00230 QRect adjustedClientArea( const QRect& area ) const; 00231 00232 Colormap colormap() const; 00233 00234 // hides a client - basically like minimize, but without effects, it's simply hidden 00235 void hideClient( bool hide ); 00236 // updates visibility depending on whether it's on the current desktop 00237 void virtualDesktopChange(); 00238 00239 QString caption() const; 00240 00241 void keyPressEvent( uint key_code ); // FRAME ?? 00242 00243 Window moveResizeGrabWindow() const; 00244 00245 const QPoint calculateGravitation( bool invert, int gravity = 0 ) const; // FRAME public? 00246 00247 void NETMoveResize( int x_root, int y_root, NET::Direction direction ); 00248 void NETMoveResizeWindow( int flags, int x, int y, int width, int height ); 00249 void restackWindow( Window above, int detail, NET::RequestSource source, bool send_event = false ); 00250 00251 void gotPing( Time timestamp ); 00252 00253 static QCString staticWindowRole(WId); 00254 static QCString staticSessionId(WId); 00255 static QCString staticWmCommand(WId); 00256 static QCString staticWmClientMachine(WId); 00257 static Window staticWmClientLeader(WId); 00258 00259 void checkWorkspacePosition(); 00260 void updateUserTime( Time time = CurrentTime ); 00261 Time userTime() const; 00262 bool hasUserTimeSupport() const; 00263 bool ignoreFocusStealing() const; 00264 00265 // does 'delete c;' 00266 static void deleteClient( Client* c, allowed_t ); 00267 00268 static bool resourceMatch( const Client* c1, const Client* c2 ); 00269 static bool belongToSameApplication( const Client* c1, const Client* c2, bool active_hack = false ); 00270 static void readIcons( Window win, QPixmap* icon, QPixmap* miniicon ); 00271 00272 public slots: // FRAME these probably don't need to be slots anymore 00273 void minimize(); 00274 void unminimize(); 00275 void closeWindow(); 00276 void killWindow(); 00277 void maximize( MaximizeMode ); 00278 void toggleOnAllDesktops(); 00279 void toggleShade(); 00280 void showContextHelp(); 00281 void autoRaise(); 00282 void cancelAutoRaise(); 00283 void shadeHover(); 00284 void destroyClient(); 00285 00286 private: 00287 friend class Bridge; // FRAME 00288 virtual void processMousePressEvent( QMouseEvent* e ); 00289 00290 private: // TODO cleanup the order of things in the .h file 00291 // use Workspace::createClient() 00292 virtual ~Client(); // use destroyClient() or releaseWindow() 00293 00294 Position mousePosition( const QPoint& ) const; 00295 void setCursor( Position m ); 00296 void setCursor( const QCursor& c ); 00297 00298 void animateMinimizeOrUnminimize( bool minimize ); 00299 QPixmap animationPixmap( int w ); 00300 // transparent stuff 00301 void drawbound( const QRect& geom ); 00302 void clearbound(); 00303 void doDrawbound( const QRect& geom, bool clear ); 00304 00305 // handlers for X11 events 00306 bool mapRequestEvent( XMapRequestEvent* e ); 00307 void unmapNotifyEvent( XUnmapEvent*e ); 00308 void destroyNotifyEvent( XDestroyWindowEvent*e ); 00309 void configureRequestEvent( XConfigureRequestEvent* e ); 00310 void propertyNotifyEvent( XPropertyEvent* e ); 00311 void clientMessageEvent( XClientMessageEvent* e ); 00312 void enterNotifyEvent( XCrossingEvent* e ); 00313 void leaveNotifyEvent( XCrossingEvent* e ); 00314 void visibilityNotifyEvent( XVisibilityEvent* e ); 00315 void focusInEvent( XFocusInEvent* e ); 00316 void focusOutEvent( XFocusOutEvent* e ); 00317 00318 bool buttonPressEvent( Window w, int button, int state, int x, int y, int x_root, int y_root ); 00319 bool buttonReleaseEvent( Window w, int button, int state, int x, int y, int x_root, int y_root ); 00320 bool motionNotifyEvent( Window w, int state, int x, int y, int x_root, int y_root ); 00321 00322 void processDecorationButtonPress( int button, int state, int x, int y, int x_root, int y_root ); 00323 00324 private slots: 00325 void pingTimeout(); 00326 void processKillerExited(); 00327 00328 private: 00329 // ICCCM 4.1.3.1, 4.1.4 , NETWM 2.5.1 00330 void setMappingState( int s ); 00331 int mappingState() const; 00332 bool isIconicState() const; 00333 bool isNormalState() const; 00334 bool isManaged() const; // returns false if this client is not yet managed 00335 void updateAllowedActions( bool force = false ); 00336 QSize sizeForClientSize( const QSize&, Sizemode mode = SizemodeAny ) const; 00337 void changeMaximize( bool horizontal, bool vertical, bool adjust ); 00338 void getWmNormalHints(); 00339 void getIcons(); 00340 void getWmClientLeader(); 00341 void fetchName(); 00342 void fetchIconicName(); 00343 bool hasTransientInternal( const Client* c, bool indirect, ConstClientList& set ) const; 00344 00345 void updateWorkareaDiffs(); 00346 void checkDirection( int new_diff, int old_diff, QRect& rect, const QRect& area ); 00347 static int computeWorkareaDiff( int left, int right, int a_left, int a_right ); 00348 void configureRequest( int value_mask, int rx, int ry, int rw, int rh, int gravity = 0 ); 00349 // resizeWithChecks() resizes according to gravity, and checks workarea position 00350 void resizeWithChecks( int w, int h, ForceGeometry_t force = NormalGeometrySet ); 00351 void resizeWithChecks( const QSize& s, ForceGeometry_t force = NormalGeometrySet ); 00352 00353 bool startMoveResize(); 00354 void finishMoveResize( bool cancel ); 00355 void leaveMoveResize(); 00356 void checkUnrestrictedMoveResize(); 00357 void handleMoveResize( int x, int y, int x_root, int y_root ); 00358 void positionGeometryTip(); 00359 void updateMouseGrab(); 00360 void grabButton( int mod ); 00361 void ungrabButton( int mod ); 00362 void resetMaximize(); 00363 void resizeDecoration( const QSize& s ); 00364 00365 void pingWindow(); 00366 void killProcess( bool ask, Time timestamp = CurrentTime ); 00367 void updateUrgency(); 00368 00369 void embedClient( Window w, const XWindowAttributes &attr ); 00370 void detectNoBorder(); 00371 void destroyDecoration(); 00372 void updateFrameStrut(); 00373 00374 void rawShow(); // just shows it 00375 void rawHide(); // just hides it 00376 00377 Time readUserTimeMapTimestamp( const KStartupInfoData* asn_data, 00378 const SessionInfo* session ) const; 00379 Time readUserCreationTime() const; 00380 static bool sameAppWindowRoleMatch( const Client* c1, const Client* c2, bool active_hack ); 00381 void startupIdChanged(); 00382 00383 Window client; 00384 Window wrapper; 00385 Window frame; 00386 KDecoration* decoration; 00387 Workspace* wspace; 00388 Bridge* bridge; 00389 int desk; 00390 bool buttonDown; 00391 bool moveResizeMode; 00392 bool move_faked_activity; 00393 Window move_resize_grab_window; 00394 bool unrestrictedMoveResize; 00395 bool isMove() const 00396 { 00397 return moveResizeMode && mode == PositionCenter; 00398 } 00399 bool isResize() const 00400 { 00401 return moveResizeMode && mode != PositionCenter; 00402 } 00403 00404 Position mode; 00405 QPoint moveOffset; 00406 QPoint invertedMoveOffset; 00407 QRect moveResizeGeom; 00408 QRect initialMoveResizeGeom; 00409 XSizeHints xSizeHint; 00410 void sendSyntheticConfigureNotify(); 00411 int mapping_state; 00412 void readTransient(); 00413 Window verifyTransientFor( Window transient_for, bool set ); 00414 void addTransient( Client* cl ); 00415 void removeTransient( Client* cl ); 00416 void removeFromMainClients(); 00417 void cleanGrouping(); 00418 void checkGroupTransients(); 00419 void setTransient( Window new_transient_for_id ); 00420 Client* transient_for; 00421 Window transient_for_id; 00422 Window original_transient_for_id; 00423 ClientList transients_list; // SELI make this ordered in stacking order? 00424 ShadeMode shade_mode; 00425 uint active :1; 00426 uint keep_above : 1; // NET::KeepAbove (was stays_on_top) 00427 uint is_shape :1; 00428 uint skip_taskbar :1; 00429 uint original_skip_taskbar :1; // unaffected by KWin 00430 uint Pdeletewindow :1; // does the window understand the DeleteWindow protocol? 00431 uint Ptakefocus :1;// does the window understand the TakeFocus protocol? 00432 uint Pcontexthelp : 1; // does the window understand the ContextHelp protocol? 00433 uint Pping : 1; // does it support _NET_WM_PING? 00434 uint input :1; // does the window want input in its wm_hints 00435 uint store_settings : 1; 00436 uint skip_pager : 1; 00437 uint motif_may_resize : 1; 00438 uint motif_may_move :1; 00439 uint motif_may_close : 1; 00440 uint keep_below : 1; // NET::KeepBelow 00441 uint minimized : 1; 00442 uint hidden : 1; // forcibly hidden by calling hide() 00443 uint modal : 1; // NET::Modal 00444 uint noborder : 1; 00445 uint user_noborder : 1; 00446 uint not_obscured : 1; 00447 uint urgency : 1; // XWMHints, UrgencyHint 00448 uint ignore_focus_stealing : 1; // don't apply focus stealing prevention to this client 00449 uint check_active_modal : 1; // see Client::addTransient() 00450 void getWMHints(); 00451 void readIcons(); 00452 void getWindowProtocols(); 00453 QPixmap icon_pix; 00454 QPixmap miniicon_pix; 00455 QCursor cursor; 00456 // FullScreenHack - non-NETWM fullscreen (noborder,size of desktop) 00457 // DON'T reorder - saved to config files !!! 00458 enum FullScreenMode { FullScreenNone, FullScreenNormal, FullScreenHack }; 00459 FullScreenMode fullscreen_mode; 00460 MaximizeMode max_mode; 00461 QRect geom_restore; 00462 QRect geom_fs_restore; 00463 int workarea_diff_x, workarea_diff_y; 00464 WinInfo* info; 00465 QTimer* autoRaiseTimer; 00466 QTimer* shadeHoverTimer; 00467 Colormap cmap; 00468 QCString resource_name; 00469 QCString resource_class; 00470 QString cap_normal, cap_iconic, cap_suffix; 00471 WId wmClientLeaderWin; 00472 QCString window_role; 00473 Group* in_group; 00474 Window window_group; 00475 Layer in_layer; 00476 QTimer* ping_timer; 00477 KProcess* process_killer; 00478 Time ping_timestamp; 00479 Time user_time; 00480 unsigned long allowed_actions; 00481 QRect frame_geometry; 00482 QSize client_size; 00483 int block_geometry; // >0 - new geometry is remembered, but not actually set 00484 bool shade_geometry_change; 00485 int border_left, border_right, border_top, border_bottom; 00486 QRegion _mask; 00487 friend struct FetchNameInternalPredicate; 00488 friend struct CheckIgnoreFocusStealingProcedure; 00489 void show() { assert( false ); } // SELI remove after Client is no longer QWidget 00490 void hide() { assert( false ); } 00491 }; 00492 00493 // NET WM Protocol handler class 00494 class WinInfo : public NETWinInfo 00495 { 00496 private: 00497 typedef KWinInternal::Client Client; // because of NET::Client 00498 public: 00499 WinInfo( Client* c, Display * display, Window window, 00500 Window rwin, const unsigned long pr[], int pr_size ); 00501 virtual void changeDesktop(int desktop); 00502 virtual void changeState( unsigned long state, unsigned long mask ); 00503 private: 00504 Client * m_client; 00505 }; 00506 00507 inline Window Client::window() const 00508 { 00509 return client; 00510 } 00511 00512 inline Window Client::frameId() const 00513 { 00514 return frame; 00515 } 00516 00517 inline Window Client::wrapperId() const 00518 { 00519 return wrapper; 00520 } 00521 00522 inline Window Client::decorationId() const 00523 { 00524 return decoration != NULL ? decoration->widget()->winId() : None; 00525 } 00526 00527 inline Workspace* Client::workspace() const 00528 { 00529 return wspace; 00530 } 00531 00532 inline const Client* Client::transientFor() const 00533 { 00534 return transient_for; 00535 } 00536 00537 inline Client* Client::transientFor() 00538 { 00539 return transient_for; 00540 } 00541 00542 inline bool Client::groupTransient() const 00543 { 00544 return transient_for_id == workspace()->rootWin(); 00545 } 00546 00547 // needed because verifyTransientFor() may set transient_for_id to root window, 00548 // if the original value has a problem (window doesn't exist, etc.) 00549 inline bool Client::wasOriginallyGroupTransient() const 00550 { 00551 return original_transient_for_id == workspace()->rootWin(); 00552 } 00553 00554 inline bool Client::isTransient() const 00555 { 00556 return transient_for_id != None; 00557 } 00558 00559 inline const ClientList& Client::transients() const 00560 { 00561 return transients_list; 00562 } 00563 00564 inline const Group* Client::group() const 00565 { 00566 return in_group; 00567 } 00568 00569 inline Group* Client::group() 00570 { 00571 return in_group; 00572 } 00573 00574 inline int Client::mappingState() const 00575 { 00576 return mapping_state; 00577 } 00578 00579 inline QCString Client::resourceName() const 00580 { 00581 return resource_name; // it is always lowercase 00582 } 00583 00584 inline QCString Client::resourceClass() const 00585 { 00586 return resource_class; // it is always lowercase 00587 } 00588 00589 inline 00590 bool Client::isMinimized() const 00591 { 00592 return minimized; 00593 } 00594 00595 inline bool Client::isActive() const 00596 { 00597 return active; 00598 } 00599 00606 inline int Client::desktop() const 00607 { 00608 return desk; 00609 } 00610 00611 inline bool Client::isOnAllDesktops() const 00612 { 00613 return desk == NET::OnAllDesktops; 00614 } 00619 inline bool Client::isOnDesktop( int d ) const 00620 { 00621 return desk == d || /*desk == 0 ||*/ isOnAllDesktops(); 00622 } 00623 00624 inline 00625 bool Client::isShown( bool shaded_is_shown ) const 00626 { 00627 return !isMinimized() && ( !isShade() || shaded_is_shown ) && !hidden; 00628 } 00629 00630 inline 00631 bool Client::isShade() const 00632 { 00633 return shade_mode == ShadeNormal; 00634 } 00635 00636 inline 00637 Client::ShadeMode Client::shadeMode() const 00638 { 00639 return shade_mode; 00640 } 00641 00642 inline QPixmap Client::icon() const 00643 { 00644 return icon_pix; 00645 } 00646 00647 inline QPixmap Client::miniIcon() const 00648 { 00649 return miniicon_pix; 00650 } 00651 00652 inline QRect Client::geometryRestore() const 00653 { 00654 return geom_restore; 00655 } 00656 00657 inline Client::MaximizeMode Client::maximizeMode() const 00658 { 00659 return max_mode; 00660 } 00661 00662 inline bool Client::skipTaskbar( bool from_outside ) const 00663 { 00664 return from_outside ? original_skip_taskbar : skip_taskbar; 00665 } 00666 00667 inline bool Client::skipPager() const 00668 { 00669 return skip_pager; 00670 } 00671 00672 inline bool Client::keepAbove() const 00673 { 00674 return keep_above; 00675 } 00676 00677 inline bool Client::keepBelow() const 00678 { 00679 return keep_below; 00680 } 00681 00682 inline bool Client::storeSettings() const 00683 { 00684 return store_settings; 00685 } 00686 00687 inline void Client::setStoreSettings( bool b ) 00688 { 00689 store_settings = b; 00690 } 00691 00692 00693 inline bool Client::shape() const 00694 { 00695 return is_shape; 00696 } 00697 00698 00699 inline bool Client::isFullScreen() const 00700 { 00701 return fullscreen_mode != FullScreenNone; 00702 } 00703 00704 inline bool Client::isModal() const 00705 { 00706 return modal; 00707 } 00708 00709 inline bool Client::hasNETSupport() const 00710 { 00711 return info->hasNETSupport(); 00712 } 00713 00714 inline Colormap Client::colormap() const 00715 { 00716 return cmap; 00717 } 00718 00719 inline pid_t Client::pid() const 00720 { 00721 return info->pid(); 00722 } 00723 00724 inline void Client::invalidateLayer() 00725 { 00726 in_layer = UnknownLayer; 00727 } 00728 00729 inline bool Client::isIconicState() const 00730 { 00731 return mapping_state == IconicState; 00732 } 00733 00734 inline bool Client::isNormalState() const 00735 { 00736 return mapping_state == NormalState; 00737 } 00738 00739 inline bool Client::isManaged() const 00740 { 00741 return mapping_state != WithdrawnState; 00742 } 00743 00744 inline QCString Client::windowRole() const 00745 { 00746 return window_role; 00747 } 00748 00749 inline QRect Client::geometry() const 00750 { 00751 return frame_geometry; 00752 } 00753 00754 inline QSize Client::size() const 00755 { 00756 return frame_geometry.size(); 00757 } 00758 00759 inline QSize Client::minSize() const 00760 { 00761 return QSize( xSizeHint.min_width, xSizeHint.min_height ); 00762 } 00763 00764 inline QPoint Client::pos() const 00765 { 00766 return frame_geometry.topLeft(); 00767 } 00768 00769 inline int Client::x() const 00770 { 00771 return frame_geometry.x(); 00772 } 00773 00774 inline int Client::y() const 00775 { 00776 return frame_geometry.y(); 00777 } 00778 00779 inline int Client::width() const 00780 { 00781 return frame_geometry.width(); 00782 } 00783 00784 inline int Client::height() const 00785 { 00786 return frame_geometry.height(); 00787 } 00788 00789 inline QRect Client::rect() const 00790 { 00791 return QRect( 0, 0, width(), height()); 00792 } 00793 00794 inline QPoint Client::clientPos() const 00795 { 00796 return QPoint( border_left, border_top ); 00797 } 00798 00799 inline QSize Client::clientSize() const 00800 { 00801 return client_size; 00802 } 00803 00804 inline void Client::setGeometry( const QRect& r, ForceGeometry_t force ) 00805 { 00806 setGeometry( r.x(), r.y(), r.width(), r.height(), force ); 00807 } 00808 00809 inline void Client::move( const QPoint & p, ForceGeometry_t force ) 00810 { 00811 move( p.x(), p.y(), force ); 00812 } 00813 00814 inline void Client::plainResize( const QSize& s, ForceGeometry_t force ) 00815 { 00816 plainResize( s.width(), s.height(), force ); 00817 } 00818 00819 inline void Client::resizeWithChecks( const QSize& s, ForceGeometry_t force ) 00820 { 00821 resizeWithChecks( s.width(), s.height(), force ); 00822 } 00823 00824 inline bool Client::hasUserTimeSupport() const 00825 { 00826 return info->userTime() != -1U; 00827 } 00828 00829 inline bool Client::ignoreFocusStealing() const 00830 { 00831 return ignore_focus_stealing; 00832 } 00833 00834 KWIN_PROCEDURE( CheckIgnoreFocusStealingProcedure, cl->ignore_focus_stealing = options->checkIgnoreFocusStealing( cl )); 00835 00836 inline Window Client::moveResizeGrabWindow() const 00837 { 00838 return move_resize_grab_window; 00839 } 00840 00841 #ifdef NDEBUG 00842 kndbgstream& operator<<( kndbgstream& stream, const Client* ); 00843 kndbgstream& operator<<( kndbgstream& stream, const ClientList& ); 00844 kndbgstream& operator<<( kndbgstream& stream, const ConstClientList& ); 00845 #else 00846 kdbgstream& operator<<( kdbgstream& stream, const Client* ); 00847 kdbgstream& operator<<( kdbgstream& stream, const ClientList& ); 00848 kdbgstream& operator<<( kdbgstream& stream, const ConstClientList& ); 00849 #endif 00850 00851 KWIN_COMPARE_PREDICATE( WindowMatchPredicate, Window, cl->window() == value ); 00852 KWIN_COMPARE_PREDICATE( FrameIdMatchPredicate, Window, cl->frameId() == value ); 00853 KWIN_COMPARE_PREDICATE( WrapperIdMatchPredicate, Window, cl->wrapperId() == value ); 00854 00855 } // namespace 00856 00857 #endif
KDE Logo
This file is part of the documentation for kwin Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Aug 31 00:02:12 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003