[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: