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 Mon Aug 16 14:44:21 2004 by doxygen 1.3.6 written by Dimitri van Heesch, © 1997-2003