Re: Bug report - FvwmButtons, stalonetray and DestroyNotify events

2012-03-26 Thread Robert Parlett
Thank you for your reply.

On Mon, Mar 26, 2012 at 10:49 AM, Thomas Adam tho...@fvwm.org wrote:
 I think I'll just go with changing the event to check for
 xdestroywindow.event and leave everything else as-is.  That seems the
 best approach.

But be careful - the member you want is xdestroywindow.window, not
xdestroywindow.event.  Changing to the latter will in fact not be a change
at all; it refers to the same field as xany.window.

 As far as stalonetray goes, it is very odd in its approach to managing
 the tray icons -- and it's only that reason which has caused it to be
 problematic, not just in FVWM but other window managers.  Please note
 that I do not want bugs/design flaws/whatever you choose to call them
 with stalonetray, to be conflated with other problems in FvwmButtons:
 that you found one very odd case where this is triggered is not
 indicative of allowing stalonetray off the hook.  It is fundamentally
 broken.

Dear me, poor stalonetray!  For what it's worth, I have found that
stalonetray works very well, so long as it's treated politely by
FvwmButtons.



Re: Bug report - FvwmButtons, stalonetray and DestroyNotify events

2012-03-25 Thread Robert Parlett
Thanks for the reply.

On Sat, Mar 24, 2012 at 2:32 PM, Thomas Adam tho...@fvwm.org wrote:

 On 21 March 2012 22:06, Robert Parlett r.parl...@gmail.com wrote:
  There are two possible fixes.  I am not sure which is best.  The first
  and most obvious is to change the Event.xany.window at line 1461
  above to Event.xdestroywindow.window.  Note that there are also two

 Ah, but this isn't guaranteed to be the correct window...

Can you elucidate a bit... surely the correct window (to compare with
swin) at line 1461 is the one being destroyed.  At the moment, as the
code stands, that is not necessarily what is being compared.
Event.xany.window will refer to the destroyed window if the event was
selected via StructureNotifyMask (as it will be if the swallowed
window itself is destroyed), but it will refer to the *parent* of the
destroyed window if the event was selected via SubstructureNotifyMask
(as it will be if a child of the swallowed window is destroyed).  This
second case is what happens when a stalonetray icon is destroyed.  The
parent of the destroyed window is the swallowed window itself, which
is why the the Event.xany.window == swin test succeeds and makes
FvwmButtons wrongly conclude that the tray is destroyed whenever a
tray icon is destroyed.

The correct test is Event.xdestroywindow.window == swin, since
Event.xdestroywindow.window always refers to the destroyed window,
regardless of whether the event was selected via StructureNotifyMask
or SubstructureNotifyMask

The naming of the fields in the overlapping structs XAnyEvent and
XDestroyWindowEvent is highly misleading, and I can easily see how one
could write Event.xany.window, thinking you were getting
Event.xdestroywindow.window, but in fact were getting
Event.xdestroywindow.event.


 I reported this to the author of stalonetray well over a year ago.


I must say I thought that stalonetray was at fault too, but in the
event concluded it wasn't.  The misbehaviour of stalonetray in
Fvwmbuttons is triggered by one of its icons closing, which in turn
sends the DestroyNotify to FvwmButtons, which misinterpets the
message, believing that the tray itself has been destroyed.  I didn't
mention it in my original bug report (which was a bit too long
anyway!), but you will see other odd stalonetray behaviour as a
consequence, in particular when it tries to expand its tray window.
If this happends after the bug has been triggered, then the tray will
disappear.

 I guess the reason why FvwmButtons tracks StructureNotify requests is
 so that it can track windows changing map state -- consider
 iconification a good example of this.  Perhaps the behaviour of
 FvwmButtons from transitioning from Goodstuff might have repositioned
 itself based on the client bit-gravity?  I am not sure.  But I can
 certainly see a need for it still -- Tk applications have
 traditionally never played well with reparenting.


I am sure you're right, and that StructureNotify events for swallowed
windows must be tracked.  What I was suggesting (somewhat
speculatively) was getting rid of SubstructureNotifyMask from
SW_EVENTS, but leaving StructureNotifyMask.  In other words,
FvwmButtons will get the StructureNotify events for the swallowed
window itself, but not for the swallowed window's children.  So in the
case of stalonetray, FvwmButtons won't even get notified when a tray
icon is destroyed, and the whole question of interpreting or
misinterpreting that event no longer arises.  Of course the
speculative element here is that some other feature of FvwmButtons
relies on being notified about what is happening to a swallowed
window's children, but I can't think what that could be.