enum WindowType { Type_Desktop, //!< A desktop (bottom-most window)
Type_Dock, //!< A dock bar/panel window
Type_Toolbar, //!< A toolbar window, pulled off an app
- Type_Menu, //!< A sticky menu from an app
+ Type_Menu, //!< An unpinned menu from an app
Type_Utility, //!< A small utility window such as a palette
Type_Splash, //!< A splash screen window
Type_Dialog, //!< A dialog window
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
- Decor_Sticky = 1 << 5, //!< Display a sticky button
- Decor_Close = 1 << 6 //!< Display a close button
+ 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;
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;
//! NormalState
long _wmstate;
+ //! True if the client supports the delete_window protocol
+ bool _delete_window;
+
//! Was the window's position requested by the application? if not, we should
//! place the window ourselves when it first appears
bool _positioned;
void setState(StateAction action, long data1, long data2);
//! Sends the window to the specified desktop
+ /*!
+ A window is iconified by sending it to the ICONIC_DESKTOP, and restored
+ by sending it to any other valid desktop.
+ */
void setDesktop(long desktop);
//! Calculates the stacking layer for the client window
//! Updates the WMNormalHints and adjusts things if they change
void updateNormalHints();
//! Updates the WMHints and adjusts things if they change
- void updateWMHints();
+ /*!
+ @param initstate Whether to read the initial_state property from the
+ WMHints. This should only be used during the mapping
+ process.
+ */
+ void updateWMHints(bool initstate = false);
//! Updates the window's title
void updateTitle();
//! Updates the window's icon title
*/
void shade(bool shade);
+ //! Fires the urgent callbacks which lets the user do what they want with
+ //! urgent windows
+ void fireUrgent();
+
//! Fullscreen's or unfullscreen's the client window
/*!
@param fs true if the window should be made fullscreen; false if it should
void resize(Corner anchor, int w, int h);
//! Attempt to focus the client window
- bool focus() const;
+ bool focus();
//! Remove focus from the client window
void unfocus() const;
virtual void unmapHandler(const XUnmapEvent &e);
virtual void destroyHandler(const XDestroyWindowEvent &e);
virtual void reparentHandler(const XReparentEvent &e);
+ virtual void mapRequestHandler(const XMapRequestEvent &e);
#if defined(SHAPE)
virtual void shapeHandler(const XShapeEvent &e);
#endif // SHAPE