all repos — openbox @ 0c2f0e0b5e974bace6b7488541fac0fed23c5bc9

openbox fork - make it a bit more like ryudo

keep track of the kwm_win_icon property
Dana Jansens danakj@orodu.net
commit

0c2f0e0b5e974bace6b7488541fac0fed23c5bc9

parent

42fbb46a7fbb09bb7ee4d2a159be1a04dbcbe0d4

2 files changed, 35 insertions(+), 0 deletions(-)

jump to
M src/client.ccsrc/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.hhsrc/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. /*!