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.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 13 21:47:06 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003