summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-16 20:11:02 +0000
committerDana Jansens <danakj@orodu.net>2003-02-16 20:11:02 +0000
commit0c2f0e0b5e974bace6b7488541fac0fed23c5bc9 (patch)
tree19c3473b8e1d5ced2fc347092d60f6e10be138dc
parent42fbb46a7fbb09bb7ee4d2a159be1a04dbcbe0d4 (diff)
keep track of the kwm_win_icon property
-rw-r--r--src/client.cc19
-rw-r--r--src/client.hh16
2 files changed, 35 insertions, 0 deletions
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.
/*!