X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=597b763878097e69558839114a23787a8ee925fe;hb=73a584981e853f03cbd01930d27d138c6b95707b;hp=b7efefa2dabd01294b0afc62154f1319fba5ebbc;hpb=43c1f2a8f84d8008155d6df8e2bcd35534c62893;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index b7efefa2..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; @@ -164,10 +170,6 @@ public: 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; @@ -188,7 +190,7 @@ private: Client::List _transients; //! The desktop on which the window resides (0xffffffff for all desktops) - long _desktop; + unsigned int _desktop; //! Normal window title otk::ustring _title; @@ -317,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 @@ -339,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 @@ -376,11 +385,7 @@ private: 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); + void setDesktop(unsigned int desktop); //! Calculates the stacking layer for the client window void calcLayer(); @@ -407,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(); @@ -427,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(); @@ -442,6 +453,16 @@ private: */ void fullscreen(bool fs, bool savearea = true); + //! Iconifies or uniconifies the client window + /*! + @param iconic true if the window should be iconified; false if it should be + restored. + @param curdesk If iconic is false, then this determines if the window will + be uniconified to the current viewable desktop (true) or to + its previous desktop (false) + */ + void iconify(bool iconic, bool curdesk = true); + //! Maximize or unmaximize the client window /*! @param max true if the window should be maximized; false if it should be @@ -528,7 +549,7 @@ BB @param window The window id that the Client class should handle This value is a 0-based index.
A value of 0xffffffff indicates that the window exists on all desktops. */ - inline long desktop() const { return _desktop; } + inline unsigned int desktop() const { return _desktop; } //! Returns the window's title inline const otk::ustring &title() const { return _title; } //! Returns the window's title when it is iconified @@ -620,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 @@ -649,6 +684,12 @@ BB @param window The window id that the Client class should handle surroundings (struts, etc). */ void remaximize(); + + //! Shows the window if it should be shown, or hides it + /*! + Used when changing desktops, the window's state, etc. + */ + void showhide(); //! Choose a mask of decorations to not display on the client /*!