X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=2bc7e3f0018eaf28b5f1846d3be127a10fd0266d;hb=15d3efa69c40c93ae609a791e4b57c3d793e646f;hp=eeb042321c23fcab530d013657172404b239c800;hpb=0816364a039fb0a0b2f989394ffb6af0b5221b3f;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index eeb04232..2bc7e3f0 100644 --- a/src/client.hh +++ b/src/client.hh @@ -17,11 +17,12 @@ extern "C" { #include +#include "screen.hh" +#include "widget.hh" #include "otk/point.hh" #include "otk/strut.hh" #include "otk/rect.hh" #include "otk/eventhandler.hh" -#include "widget.hh" namespace ob { @@ -234,6 +235,8 @@ private: bool _urgent; //! Notify the window when it receives focus? bool _focus_notify; + //! Does the client window have the input focus? + bool _focused; //! The window uses shape extension to be non-rectangular? bool _shaped; @@ -249,10 +252,18 @@ private: bool _max_vert; //! The window is maximized to fill the screen horizontally bool _max_horz; + //! The window should not be displayed by pagers + bool _skip_pager; + //! The window should not be displayed by taskbars + bool _skip_taskbar; //! The window is a 'fullscreen' window, and should be on top of all others bool _fullscreen; //! The window should be on top of other windows of the same type - bool _floating; + bool _above; + //! The window should be underneath other windows of the same type + bool _below; + + OBScreen::StackLayer _layer; //! A bitmask of values in the OBClient::Decoration enum /*! @@ -291,6 +302,9 @@ private: //! Adjusts the window's net_state void setState(StateAction action, long data1, long data2); + //! Calculates the stacking layer for the client window + void calcLayer(); + //! Update the protocols that the window supports and adjusts things if they //! change void updateProtocols(); @@ -306,6 +320,9 @@ private: void updateClass(); // XXX: updateTransientFor(); + //! Change the client's state hints to match the class' data + void changeState(); + public: #ifndef SWIG //! Constructs a new OBClient object around a specified window id @@ -394,17 +411,8 @@ public: inline bool maxVert() const { return _max_vert; } //! Returns if the window is maximized horizontally inline bool maxHorz() const { return _max_horz; } - //! Returns if the window is fullscreen - /*! - When the window is fullscreen, it is kept above all others - */ - inline bool fullscreen() const { return _fullscreen; } - //! Returns if the window is floating - /*! - When the window is floating, it is kept above all others in the same - stacking layer as it - */ - inline bool floating() const { return _floating; } + //! Returns the window's stacking layer + inline OBScreen::StackLayer layer() const { return _layer; } //! Removes or reapplies the client's border to its window /*! @@ -431,13 +439,29 @@ public: //! Request the client to close its window. void close(); + + //! Shades or unshades the client window + /*! + @param shade true if the window should be shaded; false if it should be + unshaded. + */ + void shade(bool shade); + //! Attempt to focus the client window + bool focus(); + + //! Remove focus from the client window + void unfocus(); + + virtual void focusHandler(const XFocusChangeEvent &e); + virtual void unfocusHandler(const XFocusChangeEvent &e); virtual void propertyHandler(const XPropertyEvent &e); virtual void clientMessageHandler(const XClientMessageEvent &e); virtual void shapeHandler(const XShapeEvent &e); virtual void configureRequestHandler(const XConfigureRequestEvent &e); virtual void unmapHandler(const XUnmapEvent &e); virtual void destroyHandler(const XDestroyWindowEvent &e); + virtual void reparentHandler(const XReparentEvent &e); }; }