From 060219fca20ff02629d04fd41abfe7c8a36446be Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Tue, 12 Aug 2003 01:19:22 +0000
Subject: extra checks

---
 src/IconButton.cc | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/IconButton.cc b/src/IconButton.cc
index ba6fff8..d7bfd35 100644
--- a/src/IconButton.cc
+++ b/src/IconButton.cc
@@ -20,7 +20,7 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: IconButton.cc,v 1.2 2003/08/12 00:16:16 fluxgen Exp $
+// $Id: IconButton.cc,v 1.3 2003/08/12 01:19:22 fluxgen Exp $
 
 #include "IconButton.hh"
 
@@ -41,9 +41,6 @@
 #include <X11/extensions/shape.h>
 #endif // SHAPE
 
-#include <iostream>
-using namespace std;
-
 IconButton::IconButton(const FbTk::FbWindow &parent, const FbTk::Font &font,
                        FluxboxWindow &win):
     TextButton(parent, font, win.winClient().title()),
@@ -98,14 +95,20 @@ void IconButton::update(FbTk::Subject *subj) {
     // icon pixmap was updated, 
     // so we refresh everything
 
+    // we need to check our client first
+    if (m_win.clientList().size() == 0)
+        return;
+
     XWMHints *hints = XGetWMHints(FbTk::App::instance()->display(), m_win.winClient().window());
     if (hints == 0)
         return;
 
-    if (hints->flags & IconPixmapHint) {
+    if (hints->flags & IconPixmapHint && hints->icon_pixmap != 0) {
         // setup icon window
         m_icon_window.show();
-        m_icon_window.resize(height(), height() - m_icon_window.y());
+        int new_height = height() - m_icon_window.y();
+        int new_width = height();
+        m_icon_window.resize(new_width ? new_width : 1, new_height ? new_height : 1);
 
         m_icon_pixmap.copy(hints->icon_pixmap);
         m_icon_pixmap.scale(m_icon_window.height(), m_icon_window.height());
@@ -113,6 +116,7 @@ void IconButton::update(FbTk::Subject *subj) {
         m_icon_window.setBackgroundPixmap(m_icon_pixmap.drawable());
     } else {
         // no icon pixmap
+        m_icon_window.move(0, 0);
         m_icon_window.hide();
         m_icon_pixmap = 0;
     }
@@ -145,6 +149,10 @@ void IconButton::update(FbTk::Subject *subj) {
 void IconButton::setupWindow() {
     
     m_icon_window.clear();
+
+    if (m_win.clientList().size() == 0)
+        return;
+
     setText(m_win.winClient().title());
     // draw with x offset and y offset
     drawText(m_icon_window.x() + m_icon_window.width() + 1);
-- 
cgit v0.11.2