Index: Headers/x11/XGGeneric.h =================================================================== RCS file: /cvsroot/gnustep/gnustep/core/back/Headers/x11/XGGeneric.h,v retrieving revision 1.4 diff -u -r1.4 XGGeneric.h --- Headers/x11/XGGeneric.h 5 Jul 2003 23:49:59 -0000 1.4 +++ Headers/x11/XGGeneric.h 10 Jan 2004 19:42:37 -0000 @@ -76,6 +76,7 @@ long currentFocusWindow; long desiredFocusWindow; unsigned long focusRequestNumber; + unsigned long desiredOrderedWindow; unsigned char lMouse; unsigned char mMouse; unsigned char rMouse; Index: Source/x11/XGServerEvent.m =================================================================== RCS file: /cvsroot/gnustep/gnustep/core/back/Source/x11/XGServerEvent.m,v retrieving revision 1.16 diff -u -r1.16 XGServerEvent.m --- Source/x11/XGServerEvent.m 25 Nov 2003 19:16:34 -0000 1.16 +++ Source/x11/XGServerEvent.m 10 Jan 2004 19:42:38 -0000 @@ -1300,6 +1300,12 @@ NSDebugLLog(@"Focus", @"Key window is already %d", key_num); [GSServerForWindow(key_win) setinputfocus: key_num]; } + else if (generic.desiredOrderedWindow == cWin->number) + { + /* We just want to order the window, not give it focus */ + NSDebugLLog(@"Focus", @"Ignoring focus request"); + generic.desiredOrderedWindow = 0; + } else { NSPoint eventLocation; Index: Source/x11/XGServerWindow.m =================================================================== RCS file: /cvsroot/gnustep/gnustep/core/back/Source/x11/XGServerWindow.m,v retrieving revision 1.35 2004-01-10 Adam Fedor * Prevent orderwindow:relativeTo: from making a window key. * Headers/x11/XGGeneric.h: Add Ivar. * Source/x11/XGServerEvent.m (-_handleTakeFocusAtom:forContext:): Don't take focus if we ordered this window previously. * Source/x11/XGServerWindow.m ([XGServer -orderwindow:::]): Set desiredOrderWindow. ([XGServer -setinputfocus:]): Reset it. diff -u -r1.35 XGServerWindow.m --- Source/x11/XGServerWindow.m 19 Nov 2003 16:05:29 -0000 1.35 +++ Source/x11/XGServerWindow.m 10 Jan 2004 19:42:42 -0000 @@ -1558,8 +1575,10 @@ if (op != NSWindowOut && window->map_state != IsViewable) { XMoveWindow(dpy, window->ident, window->siz_hints.x, - window->siz_hints.y); + window->siz_hints.y); setNormalHints(dpy, window); + /* Set this to ignore any take focus events for this window */ + generic.desiredOrderedWindow = winNum; } switch (op) @@ -2334,6 +2353,7 @@ NSDebugLLog(@"Focus", @"Setting focus to %d", window->number); generic.desiredFocusWindow = win; generic.focusRequestNumber = XNextRequest(dpy); + generic.desiredOrderedWindow = 0; XSetInputFocus(dpy, window->ident, RevertToParent, generic.lastTime); [inputServer ximFocusICWindow: window]; }