X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.hh;h=382ab1df01794e33adaf1d7dc59dca931858a7fa;hb=7f561a6a7acee71d55eecc9ed2bd278147ce2536;hp=6c9b74e5832c62e44f6ca0b5b341c0baa5e0d036;hpb=af27d7b7f04e1b0e0a587bd6b1b725892112eb6a;p=chaz%2Fopenbox diff --git a/src/client.hh b/src/client.hh index 6c9b74e5..382ab1df 100644 --- a/src/client.hh +++ b/src/client.hh @@ -141,22 +141,17 @@ 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; - //! Possible actions that can be made with the _NET_WM_STATE client message - enum StateAction { State_Remove = 0, //!< _NET_WM_STATE_REMOVE - State_Add, //!< _NET_WM_STATE_ADD - State_Toggle //!< _NET_WM_STATE_TOGGLE - }; - //! The event mask to grab on client windows static const long event_mask = PropertyChangeMask | FocusChangeMask | StructureNotifyMask; @@ -342,6 +337,14 @@ private: */ FunctionFlags _functions; + //! Icons for the client as specified on the client window + Icon *_icons; + //! The number of icons in _icons + int _nicons; + + Pixmap _pixmap_icon; + Pixmap _pixmap_icon_mask; + //! Retrieves the window's initial gravity void getGravity(); //! Retrieves the desktop hint's value and sets Client::_desktop @@ -376,7 +379,7 @@ private: Client::applyStartupState is used to do the same things during the mapping process. */ - void setState(StateAction action, long data1, long data2); + void setState(Atom action, long data1, long data2); //! Sends the window to the specified desktop void setDesktop(unsigned int desktop); @@ -406,6 +409,10 @@ private: void updateStrut(); //! Updates the window's transient status, and any parents of it void updateTransientFor(); + //! Updates the window's icons + void updateIcons(); + //! Updates the window's kwm icon + void updateKwmIcon(); //! Change the client's state hints to match the class' data void changeState(); @@ -426,6 +433,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(); @@ -467,8 +478,11 @@ private: /*! @param x The X coordinate to move to. @param y The Y coordinate to move to. + @param final true if this is the final move, false if there are more move + events coming. The client is not notified of the move when + final is false. */ - void internal_move(int x, int y); + void internal_move(int x, int y, bool final = true); //! Internal version of the Client::resize function /*! This also maintains things like the client's minsize, and size increments. @@ -503,16 +517,14 @@ private: void applyStartupState(); public: -#ifndef SWIG //! Constructs a new Client object around a specified window id /*! -BB @param window The window id that the Client class should handle + @param window The window id that the Client class should handle @param screen The screen on which the window resides */ Client(int screen, Window window); //! Destroys the Client object virtual ~Client(); -#endif //! Returns the screen on which the clien resides inline int screen() const { return _screen; } @@ -584,7 +596,7 @@ BB @param window The window id that the Client class should handle inline DecorationFlags disabledDecorations() const { return _disabled_decorations; } //! Returns the functions that the user can perform on the window - inline FunctionFlags funtions() const { return _functions; } + inline FunctionFlags functions() const { return _functions; } //! Return the client this window is transient for inline Client *transientFor() const { return _transient_for; } @@ -599,7 +611,7 @@ BB @param window The window id that the Client class should handle inline bool skipPager() const { return _skip_pager; } //! The window should not be displayed by taskbars inline bool skipTaskbar() const { return _skip_taskbar; } - //! Returns if the window is shaded + //! Returns if the window is shaded /*! When the window is shaded, only its titlebar is visible. */ @@ -639,14 +651,37 @@ BB @param window The window id that the Client class should handle //! 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; + + //! Returns the pixmap for the pixmap icon specified on the window (or None) + /*! + The icon given by Client::icon should take precedence over this icon/mask. + */ + Pixmap pixmapIcon() const { return _pixmap_icon; } + //! Returns the mask for the pixmap icon specified on the window (or None) + /*! + The icon given by Client::icon should take precedence over this icon/mask. + */ + Pixmap pixmapIconMask() const { return _pixmap_icon_mask; } + //! 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 the position specified. @param x The X coordinate to move to. @param y The Y coordinate to move to. + @param final true if this is the final move, false if there are more move + events coming. The client is not notified of the move when + final is false. */ - void move(int x, int y); + void move(int x, int y, bool final = true); //! Resizes the client window, anchoring it in a given corner /*!