--- sourceforge.net/trunk/rdesktop/xwin.c 2002/10/02 13:51:16 209 +++ sourceforge.net/trunk/rdesktop/xwin.c 2002/11/05 11:09:26 253 @@ -218,7 +218,7 @@ display = XOpenDisplay(NULL); if (display == NULL) { - error("Failed to open display\n"); + error("Failed to open display: %s\n", XDisplayName(NULL)); return False; } @@ -345,12 +345,14 @@ } input_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | - VisibilityChangeMask | FocusChangeMask; + VisibilityChangeMask | FocusChangeMask | LeaveWindowMask; if (sendmotion) input_mask |= PointerMotionMask; if (ownbackstore) input_mask |= ExposureMask; + if (fullscreen) + input_mask |= EnterWindowMask; if (IM != NULL) { @@ -372,9 +374,6 @@ } while (xevent.type != VisibilityNotify); - if (fullscreen) - XSetInputFocus(display, wnd, RevertToPointerRoot, CurrentTime); - return True; } @@ -531,6 +530,15 @@ XUngrabKeyboard(display, CurrentTime); break; + case EnterNotify: + /* we only register for this event when in fullscreen mode */ + XSetInputFocus(display, wnd, RevertToPointerRoot, CurrentTime); + break; + + case LeaveNotify: + XUngrabKeyboard(display, CurrentTime); + break; + case Expose: XCopyArea(display, backstore, wnd, gc, xevent.xexpose.x, xevent.xexpose.y,