kwin Library API Documentation

rules.h

00001 /*****************************************************************
00002  KWin - the KDE window manager
00003  This file is part of the KDE project.
00004 
00005 Copyright (C) 2004 Lubos Lunak <l.lunak@kde.org>
00006 
00007 You can Freely distribute this program under the GNU General Public
00008 License. See the file "COPYING" for the exact licensing terms.
00009 ******************************************************************/
00010 
00011 #ifndef KWIN_RULES_H
00012 #define KWIN_RULES_H
00013 
00014 #include <qstring.h>
00015 #include <netwm_def.h>
00016 #include <qrect.h>
00017 #include <qvaluevector.h>
00018 #include <kdebug.h>
00019 
00020 #include "placement.h"
00021 #include "lib/kdecoration.h"
00022 #include "options.h"
00023 #include "utils.h"
00024 
00025 class KConfig;
00026 
00027 namespace KWinInternal
00028 {
00029 
00030 class Client;
00031 class Rules;
00032 
00033 #ifndef KCMRULES // only for kwin core
00034 
00035 class WindowRules
00036     : public KDecorationDefines
00037     {
00038     public:
00039         WindowRules( const QValueVector< Rules* >& rules );
00040         WindowRules();
00041         void update( Client* );
00042         void discardTemporary();
00043         Placement::Policy checkPlacement( Placement::Policy placement ) const;
00044         QRect checkGeometry( QRect rect, bool init = false ) const;
00045         // use 'invalidPoint' with checkPosition, unlike QSize() and QRect(), QPoint() is a valid point
00046         QPoint checkPosition( QPoint pos, bool init = false ) const;
00047         QSize checkSize( QSize s, bool init = false ) const;
00048         QSize checkMinSize( QSize s ) const;
00049         QSize checkMaxSize( QSize s ) const;
00050         bool checkIgnorePosition( bool ignore ) const;
00051         int checkDesktop( int desktop, bool init = false ) const;
00052         NET::WindowType checkType( NET::WindowType type ) const;
00053         MaximizeMode checkMaximize( MaximizeMode mode, bool init = false ) const;
00054         bool checkMinimize( bool minimized, bool init = false ) const;
00055         ShadeMode checkShade( ShadeMode shade, bool init = false ) const;
00056         bool checkSkipTaskbar( bool skip, bool init = false ) const;
00057         bool checkSkipPager( bool skip, bool init = false ) const;
00058         bool checkKeepAbove( bool above, bool init = false ) const;
00059         bool checkKeepBelow( bool below, bool init = false ) const;
00060         bool checkFullScreen( bool fs, bool init = false ) const;
00061         bool checkNoBorder( bool noborder, bool init = false ) const;
00062         int checkFSP( int fsp ) const;
00063         bool checkAcceptFocus( bool focus ) const;
00064         Options::MoveResizeMode checkMoveResizeMode( Options::MoveResizeMode mode ) const;
00065         bool checkCloseable( bool closeable ) const;
00066     private:
00067         MaximizeMode checkMaximizeVert( MaximizeMode mode, bool init ) const;
00068         MaximizeMode checkMaximizeHoriz( MaximizeMode mode, bool init ) const;
00069         QValueVector< Rules* > rules;
00070     };
00071 #endif
00072 
00073 class Rules
00074     : public KDecorationDefines
00075     {
00076     public:
00077         Rules();
00078         Rules( KConfig& );
00079         Rules( const QString&, bool temporary );
00080         void write( KConfig& ) const;
00081         bool isEmpty() const;
00082 #ifndef KCMRULES
00083         bool match( const Client* c ) const;
00084         bool update( Client* );
00085         bool isTemporary() const;
00086         bool discardTemporary( bool force ); // removes if temporary and forced or too old
00087         bool applyPlacement( Placement::Policy& placement ) const;
00088         bool applyGeometry( QRect& rect, bool init ) const;
00089         // use 'invalidPoint' with applyPosition, unlike QSize() and QRect(), QPoint() is a valid point
00090         bool applyPosition( QPoint& pos, bool init ) const;
00091         bool applySize( QSize& s, bool init ) const;
00092         bool applyMinSize( QSize& s ) const;
00093         bool applyMaxSize( QSize& s ) const;
00094         bool applyIgnorePosition( bool& ignore ) const;
00095         bool applyDesktop( int& desktop, bool init ) const;
00096         bool applyType( NET::WindowType& type ) const;
00097         bool applyMaximizeVert( MaximizeMode& mode, bool init ) const;
00098         bool applyMaximizeHoriz( MaximizeMode& mode, bool init ) const;
00099         bool applyMinimize( bool& minimized, bool init ) const;
00100         bool applyShade( ShadeMode& shade, bool init ) const;
00101         bool applySkipTaskbar( bool& skip, bool init ) const;
00102         bool applySkipPager( bool& skip, bool init ) const;
00103         bool applyKeepAbove( bool& above, bool init ) const;
00104         bool applyKeepBelow( bool& below, bool init ) const;
00105         bool applyFullScreen( bool& fs, bool init ) const;
00106         bool applyNoBorder( bool& noborder, bool init ) const;
00107         bool applyFSP( int& fsp ) const;
00108         bool applyAcceptFocus( bool& focus ) const;
00109         bool applyMoveResizeMode( Options::MoveResizeMode& mode ) const;
00110         bool applyCloseable( bool& closeable ) const;
00111     private:
00112 #endif
00113         bool matchType( NET::WindowType match_type ) const;
00114         bool matchWMClass( const QCString& match_class, const QCString& match_name ) const;
00115         bool matchRole( const QCString& match_role ) const;
00116         bool matchTitle( const QString& match_title ) const;
00117         bool matchClientMachine( const QCString& match_machine ) const;
00118         enum // values are saved to the cfg file
00119             {
00120             Unused = 0,
00121             DontAffect, // use the default value
00122             Force,      // force the given value
00123             Apply,      // apply only after initial mapping
00124             Remember   // like apply, and remember the value when the window is withdrawn
00125             };
00126         enum SetRule
00127             {
00128             UnusedSetRule = Unused,
00129             SetRuleDummy = 256   // so that it's at least short int
00130             };
00131         enum ForceRule
00132             {
00133             UnusedForceRule = Unused,
00134             ForceRuleDummy = 256   // so that it's at least short int
00135             };
00136         enum StringMatch
00137             {
00138             FirstStringMatch,
00139             UnimportantMatch = FirstStringMatch,
00140             ExactMatch,
00141             SubstringMatch,
00142             RegExpMatch,
00143             LastStringMatch = RegExpMatch
00144             };
00145         void readFromCfg( KConfig& cfg );
00146         static SetRule readSetRule( KConfig&, const QString& key );
00147         static ForceRule readForceRule( KConfig&, const QString& key );
00148         static NET::WindowType readType( KConfig&, const QString& key );
00149 #ifndef KCMRULES
00150         static bool checkSetRule( SetRule rule, bool init );
00151         static bool checkForceRule( ForceRule rule );
00152         static bool checkSetStop( SetRule rule );
00153         static bool checkForceStop( ForceRule rule );
00154 #endif
00155         int temporary_state; // e.g. for kstart
00156         QString description;
00157         QCString wmclass;
00158         StringMatch wmclassmatch;
00159         bool wmclasscomplete;
00160         QCString windowrole;
00161         StringMatch windowrolematch;
00162         QString title; // TODO "caption" ?
00163         StringMatch titlematch;
00164         QCString extrarole;
00165         StringMatch extrarolematch;
00166         QCString clientmachine;
00167         StringMatch clientmachinematch;
00168         unsigned long types; // types for matching
00169         Placement::Policy placement;
00170         ForceRule placementrule;
00171         QPoint position;
00172         SetRule positionrule;
00173         QSize size;
00174         SetRule sizerule;
00175         QSize minsize;
00176         ForceRule minsizerule;
00177         QSize maxsize;
00178         ForceRule maxsizerule;
00179         bool ignoreposition;
00180         ForceRule ignorepositionrule;
00181         int desktop;
00182         SetRule desktoprule;
00183         NET::WindowType type; // type for setting
00184         ForceRule typerule;
00185         bool maximizevert;
00186         SetRule maximizevertrule;
00187         bool maximizehoriz;
00188         SetRule maximizehorizrule;
00189         bool minimize;
00190         SetRule minimizerule;
00191         bool shade;
00192         SetRule shaderule;
00193         bool skiptaskbar;
00194         SetRule skiptaskbarrule;
00195         bool skippager;
00196         SetRule skippagerrule;
00197         bool above;
00198         SetRule aboverule;
00199         bool below;
00200         SetRule belowrule;
00201         bool fullscreen;
00202         SetRule fullscreenrule;
00203         bool noborder;
00204         SetRule noborderrule;
00205         int fsplevel;
00206         ForceRule fsplevelrule;
00207         bool acceptfocus;
00208         ForceRule acceptfocusrule;
00209         Options::MoveResizeMode moveresizemode;
00210         ForceRule moveresizemoderule;
00211         bool closeable;
00212         ForceRule closeablerule;
00213         friend kdbgstream& operator<<( kdbgstream& stream, const Rules* );
00214     };
00215 
00216 #ifndef KCMRULES
00217 inline
00218 bool Rules::checkSetRule( SetRule rule, bool init )
00219     {
00220     if( rule > ( SetRule )DontAffect) // Unused or DontAffect
00221         {
00222         if( rule == ( SetRule )Force || init )
00223             return true;
00224         }
00225     return false;
00226     }
00227 
00228 inline
00229 bool Rules::checkForceRule( ForceRule rule )
00230     {
00231     return rule == ( ForceRule )Force;
00232     }
00233 
00234 inline
00235 bool Rules::checkSetStop( SetRule rule )
00236     {
00237     return rule != UnusedSetRule;
00238     }
00239     
00240 inline
00241 bool Rules::checkForceStop( ForceRule rule )
00242     {
00243     return rule != UnusedForceRule;
00244     }
00245 
00246 inline
00247 WindowRules::WindowRules( const QValueVector< Rules* >& r )
00248     : rules( r )
00249     {
00250     }
00251 
00252 inline
00253 WindowRules::WindowRules()
00254     {
00255     }
00256 #endif
00257 
00258 #ifdef NDEBUG
00259 inline
00260 kndbgstream& operator<<( kndbgstream& stream, const Rules* ) { return stream; }
00261 #else
00262 kdbgstream& operator<<( kdbgstream& stream, const Rules* );
00263 #endif
00264 
00265 } // namespace
00266 
00267 #endif
KDE Logo
This file is part of the documentation for kwin Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Sep 8 02:43:21 2005 by doxygen 1.3.6 written by Dimitri van Heesch, © 1997-2003