From: Dana Jansens Date: Sun, 16 Feb 2003 20:11:02 +0000 (+0000) Subject: keep track of the kwm_win_icon property X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=0c2f0e0b5e974bace6b7488541fac0fed23c5bc9;p=chaz%2Fopenbox keep track of the kwm_win_icon property --- diff --git a/src/client.cc b/src/client.cc index 61827734..7bf72645 100644 --- a/src/client.cc +++ b/src/client.cc @@ -77,6 +77,7 @@ Client::Client(int screen, Window window) updateClass(); updateStrut(); updateIcons(); + updateKwmIcon(); // this makes sure that these windows appear on all desktops if (/*_type == Type_Dock ||*/ _type == Type_Desktop) @@ -755,6 +756,22 @@ void Client::updateIcons() if (frame) frame->adjustIcon(); } +void Client::updateKwmIcon() +{ + _kwm_icon = _kwm_icon_mask = None; + + unsigned long num = 2; + Pixmap *data; + if (otk::Property::get(_window, otk::Property::atoms.kwm_win_icon, + otk::Property::atoms.kwm_win_icon, &num, &data)) { + if (num >= 2) { + _kwm_icon = data[0]; + _kwm_icon_mask = data[1]; + } + delete [] data; + } +} + void Client::propertyHandler(const XPropertyEvent &e) { otk::EventHandler::propertyHandler(e); @@ -800,6 +817,8 @@ void Client::propertyHandler(const XPropertyEvent &e) updateStrut(); else if (e.atom == otk::Property::atoms.net_wm_icon) updateIcons(); + else if (e.atom == otk::Property::atoms.kwm_win_icon) + updateKwmIcon(); } void Client::setWMState(long state) diff --git a/src/client.hh b/src/client.hh index 597b7638..8d97bfcc 100644 --- a/src/client.hh +++ b/src/client.hh @@ -348,6 +348,9 @@ private: //! The number of icons in _icons int _nicons; + Pixmap _kwm_icon; + Pixmap _kwm_icon_mask; + //! Retrieves the window's initial gravity void getGravity(); //! Retrieves the desktop hint's value and sets Client::_desktop @@ -414,6 +417,8 @@ private: 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(); @@ -659,6 +664,17 @@ BB @param window The window id that the Client class should handle smaller than the specified size will be returned. */ const Icon *icon(const otk::Size &s) const; + + //! Returns the pixmap for the KWM_WIN_ICON specified on the window (or None) + /*! + The icon given by Client::icon should take precedence over this icon/mask. + */ + Pixmap kwmIcon() const { return _kwm_icon; } + //! Returns the mask for the KWM_WIN_ICON specified on the window (or None) + /*! + The icon given by Client::icon should take precedence over this icon/mask. + */ + Pixmap kwmIconMask() const { return _kwm_icon_mask; } //! Move the window (actually, its frame) to a position. /*!