Instead of XQuartz, I am using Ion-3 as my default window manager in rootless mode. The window manager Ion grabs the whole desktop and allows me to tile it into frames. Each frame can hold several windows of X11 applications. Ion makes heavy use of focus follows mouse, as it moves focus to the frame then thus to the window where the mouse moves to. Ion was unusable since Xquartz-1.3.0-apple13, see this discussion on x11-users: http://lists.apple.com/archives/x11-users/2008/Apr/msg00131.html . Short version: When I open a non-X11 application, i.e. native application, the native window opens up in front of my X11 windows and has the focus. As soon as I move the mouse into another X11 window that is somewhere in the background, this window pops to front and gets painted over the native window. The native window still has the focus, though (text I tpye ends up in the native window). The situation improved with this patch: http://cgit.freedesktop.org/xorg/xserver/commit/?h=xorg-server-1.4-apple&id=... Now, X11 only gets events when the mouse is over an X11 window. If the mouse does not leave the native window, X11 does not receive an event and thus the X11 windows does not pop to front. As soon as I leave the native window, the underlying X11 window pops to front, but the focus stays with the native window, same as before. To improve my situation even further, I meanwhile run the latest development xorg-server-1.4 with following patch, that prevents move events from beeing sent to X11 without any problems: diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index 7bf4d71..41a140b 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -1065,6 +1065,8 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe if(!quartzServerVisible) { xp_window_id wid; + if (ev_button==0) return; + /* Sigh. Need to check that we're really over one of * our windows. (We need to receive pointer events while * not in the foreground, but we don't want to receive them With this patch, move events are not passed to the background X11, but as soon as I click into a X11 window in the background, the focus change happens. Fine for me. But I am not sure, if I miss something and if my workaround breaks something that I haven't realized yet. Can someone please explain to me, why the comments states "we need to receive pointer events while not in the foreground"? For me, pushing all the pointer events to the background X11 breaks Ion. Thus, I'd like to see the possibility to prevent this from happening, maybe with a preference setting. Do you have a better solution to my problem? Thanks in advance for your help! -- Marcus
participants (1)
-
Marcus Crestani