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; }