+ //! Possible functions for MWM Hints (defined by Motif 2.0)
+ enum MwmFunctions { MwmFunc_All = 1 << 0, //!< All functions
+ MwmFunc_Resize = 1 << 1, //!< Allow resizing
+ MwmFunc_Move = 1 << 2, //!< Allow moving
+ MwmFunc_Iconify = 1 << 3, //!< Allow to be iconfied
+ MwmFunc_Maximize = 1 << 4 //!< Allow to be maximized
+ //MwmFunc_Close = 1 << 5 //!< Allow to be closed
+ };
+
+ //! Possible decorations for MWM Hints (defined by Motif 2.0)
+ enum MemDecorations { MwmDecor_All = 1 << 0, //!< All decorations
+ MwmDecor_Border = 1 << 1, //!< Show a border
+ MwmDecor_Handle = 1 << 2, //!< Show a handle (bottom)
+ MwmDecor_Title = 1 << 3, //!< Show a titlebar
+ //MwmDecor_Menu = 1 << 4, //!< Show a menu
+ MwmDecor_Iconify = 1 << 5, //!< Show an iconify button
+ MwmDecor_Maximize = 1 << 6 //!< Show a maximize button
+ };
+
+ //! The things the user can do to the client window
+ enum Function { Func_Resize = 1 << 0, //!< Allow resizing
+ Func_Move = 1 << 1, //!< Allow moving
+ Func_Iconify = 1 << 2, //!< Allow to be iconified
+ Func_Maximize = 1 << 3, //!< Allow to be maximized
+ Func_Shade = 1 << 4, //!< Allow to be shaded
+ Func_Fullscreen = 1 << 5, //!< Allow to be made fullscreen
+ Func_Close = 1 << 6 //!< Allow to be closed
+ };
+ //! Holds a bitmask of Client::Function values
+ typedef unsigned char FunctionFlags;
+
+ //! The decorations the client window wants to be displayed on it
+ enum Decoration { Decor_Titlebar = 1 << 0, //!< Display a titlebar
+ Decor_Handle = 1 << 1, //!< Display a handle (bottom)
+ Decor_Border = 1 << 2, //!< Display a border
+ Decor_Iconify = 1 << 3, //!< Display an iconify button
+ Decor_Maximize = 1 << 4, //!< Display a maximize button
+ //! Display a button to toggle the window's placement on
+ //! all desktops
+ Decor_AllDesktops = 1 << 5,
+ Decor_Close = 1 << 6 //!< Display a close button
+ };
+ //! Holds a bitmask of Client::Decoration values
+ typedef unsigned char DecorationFlags;
+
+ //! Possible actions that can be made with the _NET_WM_STATE client message
+ enum StateAction { State_Remove = 0, //!< _NET_WM_STATE_REMOVE
+ State_Add, //!< _NET_WM_STATE_ADD
+ State_Toggle //!< _NET_WM_STATE_TOGGLE
+ };
+
+ //! The event mask to grab on client windows
+ static const long event_mask = PropertyChangeMask | FocusChangeMask |
+ StructureNotifyMask;
+
+ //! The mask of events to not let propogate past the client
+ /*!
+ This makes things like xprop work on the client window, but means we have
+ to explicitly grab clicks that we want.
+ */
+ static const long no_propagate_mask = ButtonPressMask | ButtonReleaseMask |
+ ButtonMotionMask;
+
+ //! The desktop value which indicated the window is iconified and not on any
+ //! desktop
+ static const long ICONIC_DESKTOP = 0xfffffffe;
+
+ //! The number of unmap events to ignore on the window
+ int ignore_unmaps;
+