keep track of the kwm_win_icon property
Dana Jansens danakj@orodu.net
2 files changed,
35 insertions(+),
0 deletions(-)
M
src/client.cc
→
src/client.cc
@@ -77,6 +77,7 @@ updateIconTitle();
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 @@
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 @@ else if (e.atom == otk::Property::atoms.net_wm_strut)
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)
M
src/client.hh
→
src/client.hh
@@ -348,6 +348,9 @@ Icon *_icons;
//! 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 @@ //! 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();@@ -659,6 +664,17 @@ 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 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. /*!