00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef KWIN_CLIENT_H
00013 #define KWIN_CLIENT_H
00014
00015 #include <tqframe.h>
00016 #include <tqvbox.h>
00017 #include <tqpixmap.h>
00018 #include <netwm.h>
00019 #include <kdebug.h>
00020 #include <assert.h>
00021 #include <tdeshortcut.h>
00022 #include <X11/X.h>
00023 #include <X11/Xlib.h>
00024 #include <X11/Xutil.h>
00025 #include <fixx11h.h>
00026
00027 #include "utils.h"
00028 #include "options.h"
00029 #include "workspace.h"
00030 #include "kdecoration.h"
00031 #include "rules.h"
00032
00033 class TQTimer;
00034 class TDEProcess;
00035 class TDEStartupInfoData;
00036
00037 namespace KWinInternal
00038 {
00039
00040 class Workspace;
00041 class Client;
00042 class WinInfo;
00043 class SessionInfo;
00044 class Bridge;
00045
00046 class Client : public TQObject, public KDecorationDefines
00047 {
00048 Q_OBJECT
00049 public:
00050 Client( Workspace *ws );
00051 Window window() const;
00052 Window frameId() const;
00053 Window wrapperId() const;
00054 Window decorationId() const;
00055
00056 Workspace* workspace() const;
00057 const Client* transientFor() const;
00058 Client* transientFor();
00059 bool isTransient() const;
00060 bool isModalSystemNotification() const;
00061 bool groupTransient() const;
00062 bool wasOriginallyGroupTransient() const;
00063 ClientList mainClients() const;
00064 bool hasTransient( const Client* c, bool indirect ) const;
00065 const ClientList& transients() const;
00066 void checkTransient( Window w );
00067 Client* findModal();
00068 const Group* group() const;
00069 Group* group();
00070 void checkGroup( Group* gr = NULL, bool force = false );
00071 void changeClientLeaderGroup( Group* gr );
00072
00073 NET::WindowType windowType( bool direct = false, int supported_types = SUPPORTED_WINDOW_TYPES_MASK ) const;
00074 const WindowRules* rules() const;
00075 void removeRule( Rules* r );
00076 void setupWindowRules( bool ignore_temporary );
00077 void applyWindowRules();
00078 void updateWindowRules();
00079
00080 TQRect geometry() const;
00081 TQSize size() const;
00082 TQSize minSize() const;
00083 TQSize maxSize() const;
00084 TQPoint pos() const;
00085 TQRect rect() const;
00086 int x() const;
00087 int y() const;
00088 int width() const;
00089 int height() const;
00090 TQPoint clientPos() const;
00091 TQSize clientSize() const;
00092
00093 bool windowEvent( XEvent* e );
00094 virtual bool eventFilter( TQObject* o, TQEvent* e );
00095
00096 bool manage( Window w, bool isMapped );
00097
00098 void releaseWindow( bool on_shutdown = false );
00099
00100 enum Sizemode
00101 {
00102 SizemodeAny,
00103 SizemodeFixedW,
00104 SizemodeFixedH,
00105 SizemodeMax
00106 };
00107 TQSize adjustedSize( const TQSize&, Sizemode mode = SizemodeAny ) const;
00108 TQSize adjustedSize() const;
00109
00110 TQPixmap icon() const;
00111 TQPixmap miniIcon() const;
00112
00113 bool isActive() const;
00114 void setActive( bool, bool updateOpacity = true );
00115
00116 bool isSuspendable() const;
00117 bool isResumeable() const;
00118
00119 int desktop() const;
00120 void setDesktop( int );
00121 bool isOnDesktop( int d ) const;
00122 bool isOnCurrentDesktop() const;
00123 bool isOnAllDesktops() const;
00124 void setOnAllDesktops( bool set );
00125
00126 bool isOnScreen( int screen ) const;
00127 int screen() const;
00128
00129
00130 bool isShown( bool shaded_is_shown ) const;
00131
00132 bool isShade() const;
00133 ShadeMode shadeMode() const;
00134 void setShade( ShadeMode mode );
00135 bool isShadeable() const;
00136
00137 bool isMinimized() const;
00138 bool isMaximizable() const;
00139 TQRect geometryRestore() const;
00140 MaximizeMode maximizeModeRestore() const;
00141 MaximizeMode maximizeMode() const;
00142 bool isMinimizable() const;
00143 void setMaximize( bool vertically, bool horizontally );
00144
00145 void setFullScreen( bool set, bool user );
00146 bool isFullScreen() const;
00147 bool isFullScreenable( bool fullscreen_hack = false ) const;
00148 bool userCanSetFullScreen() const;
00149 TQRect geometryFSRestore() const { return geom_fs_restore; }
00150 int fullScreenMode() const { return fullscreen_mode; }
00151
00152 bool isUserNoBorder() const;
00153 void setUserNoBorder( bool set );
00154 bool userCanSetNoBorder() const;
00155 bool noBorder() const;
00156
00157 bool skipTaskbar( bool from_outside = false ) const;
00158 void setSkipTaskbar( bool set, bool from_outside );
00159
00160 bool skipPager() const;
00161 void setSkipPager( bool );
00162
00163 bool keepAbove() const;
00164 void setKeepAbove( bool );
00165 bool keepBelow() const;
00166 void setKeepBelow( bool );
00167 Layer layer() const;
00168 Layer belongsToLayer() const;
00169 void invalidateLayer();
00170
00171 void setModal( bool modal );
00172 bool isModal() const;
00173
00174
00175 bool wantsTabFocus() const;
00176 bool wantsInput() const;
00177 bool hasNETSupport() const;
00178 bool isMovable() const;
00179 bool isDesktop() const;
00180 bool isDock() const;
00181 bool isToolbar() const;
00182 bool isTopMenu() const;
00183 bool isMenu() const;
00184 bool isNormalWindow() const;
00185 bool isDialog() const;
00186 bool isSplash() const;
00187 bool isUtility() const;
00188
00189
00190
00191
00192 bool isSpecialWindow() const;
00193
00194 bool isResizable() const;
00195 bool isCloseable() const;
00196
00197 void takeActivity( int flags, bool handled, allowed_t );
00198 void takeFocus( allowed_t );
00199 void demandAttention( bool set = true );
00200
00201 void setMask( const TQRegion& r, int mode = X::Unsorted );
00202 TQRegion mask() const;
00203
00204 void updateDecoration( bool check_workspace_pos, bool force = false );
00205 void checkBorderSizes();
00206
00207
00208 bool isShadowed() const;
00209 void setShadowed(bool shadowed);
00210 Window shadowId() const;
00211
00212
00213
00214 friend void Workspace::raiseClient(Client *);
00215
00216
00217
00218 friend void Workspace::updateOverlappingShadows(WId);
00219
00220
00221 bool shape() const;
00222 void updateShape();
00223
00224 void setGeometry( int x, int y, int w, int h, ForceGeometry_t force = NormalGeometrySet );
00225 void setGeometry( const TQRect& r, ForceGeometry_t force = NormalGeometrySet );
00226 void move( int x, int y, ForceGeometry_t force = NormalGeometrySet );
00227 void move( const TQPoint & p, ForceGeometry_t force = NormalGeometrySet );
00228
00229 void plainResize( int w, int h, ForceGeometry_t force = NormalGeometrySet );
00230 void plainResize( const TQSize& s, ForceGeometry_t force = NormalGeometrySet );
00231
00232 void resizeWithChecks( int w, int h, ForceGeometry_t force = NormalGeometrySet );
00233 void resizeWithChecks( const TQSize& s, ForceGeometry_t force = NormalGeometrySet );
00234 void keepInArea( TQRect area, bool partial = false );
00235
00236 void growHorizontal();
00237 void shrinkHorizontal();
00238 void growVertical();
00239 void shrinkVertical();
00240
00241 bool providesContextHelp() const;
00242 TDEShortcut shortcut() const;
00243 void setShortcut( const TQString& cut );
00244
00245 bool performMouseCommand( Options::MouseCommand, TQPoint globalPos, bool handled = false );
00246
00247 TQCString windowRole() const;
00248 TQCString sessionId();
00249 TQCString resourceName() const;
00250 TQCString resourceClass() const;
00251 TQCString wmCommand();
00252 TQCString wmClientMachine( bool use_localhost ) const;
00253 Window wmClientLeader() const;
00254 pid_t pid() const;
00255
00256 TQRect adjustedClientArea( const TQRect& desktop, const TQRect& area ) const;
00257
00258 Colormap colormap() const;
00259
00260
00261 void updateVisibility();
00262
00263 void hideClient( bool hide );
00264
00265 TQString caption( bool full = true ) const;
00266 void updateCaption();
00267
00268 void keyPressEvent( uint key_code );
00269 void updateMouseGrab();
00270 Window moveResizeGrabWindow() const;
00271
00272 const TQPoint calculateGravitation( bool invert, int gravity = 0 ) const;
00273
00274 void NETMoveResize( int x_root, int y_root, NET::Direction direction );
00275 void NETMoveResizeWindow( int flags, int x, int y, int width, int height );
00276 void restackWindow( Window above, int detail, NET::RequestSource source, Time timestamp, bool send_event = false );
00277
00278 void gotPing( Time timestamp );
00279
00280 static TQCString staticWindowRole(WId);
00281 static TQCString staticSessionId(WId);
00282 static TQCString staticWmCommand(WId);
00283 static TQCString staticWmClientMachine(WId);
00284 static Window staticWmClientLeader(WId);
00285
00286 void checkWorkspacePosition();
00287 void updateUserTime( Time time = CurrentTime );
00288 Time userTime() const;
00289 bool hasUserTimeSupport() const;
00290 bool ignoreFocusStealing() const;
00291
00292
00293 static void deleteClient( Client* c, allowed_t );
00294
00295 static bool resourceMatch( const Client* c1, const Client* c2 );
00296 static bool belongToSameApplication( const Client* c1, const Client* c2, bool active_hack = false );
00297 static void readIcons( Window win, TQPixmap* icon, TQPixmap* miniicon );
00298
00299 void minimize( bool avoid_animation = false );
00300 void unminimize( bool avoid_animation = false );
00301 void closeWindow();
00302 void killWindow();
00303 void suspendWindow();
00304 void resumeWindow();
00305 bool queryUserSuspendedResume();
00306 void maximize( MaximizeMode );
00307 void toggleShade();
00308 void showContextHelp();
00309 void cancelShadeHover();
00310 void cancelAutoRaise();
00311 void destroyClient();
00312 void checkActiveModal();
00313 void setOpacity(bool translucent, uint opacity = 0);
00314 void setShadowSize(uint shadowSize);
00315 void updateOpacity();
00316 void updateShadowSize();
00317 bool hasCustomOpacity(){return custom_opacity;}
00318 void setCustomOpacityFlag(bool custom = true);
00319 bool getWindowOpacity();
00320 int opacityPercentage();
00321 void checkAndSetInitialRuledOpacity();
00322 uint ruleOpacityInactive();
00323 uint ruleOpacityActive();
00324 unsigned int opacity();
00325 bool isBMP();
00326 void setBMP(bool b);
00327 bool touches(const Client* c);
00328 void setShapable(bool b);
00329 bool hasStrut() const;
00330
00331 private slots:
00332 void autoRaise();
00333 void shadeHover();
00334 void shortcutActivated();
00335 void updateOpacityCache();
00336
00337
00338 private:
00339 friend class Bridge;
00340 virtual void processMousePressEvent( TQMouseEvent* e );
00341
00342 private:
00343
00344 virtual ~Client();
00345
00346 Position mousePosition( const TQPoint& ) const;
00347 void setCursor( Position m );
00348 void setCursor( const TQCursor& c );
00349
00350 void animateMinimizeOrUnminimize( bool minimize );
00351 TQPixmap animationPixmap( int w );
00352
00353 void drawbound( const TQRect& geom );
00354 void clearbound();
00355 void doDrawbound( const TQRect& geom, bool clear );
00356
00357
00358 bool mapRequestEvent( XMapRequestEvent* e );
00359 void unmapNotifyEvent( XUnmapEvent*e );
00360 void destroyNotifyEvent( XDestroyWindowEvent*e );
00361 void configureRequestEvent( XConfigureRequestEvent* e );
00362 void propertyNotifyEvent( XPropertyEvent* e );
00363 void clientMessageEvent( XClientMessageEvent* e );
00364 void enterNotifyEvent( XCrossingEvent* e );
00365 void leaveNotifyEvent( XCrossingEvent* e );
00366 void focusInEvent( XFocusInEvent* e );
00367 void focusOutEvent( XFocusOutEvent* e );
00368
00369 bool buttonPressEvent( Window w, int button, int state, int x, int y, int x_root, int y_root );
00370 bool buttonReleaseEvent( Window w, int button, int state, int x, int y, int x_root, int y_root );
00371 bool motionNotifyEvent( Window w, int state, int x, int y, int x_root, int y_root );
00372
00373
00374 void drawIntersectingShadows();
00375 void drawOverlappingShadows(bool waitForMe);
00376 TQRegion getExposedRegion(TQRegion occludedRegion, int x, int y,
00377 int w, int h, int thickness, int xOffset, int yOffset);
00378 void imposeCachedShadow(TQPixmap &pixmap, TQRegion exposed);
00379 void imposeRegionShadow(TQPixmap &pixmap, TQRegion occluded,
00380 TQRegion exposed, int thickness, double maxOpacity = 0.75);
00381
00382 void processDecorationButtonPress( int button, int state, int x, int y, int x_root, int y_root );
00383
00384 private slots:
00385 void pingTimeout();
00386 void processKillerExited();
00387 void processResumerExited();
00388 void demandAttentionKNotify();
00389 void drawShadow();
00390 void drawShadowAfter(Client *after);
00391 void drawDelayedShadow();
00392 void removeShadow();
00393
00394 signals:
00395 void shadowDrawn();
00396
00397
00398 private:
00399
00400 void setMappingState( int s );
00401 int mappingState() const;
00402 bool isIconicState() const;
00403 bool isNormalState() const;
00404 bool isManaged() const;
00405 void updateAllowedActions( bool force = false );
00406 TQSize sizeForClientSize( const TQSize&, Sizemode mode = SizemodeAny, bool noframe = false ) const;
00407 void changeMaximize( bool horizontal, bool vertical, bool adjust );
00408 void checkMaximizeGeometry();
00409 int checkFullScreenHack( const TQRect& geom ) const;
00410 void updateFullScreenHack( const TQRect& geom );
00411 void getWmNormalHints();
00412 void getMotifHints();
00413 void getIcons();
00414 void getWmClientLeader();
00415 void getWmClientMachine();
00416 void fetchName();
00417 void fetchIconicName();
00418 TQString readName() const;
00419 void setCaption( const TQString& s, bool force = false );
00420 bool hasTransientInternal( const Client* c, bool indirect, ConstClientList& set ) const;
00421 void finishWindowRules();
00422 void setShortcutInternal( const TDEShortcut& cut );
00423
00424 void updateWorkareaDiffs();
00425 void checkDirection( int new_diff, int old_diff, TQRect& rect, const TQRect& area );
00426 static int computeWorkareaDiff( int left, int right, int a_left, int a_right );
00427 void configureRequest( int value_mask, int rx, int ry, int rw, int rh, int gravity, bool from_tool );
00428 NETExtendedStrut strut() const;
00429 int checkShadeGeometry( int w, int h );
00430 void postponeGeometryUpdates( bool postpone );
00431
00432 bool startMoveResize();
00433 void finishMoveResize( bool cancel );
00434 void leaveMoveResize();
00435 void checkUnrestrictedMoveResize();
00436 void handleMoveResize( int x, int y, int x_root, int y_root );
00437 void positionGeometryTip();
00438 void grabButton( int mod );
00439 void ungrabButton( int mod );
00440 void resetMaximize();
00441 void resizeDecoration( const TQSize& s );
00442 void setDecoHashProperty(uint topHeight, uint rightWidth, uint bottomHeight, uint leftWidth);
00443 void unsetDecoHashProperty();
00444
00445 void pingWindow();
00446 void killProcess( bool ask, Time timestamp = CurrentTime );
00447 void updateUrgency();
00448 static void sendClientMessage( Window w, Atom a, Atom protocol,
00449 long data1 = 0, long data2 = 0, long data3 = 0 );
00450
00451 void embedClient( Window w, const XWindowAttributes &attr );
00452 void detectNoBorder();
00453 void detectShapable();
00454 void destroyDecoration();
00455 void updateFrameExtents();
00456
00457 void rawShow();
00458 void rawHide();
00459
00460 Time readUserTimeMapTimestamp( const TDEStartupInfoId* asn_id, const TDEStartupInfoData* asn_data,
00461 bool session ) const;
00462 Time readUserCreationTime() const;
00463 static bool sameAppWindowRoleMatch( const Client* c1, const Client* c2, bool active_hack );
00464 void startupIdChanged();
00465
00466 Window client;
00467 Window wrapper;
00468 Window frame;
00469 KDecoration* decoration;
00470 Workspace* wspace;
00471 Bridge* bridge;
00472 int desk;
00473 bool buttonDown;
00474 bool moveResizeMode;
00475 bool move_faked_activity;
00476 Window move_resize_grab_window;
00477 bool unrestrictedMoveResize;
00478 bool isMove() const
00479 {
00480 return moveResizeMode && mode == PositionCenter;
00481 }
00482 bool isResize() const
00483 {
00484 return moveResizeMode && mode != PositionCenter;
00485 }
00486
00487 Position mode;
00488 TQPoint moveOffset;
00489 TQPoint invertedMoveOffset;
00490 TQRect moveResizeGeom;
00491 TQRect initialMoveResizeGeom;
00492 XSizeHints xSizeHint;
00493 void sendSyntheticConfigureNotify();
00494 int mapping_state;
00495 void readTransient();
00496 Window verifyTransientFor( Window transient_for, bool set );
00497 void addTransient( Client* cl );
00498 void removeTransient( Client* cl );
00499 void removeFromMainClients();
00500 void cleanGrouping();
00501 void checkGroupTransients();
00502 void setTransient( Window new_transient_for_id );
00503 Client* transient_for;
00504 Window transient_for_id;
00505 Window original_transient_for_id;
00506 ClientList transients_list;
00507 ShadeMode shade_mode;
00508 uint active :1;
00509 uint deleting : 1;
00510 uint keep_above : 1;
00511 uint is_shape :1;
00512 uint skip_taskbar :1;
00513 uint original_skip_taskbar :1;
00514 uint Pdeletewindow :1;
00515 uint Ptakefocus :1;
00516 uint Ptakeactivity : 1;
00517 uint Pcontexthelp : 1;
00518 uint Pping : 1;
00519 uint input :1;
00520 uint skip_pager : 1;
00521 uint motif_noborder : 1;
00522 uint motif_may_resize : 1;
00523 uint motif_may_move :1;
00524 uint motif_may_close : 1;
00525 uint keep_below : 1;
00526 uint minimized : 1;
00527 uint hidden : 1;
00528 uint modal : 1;
00529 uint noborder : 1;
00530 uint user_noborder : 1;
00531 uint urgency : 1;
00532 uint ignore_focus_stealing : 1;
00533 uint demands_attention : 1;
00534 WindowRules client_rules;
00535 void getWMHints();
00536 void readIcons();
00537 void getWindowProtocols();
00538 TQPixmap icon_pix;
00539 TQPixmap miniicon_pix;
00540 TQCursor cursor;
00541
00542
00543 enum FullScreenMode { FullScreenNone, FullScreenNormal, FullScreenHack };
00544 FullScreenMode fullscreen_mode;
00545 MaximizeMode max_mode;
00546 TQRect geom_restore;
00547 TQRect geom_fs_restore;
00548 MaximizeMode maxmode_restore;
00549 int workarea_diff_x, workarea_diff_y;
00550 WinInfo* info;
00551 TQTimer* autoRaiseTimer;
00552 TQTimer* shadeHoverTimer;
00553 Colormap cmap;
00554 TQCString resource_name;
00555 TQCString resource_class;
00556 TQCString client_machine;
00557 TQString cap_normal, cap_iconic, cap_suffix;
00558 WId wmClientLeaderWin;
00559 TQCString window_role;
00560 Group* in_group;
00561 Window window_group;
00562 Layer in_layer;
00563 TQTimer* ping_timer;
00564 TDEProcess* process_killer;
00565 TDEProcess* process_resumer;
00566 Time ping_timestamp;
00567 Time user_time;
00568 unsigned long allowed_actions;
00569 TQRect frame_geometry;
00570 TQSize client_size;
00571 int postpone_geometry_updates;
00572 bool pending_geometry_update;
00573 bool shade_geometry_change;
00574 int border_left, border_right, border_top, border_bottom;
00575
00576 Client* shadowAfterClient;
00577 TQWidget* shadowWidget;
00578 TQMemArray<double> activeOpacityCache;
00579 TQMemArray<double> inactiveOpacityCache;
00580 TQMemArray<double>* opacityCache;
00581 TQRegion shapeBoundingRegion;
00582 TQTimer* shadowDelayTimer;
00583 bool shadowMe;
00584
00585 TQRegion _mask;
00586 static bool check_active_modal;
00587 TDEShortcut _shortcut;
00588 friend struct FetchNameInternalPredicate;
00589 friend struct CheckIgnoreFocusStealingProcedure;
00590 friend struct ResetupRulesProcedure;
00591 friend class GeometryUpdatesPostponer;
00592 void show() { assert( false ); }
00593 void hide() { assert( false ); }
00594 uint opacity_;
00595 uint savedOpacity_;
00596 bool custom_opacity;
00597 uint rule_opacity_active;
00598 uint rule_opacity_inactive;
00599
00600 bool isBMP_;
00601 TQTimer* demandAttentionKNotifyTimer;
00602
00603 friend bool performTransiencyCheck();
00604 bool minimized_before_suspend;
00605 };
00606
00607
00608 class GeometryUpdatesPostponer
00609 {
00610 public:
00611 GeometryUpdatesPostponer( Client* c )
00612 : cl( c ) { cl->postponeGeometryUpdates( true ); }
00613 ~GeometryUpdatesPostponer()
00614 { cl->postponeGeometryUpdates( false ); }
00615 private:
00616 Client* cl;
00617 };
00618
00619
00620
00621 class WinInfo : public NETWinInfo
00622 {
00623 private:
00624 typedef KWinInternal::Client Client;
00625 public:
00626 WinInfo( Client* c, Display * display, Window window,
00627 Window rwin, const unsigned long pr[], int pr_size );
00628 virtual void changeDesktop(int desktop);
00629 virtual void changeState( unsigned long state, unsigned long mask );
00630 private:
00631 Client * m_client;
00632 };
00633
00634 inline Window Client::window() const
00635 {
00636 return client;
00637 }
00638
00639 inline Window Client::frameId() const
00640 {
00641 return frame;
00642 }
00643
00644 inline Window Client::wrapperId() const
00645 {
00646 return wrapper;
00647 }
00648
00649 inline Window Client::decorationId() const
00650 {
00651 return decoration != NULL ? decoration->widget()->winId() : None;
00652 }
00653
00654 inline Workspace* Client::workspace() const
00655 {
00656 return wspace;
00657 }
00658
00659 inline const Client* Client::transientFor() const
00660 {
00661 return transient_for;
00662 }
00663
00664 inline Client* Client::transientFor()
00665 {
00666 return transient_for;
00667 }
00668
00669 inline bool Client::groupTransient() const
00670 {
00671 return transient_for_id == workspace()->rootWin();
00672 }
00673
00674
00675
00676 inline bool Client::wasOriginallyGroupTransient() const
00677 {
00678 return original_transient_for_id == workspace()->rootWin();
00679 }
00680
00681 inline bool Client::isTransient() const
00682 {
00683 return transient_for_id != None;
00684 }
00685
00686 inline const ClientList& Client::transients() const
00687 {
00688 return transients_list;
00689 }
00690
00691 inline const Group* Client::group() const
00692 {
00693 return in_group;
00694 }
00695
00696 inline Group* Client::group()
00697 {
00698 return in_group;
00699 }
00700
00701 inline int Client::mappingState() const
00702 {
00703 return mapping_state;
00704 }
00705
00706 inline TQCString Client::resourceName() const
00707 {
00708 return resource_name;
00709 }
00710
00711 inline TQCString Client::resourceClass() const
00712 {
00713 return resource_class;
00714 }
00715
00716 inline
00717 bool Client::isMinimized() const
00718 {
00719 return minimized;
00720 }
00721
00722 inline bool Client::isActive() const
00723 {
00724 return active;
00725 }
00726
00733 inline int Client::desktop() const
00734 {
00735 return desk;
00736 }
00737
00738 inline bool Client::isOnAllDesktops() const
00739 {
00740 return desk == NET::OnAllDesktops;
00741 }
00746 inline bool Client::isOnDesktop( int d ) const
00747 {
00748 return desk == d || isOnAllDesktops();
00749 }
00750
00751 inline
00752 bool Client::isShown( bool shaded_is_shown ) const
00753 {
00754 return !isMinimized() && ( !isShade() || shaded_is_shown ) && !hidden;
00755 }
00756
00757 inline
00758 bool Client::isShade() const
00759 {
00760 return shade_mode == ShadeNormal;
00761 }
00762
00763 inline
00764 ShadeMode Client::shadeMode() const
00765 {
00766 return shade_mode;
00767 }
00768
00769 inline TQPixmap Client::icon() const
00770 {
00771 return icon_pix;
00772 }
00773
00774 inline TQPixmap Client::miniIcon() const
00775 {
00776 return miniicon_pix;
00777 }
00778
00779 inline TQRect Client::geometryRestore() const
00780 {
00781 return geom_restore;
00782 }
00783
00784 inline Client::MaximizeMode Client::maximizeModeRestore() const
00785 {
00786 return maxmode_restore;
00787 }
00788
00789 inline Client::MaximizeMode Client::maximizeMode() const
00790 {
00791 return max_mode;
00792 }
00793
00794 inline bool Client::skipTaskbar( bool from_outside ) const
00795 {
00796 return from_outside ? original_skip_taskbar : skip_taskbar;
00797 }
00798
00799 inline bool Client::skipPager() const
00800 {
00801 return skip_pager;
00802 }
00803
00804 inline bool Client::keepBelow() const
00805 {
00806 return keep_below;
00807 }
00808
00809 inline bool Client::shape() const
00810 {
00811 return is_shape;
00812 }
00813
00814
00815 inline bool Client::isFullScreen() const
00816 {
00817 return fullscreen_mode != FullScreenNone;
00818 }
00819
00820 inline bool Client::isModal() const
00821 {
00822 return modal;
00823 }
00824
00825 inline bool Client::hasNETSupport() const
00826 {
00827 return info->hasNETSupport();
00828 }
00829
00830 inline Colormap Client::colormap() const
00831 {
00832 return cmap;
00833 }
00834
00835 inline pid_t Client::pid() const
00836 {
00837 return info->pid();
00838 }
00839
00840 inline void Client::invalidateLayer()
00841 {
00842 in_layer = UnknownLayer;
00843 }
00844
00845 inline bool Client::isIconicState() const
00846 {
00847 return mapping_state == IconicState;
00848 }
00849
00850 inline bool Client::isNormalState() const
00851 {
00852 return mapping_state == NormalState;
00853 }
00854
00855 inline bool Client::isManaged() const
00856 {
00857 return mapping_state != WithdrawnState;
00858 }
00859
00860 inline TQCString Client::windowRole() const
00861 {
00862 return window_role;
00863 }
00864
00865 inline TQRect Client::geometry() const
00866 {
00867 return frame_geometry;
00868 }
00869
00870 inline TQSize Client::size() const
00871 {
00872 return frame_geometry.size();
00873 }
00874
00875 inline TQPoint Client::pos() const
00876 {
00877 return frame_geometry.topLeft();
00878 }
00879
00880 inline int Client::x() const
00881 {
00882 return frame_geometry.x();
00883 }
00884
00885 inline int Client::y() const
00886 {
00887 return frame_geometry.y();
00888 }
00889
00890 inline int Client::width() const
00891 {
00892 return frame_geometry.width();
00893 }
00894
00895 inline int Client::height() const
00896 {
00897 return frame_geometry.height();
00898 }
00899
00900 inline TQRect Client::rect() const
00901 {
00902 return TQRect( 0, 0, width(), height());
00903 }
00904
00905 inline TQPoint Client::clientPos() const
00906 {
00907 return TQPoint( border_left, border_top );
00908 }
00909
00910 inline TQSize Client::clientSize() const
00911 {
00912 return client_size;
00913 }
00914
00915 inline void Client::setGeometry( const TQRect& r, ForceGeometry_t force )
00916 {
00917 setGeometry( r.x(), r.y(), r.width(), r.height(), force );
00918 }
00919
00920 inline void Client::move( const TQPoint & p, ForceGeometry_t force )
00921 {
00922 move( p.x(), p.y(), force );
00923 }
00924
00925 inline void Client::plainResize( const TQSize& s, ForceGeometry_t force )
00926 {
00927 plainResize( s.width(), s.height(), force );
00928 }
00929
00930 inline bool Client::isShadowed() const
00931 {
00932 return shadowMe;
00933 }
00934
00935 inline Window Client::shadowId() const
00936 {
00937 return shadowWidget != NULL ? shadowWidget->winId() : None;
00938 }
00939
00940 inline void Client::resizeWithChecks( const TQSize& s, ForceGeometry_t force )
00941 {
00942 resizeWithChecks( s.width(), s.height(), force );
00943 }
00944
00945 inline bool Client::hasUserTimeSupport() const
00946 {
00947 return info->userTime() != -1U;
00948 }
00949
00950 inline bool Client::ignoreFocusStealing() const
00951 {
00952 return ignore_focus_stealing;
00953 }
00954
00955 inline const WindowRules* Client::rules() const
00956 {
00957 return &client_rules;
00958 }
00959
00960 KWIN_PROCEDURE( CheckIgnoreFocusStealingProcedure, cl->ignore_focus_stealing = options->checkIgnoreFocusStealing( cl ));
00961
00962 inline Window Client::moveResizeGrabWindow() const
00963 {
00964 return move_resize_grab_window;
00965 }
00966
00967 inline TDEShortcut Client::shortcut() const
00968 {
00969 return _shortcut;
00970 }
00971
00972 inline bool Client::isBMP()
00973 {
00974 return isBMP_;
00975 }
00976
00977 inline void Client::setBMP(bool b)
00978 {
00979 isBMP_ = b;
00980 }
00981
00982 inline void Client::removeRule( Rules* rule )
00983 {
00984 client_rules.remove( rule );
00985 }
00986
00987 #ifdef NDEBUG
00988 inline
00989 kndbgstream& operator<<( kndbgstream& stream, const Client* ) { return stream; }
00990 inline
00991 kndbgstream& operator<<( kndbgstream& stream, const ClientList& ) { return stream; }
00992 inline
00993 kndbgstream& operator<<( kndbgstream& stream, const ConstClientList& ) { return stream; }
00994 #else
00995 kdbgstream& operator<<( kdbgstream& stream, const Client* );
00996 kdbgstream& operator<<( kdbgstream& stream, const ClientList& );
00997 kdbgstream& operator<<( kdbgstream& stream, const ConstClientList& );
00998 #endif
00999
01000 KWIN_COMPARE_PREDICATE( WindowMatchPredicate, Window, cl->window() == value );
01001 KWIN_COMPARE_PREDICATE( FrameIdMatchPredicate, Window, cl->frameId() == value );
01002 KWIN_COMPARE_PREDICATE( WrapperIdMatchPredicate, Window, cl->wrapperId() == value );
01003
01004 }
01005
01006 #endif