<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">For a while now, I've noticed large incompatibilities between Mono's use of GetFocus/LostFocus events and .NET's.  I decided to look into it this weekend...and just ended up with more questions.</div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">My test case is the search-form in our application; when the user double-clicks a search-result line, I bring-to-front the application window and then select the control containing the search-result.  It appears that this doesn't lead to a GotFocus event on the TextBox!  (I modified TextBox.cs so that its existing LostFocus event output to the
 console, and I added a GotFocus event-handler to do the same.)</div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">Digging around, I came up with the enclosed patch as a proposed solution; it modified Control.Select() so that it looks like the Select() method near line 1283.  This led to the GotFocus event-handler getting called...followed by a small explosion of other WmSetFocus/WmKillFocus events that completely obliterated that.</div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">The worst part is...these events seem to be coming from the X server.  In XplatUIX11.cs, around line 7315, I modified XSendEvent() so that it looked like the one near line 6544, i.e. so
 that I could put a breakpoint in it.  That breakpoint wasn't hit during the explosion of <span style="font-size: 12pt; ">WmSetFocus/WmKillFocus events.  So Mono isn't generating those events; my only guess is that the X server is.</span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><span style="font-size: 12pt; "><br></span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><span style="font-size: 12pt; ">Here's the flow-of-control I managed to unearth with lots of stack-traces being dumped to the console:</span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><span style="font-size: 12pt; "><br></span></div><div><span><font face="times new roman, new york, times, serif"><div>1) My text-box gets a GotFocus event, from my call to Control.Select().</div><div>2) My text-box gets a LostFocus event, from a
 WmKillFocus message generated by an X event.</div><div>3) My text-box gets a GotFocus event, from a WmSetFocus message generated by an X event.</div><div>4) There's a WmActivate event, apparently from an X event, but I don't know what's being activated -- it doesn't hit any of my debug-output code.</div><div>5) There's another WmActivate event, apparently from an X event.</div><div>   It first deactivates my text-box, and activates "hSplitContainer" in my application's form.</div><div>   That leads to my text-box getting a LostFocus event.</div><div>   Then it deactivates "vSplitContainer" and activates "vSplitContainer" in container "hSplitContainer"...apparently 3 times in a row.</div><div>6) There's a WmActivate event, apparently from an X event, but I don't know what's being activated -- it doesn't hit any of my debug-output code.</div><div><br></div><div>I really have no idea how to make heads or tails of
 this.</div><div><br></div><div>Does anyone know how focusing/unfocusing is SUPPOSED to work in Mono under X11?</div><div><br></div><div>Steven Boswell</div><div><br></div></font></span></div></div></body></html>