Your comments

Thanks again for the detailed followup. It really does sound like a hack. That the Chrome focus method raises the window at all is the main problem, and I don't see an easy solution given the limitations of the API.


I think that your proposal to prevent the second refocus could work. Call it the "XMouse" option. It could work like you've described, but I think it might need one tweak.


Consider: pointer enters the main Chome window. onFocus is called and focuses Sidewise for the window raise side-effect, leaving sidewise both focused and raised. The pointer, however, is not moved and is still at the edge of the Chrome window. As the user continues movement over the chrome window, XMouse gives focus back to the main window, and the cycle repeats, each time leaving focus over Sidewise. That's no good, as the two would be fighting for focus. As you said, the user would have to click the main window to break this cycle. And clicking is the opposite of XMouse.


So to finish the hack, only give focus to the Sidewise bar if it wasn't already focused within the last few seconds.  


If this is all too hack-y then I'll completely understand and will continue to use other options you've mentioned.


Another possibility occurred to me, though I don't know how feasible it is:

Do the focus sidewise - focus main window combination when the user clicks anywhere in the browser - tabs, bookmarks, navigation buttons, etc. This would make clicking anywhere the equivalent of clicking the sidewise button. Again you may need some state to know if focus had ever left the Chrome window because I think you want to avoid doing these focus events unnecessarily in order to minimize the alt-tab ordering problems.


Lastly, while XScroll sounds interesting, the only reason I use XMouse is to enter text without having to click the window first. 



thanks again-

I see what you mean about the window API being limited.. It looks like onFocusedChanged is the only related event, and "focused" the only related window property.


Given these limitations I'm guessing the current implementation hooks into the onFocusChanged and then toggles the alwaysOnTop property in order to raise the window?  Why is the main window getting raised though, and not just Sidewise? It wouldn't be so bad if it were only the Sidewise window.


Thanks for the quick response too!