]> Dogcows Code - chaz/openbox/commitdiff
keep track of the kwm_win_icon property
authorDana Jansens <danakj@orodu.net>
Sun, 16 Feb 2003 20:11:02 +0000 (20:11 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 16 Feb 2003 20:11:02 +0000 (20:11 +0000)
src/client.cc
src/client.hh

index 618277343cc5e6eaa04a10afe130c316f8e17a00..7bf726456b2ec00c5f03ad8a667cc217e6616aa6 100644 (file)
@@ -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)
index 597b763878097e69558839114a23787a8ee925fe..8d97bfcceb17cc23213cf52233a9ca61f99857d2 100644 (file)
@@ -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.
   /*!
This page took 0.025922 seconds and 4 git commands to generate.