X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=597b763878097e69558839114a23787a8ee925fe;hb=73a584981e853f03cbd01930d27d138c6b95707b;hp=ff119faf746b12961bbfb296b1de8fdc1576f3f3;hpb=4ef15148365c223b8e810611a10dc27dc5fba355;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index ff119faf..597b7638 100644 --- a/src/client.hh +++ b/src/client.hh @@ -29,6 +29,11 @@ namespace ob { class Frame; class Screen; +struct Icon { + unsigned long w, h; + unsigned long *data; +}; + //! The MWM Hints as retrieved from the window property /*! This structure only contains 3 elements, even though the Motif 2.0 @@ -136,12 +141,13 @@ public: 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_Icon = 1 << 3, //!< Display the window's icon + Decor_Iconify = 1 << 4, //!< Display an iconify button + Decor_Maximize = 1 << 5, //!< 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 + Decor_AllDesktops = 1 << 6, + Decor_Close = 1 << 7 //!< Display a close button }; //! Holds a bitmask of Client::Decoration values typedef unsigned char DecorationFlags; @@ -313,6 +319,8 @@ private: //! The window should be underneath other windows of the same type bool _below; + //! The layer in which the window will be stacked, windows in lower layers + //! are always below windows in higher layers. StackLayer _layer; //! A bitmask of values in the Client::Decoration enum @@ -335,6 +343,11 @@ private: */ FunctionFlags _functions; + //! Icons for the client as specified on the client window + Icon *_icons; + //! The number of icons in _icons + int _nicons; + //! Retrieves the window's initial gravity void getGravity(); //! Retrieves the desktop hint's value and sets Client::_desktop @@ -399,6 +412,8 @@ private: void updateStrut(); //! Updates the window's transient status, and any parents of it void updateTransientFor(); + //! Updates the window's icons + void updateIcons(); //! Change the client's state hints to match the class' data void changeState(); @@ -419,6 +434,10 @@ private: //! the topmost node (the window you're starting with). Client *Client::searchModalTree(Client *node, Client *skip); + //! Recursively searches the client 'tree' for a focused client, always skips + //! the topmost node (the window you're starting with). + Client *Client::searchFocusTree(Client *node, Client *skip); + //! Fires the urgent callbacks which lets the user do what they want with //! urgent windows void fireUrgent(); @@ -622,11 +641,25 @@ BB @param window The window id that the Client class should handle const otk::Size &logicalSize() const { return _logical_size; } //! Returns the position and size of the client relative to the root window + /*! + Note that this value is *not* the size and position of the window's + frame, though the position will often line up.
+ If you want the frame's area, use Frame::area() instead. + */ inline const otk::Rect &area() const { return _area; } //! Returns the client's strut definition inline const otk::Strut &strut() const { return _strut; } + //! Returns an icon for the window + /*! + The icon chosen will be the smallest icon available that is still bigger or + equal to the specified Size.
+ If none that meet the requirements is found, the largest icon that is + smaller than the specified size will be returned. + */ + const Icon *icon(const otk::Size &s) const; + //! Move the window (actually, its frame) to a position. /*! This moves the window so that the top-left corner of its frame will be at