updateClass();
updateStrut();
updateIcons();
+ updateKwmIcon();
// this makes sure that these windows appear on all desktops
if (/*_type == Type_Dock ||*/ _type == Type_Desktop)
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);
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)
//! 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
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();
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.
/*!