X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=a9fe942766666e91087849372cf95462a19d0ad3;hb=fc4885a3f4c2a023a6e64cce62fc5cde1667f2e9;hp=d3e3a9b062e90fa50bef2db192f09d2f1ae4522e;hpb=edd539420796233d3f69e1cceaa0f491ffdb5c6a;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index d3e3a9b0..a9fe9427 100644 --- a/src/client.hh +++ b/src/client.hh @@ -7,6 +7,7 @@ property changes on the window and some client messages */ +#include "screen.hh" #include "widgetbase.hh" #include "otk/point.hh" #include "otk/strut.hh" @@ -28,6 +29,7 @@ extern "C" { namespace ob { class Frame; +class Screen; //! The MWM Hints as retrieved from the window property /*! @@ -295,6 +297,9 @@ private: //! The window uses shape extension to be non-rectangular? bool _shaped; + //! If the window has a modal child window, then this will point to it + Client *_modal_child; + //! The window is modal, so it must be processed before any windows it is //! related to can be focused bool _modal; @@ -381,6 +386,11 @@ private: by sending it to any other valid desktop. */ void setDesktop(long desktop); + //! Set whether the window is modal or not + /*! + This adjusts references in parents etc to match. + */ + void setModal(bool modal); //! Calculates the stacking layer for the client window void calcLayer(); @@ -472,12 +482,24 @@ private: void internal_resize(Corner anchor, int w, int h, bool user = true, int x = INT_MIN, int y = INT_MIN); - //! Attempts to focus a modal child of this window, recursively. + //! Attempts to find and return a modal child of this window, recursively. + Client *findModalChild(Client *skip = 0) const; + + //! Removes or reapplies the client's border to its window /*! - @return true if a modal child has been found and focused; otherwise, false. + Used when managing and unmanaging a window. + @param addborder true if adding the border to the client; false if removing + from the client */ - bool focusModalChild(); + void toggleClientBorder(bool addborder); + //! Applies the states requested when the window mapped + /*! + This should be called only once, during the window mapping process. It + applies things like maximized, and fullscreen. + */ + void applyStartupState(); + public: #ifndef SWIG //! Constructs a new Client object around a specified window id @@ -533,6 +555,8 @@ BB @param window The window id that the Client class should handle inline bool urgent() const { return _urgent; } //! Returns if the window wants to be notified when it receives focus inline bool focusNotify() const { return _focus_notify; } + //! Returns if the window is the focused window + inline bool focused() const { return _focused; } //! Returns if the window uses the Shape extension inline bool shaped() const { return _shaped; } //! Returns the window's gravity @@ -563,6 +587,9 @@ BB @param window The window id that the Client class should handle //! Return the client this window is transient for inline Client *transientFor() const { return _transient_for; } + //! Returns the window which is a modal child of this window + inline Client *modalChild() const { return _modal_child; } + //! Returns if the window is modal /*! If the window is modal, then no other windows that it is related to can get @@ -602,21 +629,6 @@ BB @param window The window id that the Client class should handle */ const otk::Point &logicalSize() const { return _logical_size; } - //! Applies the states requested when the window mapped - /*! - This should be called only once, during the window mapping process. It - applies things like maximized, and fullscreen. - */ - void applyStartupState(); - - //! Removes or reapplies the client's border to its window - /*! - Used when managing and unmanaging a window. - @param addborder true if adding the border to the client; false if removing - from the client - */ - void toggleClientBorder(bool addborder); - //! Returns the position and size of the client relative to the root window inline const otk::Rect &area() const { return _area; } @@ -672,6 +684,8 @@ BB @param window The window id that the Client class should handle */ bool validate() const; + void installColormap(bool install) const; + virtual void focusHandler(const XFocusChangeEvent &e); virtual void unfocusHandler(const XFocusChangeEvent &e); virtual void propertyHandler(const XPropertyEvent &e); @@ -683,7 +697,10 @@ BB @param window The window id that the Client class should handle virtual void mapRequestHandler(const XMapRequestEvent &e); #if defined(SHAPE) virtual void shapeHandler(const XShapeEvent &e); -#endif // SHAPE +#endif // SHAPE + + friend void Screen::manageWindow(Window); + friend void Screen::unmanageWindow(Client *); }; }