00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef KWIN_UTILS_H
00013 #define KWIN_UTILS_H
00014
00015 #include <qvaluelist.h>
00016 #include <qwidget.h>
00017 #include <kmanagerselection.h>
00018 #include <netwm_def.h>
00019 #include <kshortcutdialog.h>
00020
00021 namespace KWinInternal
00022 {
00023
00024 const int SUPPORTED_WINDOW_TYPES_MASK = NET::NormalMask | NET::DesktopMask | NET::DockMask
00025 | NET::ToolbarMask | NET::MenuMask | NET::DialogMask | NET::TopMenuMask
00026 | NET::UtilityMask | NET::SplashMask;
00027
00028 const long ClientWinMask = KeyPressMask | KeyReleaseMask |
00029 ButtonPressMask | ButtonReleaseMask |
00030 KeymapStateMask |
00031 ButtonMotionMask |
00032 PointerMotionMask |
00033 EnterWindowMask | LeaveWindowMask |
00034 FocusChangeMask |
00035 ExposureMask |
00036 StructureNotifyMask |
00037 SubstructureRedirectMask;
00038
00039 const QPoint invalidPoint( INT_MIN, INT_MIN );
00040
00041 class Client;
00042 class Group;
00043 class Options;
00044
00045 typedef QValueList< Client* > ClientList;
00046 typedef QValueList< const Client* > ConstClientList;
00047
00048 typedef QValueList< Group* > GroupList;
00049 typedef QValueList< const Group* > ConstGroupList;
00050
00051 extern Options* options;
00052
00053 enum Layer
00054 {
00055 UnknownLayer = -1,
00056 FirstLayer = 0,
00057 DesktopLayer = FirstLayer,
00058 BelowLayer,
00059 NormalLayer,
00060 DockLayer,
00061 AboveLayer,
00062 ActiveLayer,
00063 NumLayers
00064 };
00065
00066
00067 inline void operator++( Layer& lay )
00068 {
00069 lay = static_cast< Layer >( lay + 1 );
00070 }
00071
00072
00073 enum ActivityFlags
00074 {
00075 ActivityFocus = 1 << 0,
00076 ActivityFocusForce = 1 << 1,
00077 ActivityRaise = 1 << 2
00078 };
00079
00080
00081
00082
00083
00084 enum allowed_t { Allowed };
00085
00086
00087 enum ForceGeometry_t { NormalGeometrySet, ForceGeometrySet };
00088
00089
00090 enum clientAreaOption
00091 {
00092 PlacementArea,
00093 MovementArea,
00094 MaximizeArea,
00095 MaximizeFullArea,
00096 FullScreenArea,
00097
00098 WorkArea,
00099 FullArea,
00100 ScreenArea,
00101 FullXineramaArea
00102 };
00103
00104 enum ShadeMode
00105 {
00106 ShadeNone,
00107 ShadeNormal,
00108 ShadeHover,
00109 ShadeActivated
00110 };
00111
00112 class Shape
00113 {
00114 public:
00115 static bool available() { return kwin_has_shape; }
00116 static bool hasShape( WId w);
00117 static int shapeEvent();
00118 static void init();
00119 private:
00120 static int kwin_has_shape;
00121 static int kwin_shape_event;
00122 };
00123
00124 class Motif
00125 {
00126 public:
00127 static void readFlags( WId w, bool& noborder, bool& resize, bool& move,
00128 bool& minimize, bool& maximize, bool& close );
00129 struct MwmHints
00130 {
00131 ulong flags;
00132 ulong functions;
00133 ulong decorations;
00134 long input_mode;
00135 ulong status;
00136 };
00137 enum {
00138 MWM_HINTS_FUNCTIONS = (1L << 0),
00139 MWM_HINTS_DECORATIONS = (1L << 1),
00140
00141 MWM_FUNC_ALL = (1L << 0),
00142 MWM_FUNC_RESIZE = (1L << 1),
00143 MWM_FUNC_MOVE = (1L << 2),
00144 MWM_FUNC_MINIMIZE = (1L << 3),
00145 MWM_FUNC_MAXIMIZE = (1L << 4),
00146 MWM_FUNC_CLOSE = (1L << 5)
00147 };
00148 };
00149
00150 class KWinSelectionOwner
00151 : public KSelectionOwner
00152 {
00153 Q_OBJECT
00154 public:
00155 KWinSelectionOwner( int screen );
00156 protected:
00157 virtual bool genericReply( Atom target, Atom property, Window requestor );
00158 virtual void replyTargets( Atom property, Window requestor );
00159 virtual void getAtoms();
00160 private:
00161 Atom make_selection_atom( int screen );
00162 static Atom xa_version;
00163 };
00164
00165
00166
00167
00168
00169 template< typename T >
00170 class TemporaryAssign
00171 {
00172 public:
00173 TemporaryAssign( const T& var, const T& value )
00174 : variable( var ), orig( var )
00175 {
00176 const_cast< T& >( variable ) = value;
00177 }
00178 ~TemporaryAssign()
00179 {
00180 const_cast< T& >( variable ) = orig;
00181 }
00182 private:
00183 const T& variable;
00184 T orig;
00185 };
00186
00187 QCString getStringProperty(WId w, Atom prop, char separator=0);
00188 void updateXTime();
00189 void grabXServer();
00190 void ungrabXServer();
00191 bool grabbedXServer();
00192
00193
00194 #ifndef UrgencyHint
00195 #define UrgencyHint XUrgencyHint
00196 #endif
00197
00198
00199 #define KWIN_CHECK_PREDICATE( name, check ) \
00200 struct name \
00201 { \
00202 inline bool operator()( const Client* cl ) { return check; }; \
00203 }
00204
00205 #define KWIN_COMPARE_PREDICATE( name, type, check ) \
00206 struct name \
00207 { \
00208 typedef type type_helper; \
00209 inline name( const type_helper& compare_value ) : value( compare_value ) {}; \
00210 inline bool operator()( const Client* cl ) { return check; }; \
00211 const type_helper& value; \
00212 }
00213
00214 #define KWIN_PROCEDURE( name, action ) \
00215 struct name \
00216 { \
00217 inline void operator()( Client* cl ) { action; }; \
00218 }
00219
00220 KWIN_CHECK_PREDICATE( TruePredicate, cl == cl );
00221
00222 template< typename T >
00223 Client* findClientInList( const ClientList& list, T predicate )
00224 {
00225 for ( ClientList::ConstIterator it = list.begin(); it != list.end(); ++it)
00226 {
00227 if ( predicate( const_cast< const Client* >( *it)))
00228 return *it;
00229 }
00230 return NULL;
00231 }
00232
00233 inline
00234 int timestampCompare( Time time1, Time time2 )
00235 {
00236 if( time1 == time2 )
00237 return 0;
00238 return ( time1 - time2 ) < 1000000000 ? 1 : -1;
00239 }
00240
00241 inline
00242 Time timestampDiff( Time time1, Time time2 )
00243 {
00244 return time2 - time1;
00245 }
00246
00247 bool isLocalMachine( const QCString& host );
00248
00249 #ifndef KCMRULES
00250
00251 class ShortcutDialog
00252 : public KShortcutDialog
00253 {
00254 Q_OBJECT
00255 public:
00256 ShortcutDialog( const KShortcut& cut );
00257 virtual void accept();
00258 signals:
00259 void dialogDone( bool ok );
00260 protected:
00261 virtual void done( int r ) { KShortcutDialog::done( r ); emit dialogDone( r == Accepted ); }
00262 };
00263 #endif
00264
00265 }
00266
00267 #endif