keep track of the kwm_win_icon property

This commit is contained in:
Dana Jansens 2003-02-16 20:11:02 +00:00
parent 42fbb46a7f
commit 0c2f0e0b5e
2 changed files with 35 additions and 0 deletions

View file

@ -77,6 +77,7 @@ Client::Client(int screen, Window window)
updateClass(); updateClass();
updateStrut(); updateStrut();
updateIcons(); updateIcons();
updateKwmIcon();
// this makes sure that these windows appear on all desktops // this makes sure that these windows appear on all desktops
if (/*_type == Type_Dock ||*/ _type == Type_Desktop) if (/*_type == Type_Dock ||*/ _type == Type_Desktop)
@ -755,6 +756,22 @@ void Client::updateIcons()
if (frame) frame->adjustIcon(); 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) void Client::propertyHandler(const XPropertyEvent &e)
{ {
otk::EventHandler::propertyHandler(e); otk::EventHandler::propertyHandler(e);
@ -800,6 +817,8 @@ void Client::propertyHandler(const XPropertyEvent &e)
updateStrut(); updateStrut();
else if (e.atom == otk::Property::atoms.net_wm_icon) else if (e.atom == otk::Property::atoms.net_wm_icon)
updateIcons(); updateIcons();
else if (e.atom == otk::Property::atoms.kwm_win_icon)
updateKwmIcon();
} }
void Client::setWMState(long state) void Client::setWMState(long state)

View file

@ -348,6 +348,9 @@ private:
//! The number of icons in _icons //! The number of icons in _icons
int _nicons; int _nicons;
Pixmap _kwm_icon;
Pixmap _kwm_icon_mask;
//! Retrieves the window's initial gravity //! Retrieves the window's initial gravity
void getGravity(); void getGravity();
//! Retrieves the desktop hint's value and sets Client::_desktop //! Retrieves the desktop hint's value and sets Client::_desktop
@ -414,6 +417,8 @@ private:
void updateTransientFor(); void updateTransientFor();
//! Updates the window's icons //! Updates the window's icons
void updateIcons(); void updateIcons();
//! Updates the window's kwm icon
void updateKwmIcon();
//! Change the client's state hints to match the class' data //! Change the client's state hints to match the class' data
void changeState(); void changeState();
@ -660,6 +665,17 @@ BB @param window The window id that the Client class should handle
*/ */
const Icon *icon(const otk::Size &s) const; 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. //! 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 This moves the window so that the top-left corner of its frame will be at