Hello,

On Sun, Sep 27, 2009 at 09:05:20AM +0200, Eduard Bloch wrote:
> #include <hallo.h>
> * Stanislav Maslovski [Sun, Apr 06 2008, 12:17:37PM]:
> > Package: icewm
> > Version: 1.2.35-2~custom1
> > Followup-For: Bug #474495
> > 
> > 
> > Here you can see it:
> > https://sourceforge.net/tracker/index.php?func=detail&aid=1878118&group_id=31&atid=100031
> > 
> > This bug also can be related:
> > https://sourceforge.net/tracker/?func=detail&atid=100031&aid=1875387&group_id=31
> 
> Does not provide any (good) clue.

I reported it to sourceforge long time ago, with a detailed log from
IceWM compiled with enabled debug output, please have a look. When the
problem appears IceWM spits out an internal error message.

http://sourceforge.net/tracker/?func=detail&aid=1878118&group_id=31&atid=100031

> The code seems to be ok, and your problem is not reproducible for me by
> any means.

It is reproducible. First of all, there are bug reports on sourceforge
about the same problem (not originated by me), second, I know several
guys who experience the same bug. In fact, there is a discussion of
this bug going on in debian-russian now.

> Tried stable/unstable icewm and gajim packages in all
> combinations, it works fine.

It seems that this problem is a kind of race, so it does not appear
every time and there must be some special conditions for it to appear.
However, for me it appears too offten to be annoying.

> Do you see anything suspicious in icewm's output? Usually stored to
> ~/.xsession-errors .

Please check the bug report on sourceforge.

I also attach a patch which solves the problem for me. I did it quite
a long time ago, and I do not remember all the details, but I remember
that I did not like this particular hack, that was why I never
submitted it upstream. My changelog from that time says:

  * Reverted changes in icetray.cc from rev. 1.15.2.4 and 1.15.2.5.

Those are CVS revisions.

Regards,
Stanislav
--- icewm-1.2.37.orig/src/icetray.cc
+++ icewm-1.2.37/src/icetray.cc
@@ -36,14 +36,10 @@
     bool checkMessageEvent(const XClientMessageEvent &message);
     void requestDock();
 
-    void handleUnmap(const XUnmapEvent &ev) {
-        YWindow::handleUnmap(ev);
-        MSG(("hide1"));
-//        if (visible() && ev.window == handle()) {
-            MSG(("hide2"));
+    void handleUnmap(const XUnmapEvent &) {
+        MSG(("hide"));
+        if (visible())
             hide();
-            fManaged = false;
-//        }
     }
 
     void trayChanged();
@@ -51,7 +47,6 @@
     Atom icewm_internal_tray;
     Atom _NET_SYSTEM_TRAY_OPCODE;
     YXTray *fTray2;
-    bool fManaged;
 };
 
 class SysTrayApp: public YXApplication {
@@ -188,7 +183,6 @@
     setSize(fTray2->width(),
             fTray2->height());
     fTray2->show();
-    fManaged = false;
     requestDock();
 }
     
@@ -196,15 +190,10 @@
     fTray2->backgroundChanged();
     setSize(fTray2->width(),
             fTray2->height());
-    if (fTray2->visible()) {
-        if (!fManaged)
-            requestDock();
-        else
-            show();
-    } else {
-        fManaged = false;
+    if (fTray2->visible())
+        show();
+    else 
         hide();
-    }
 }
 
 void SysTray::requestDock() {
@@ -224,19 +213,12 @@
 
         XSendEvent(xapp->display(), w, False, StructureNotifyMask, (XEvent *) &xev);
     }
-    fManaged = true;
 }
 
 bool SysTray::checkMessageEvent(const XClientMessageEvent &message) {
     if (message.message_type == icewm_internal_tray) {
-        MSG(("requestDock %lX", (long)handle()));
-        setSize(fTray2->width(),
-                fTray2->height());
-        MSG(("requestDock2 %d %d", width(), height()));
-        if (fTray2->visible())
-            requestDock();
-        else
-            fManaged = false;
+        MSG(("requestDock"));
+        requestDock();
     }
     return true;
 }

Reply via email to