Re: IceWM tray bug (Was: Re: Как правильнее всего ставить Lenny сл сменой кодировки?)
On Sat, Sep 26, 2009 at 03:11:12PM +0400, Stanislav Maslovski wrote:
> On Sat, Sep 26, 2009 at 10:26:40AM +0400, Dmitry Semyonov wrote:
> > 2009/9/24 Evgeny M. Zubok <evgeny.zubok@tochka.ru>:
> >
> > > Баг заключается в том, что трей либо в
> > > отдельное черное окно незакрываемое уходит, либо просто схлопывается и
> > > icewmtray надо запускать заново (хотя бы из командной строки
> > > icewm). Багрепорты имеются и в Debian BTS, и в icewm BTS. В Etch все
> > > работало хорошо.
> >
> > Если ссылки на баги есть под рукой, кинь, пожалуйста.
>
> http://sourceforge.net/tracker/?func=detail&aid=1878118&group_id=31&atid=100031
>
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=474495
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=529944
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=539490
В добавление:
Сам я пользуюсь патченным icewm 1.2.37, где этот баг не проявляется
(патч прилагается). Дело давнее, всех деталей я уже не помню, но
помню, что в качестве окончательного решения этот патч не годится
(потому и не был отправлен в апстрим). В changelog у меня записано
следующее:
* Reverted changes in icetray.cc from rev. 1.15.2.4 and 1.15.2.5.
Имеются ввиду CVS ревизии. Если кто захочет покопаться дальше --
welcome.
--
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 to: