Since gnustep-cvs isn't working...
Commiting these patches:
2003-11-26 Adam Fedor <[EMAIL PROTECTED]>
* orderFront fixes
* Source/NSWindow.m (-orderFront:): Remove NSApp isActive
check.
(-orderFrontRegardless): Update for special case (otherWin=-1)
(-orderWindow:relativeTo:): Pass -1 for otherWin to backend
if we're the current app.
* Source/GSDisplayServer.m: Update documentations.
* Source/NSApplication.m (-changeWindowsItem:title:filename:): Revert
patch from 2003-10-20.
Index: Source/GSDisplayServer.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/gui/Source/GSDisplayServer.m,v
retrieving revision 1.18
diff -u -r1.18 GSDisplayServer.m
--- Source/GSDisplayServer.m 29 Oct 2003 07:01:13 -0000 1.18
+++ Source/GSDisplayServer.m 27 Nov 2003 04:34:38 -0000
@@ -550,7 +550,7 @@
/** Sets the window device information for the current NSGraphicsContext,
- typically by calling [NSGraphicsContext -GSSetDevice:::],
+ typically by calling [NSGraphicsContext-GSSetDevice:::],
although depending on the concrete implmentation, more information
than this may need to be exchanged. */
- (void) windowdevice: (int) win
@@ -559,7 +559,12 @@
}
/** Causes the window to be ordered onto or off the screen depending
- on the value of op. The window is ordered relative to otherWin. */
+ on the value of op. The window is ordered relative to otherWin.
+ The window will never be ordered in front of the current key/main
+ window except in the special case where otherWin is negative (This
+ is a special feature that [NSWindow-orderWindow:relativeTo:] uses
+ to place the window correctly).
+*/
- (void) orderwindow: (int) op : (int) otherWin : (int) win
{
[self subclassResponsibility: _cmd];
Index: Source/NSApplication.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/gui/Source/NSApplication.m,v
retrieving revision 1.256
diff -u -r1.256 NSApplication.m
--- Source/NSApplication.m 26 Nov 2003 13:57:32 -0000 1.256
+++ Source/NSApplication.m 27 Nov 2003 04:34:39 -0000
@@ -2271,7 +2271,7 @@
i++;
}
item = [_windows_menu insertItemWithTitle: aString
- action: @selector(deminiaturize:)
+ action: @selector(orderFront:)
keyEquivalent: @""
atIndex: i];
[item setTarget: aWindow];
Index: Source/NSWindow.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/gui/Source/NSWindow.m,v
retrieving revision 1.299
diff -u -r1.299 NSWindow.m
--- Source/NSWindow.m 26 Nov 2003 23:02:20 -0000 1.299
+++ Source/NSWindow.m 27 Nov 2003 04:34:41 -0000
@@ -1357,29 +1357,67 @@
[self becomeMainWindow];
}
+/**
+ Orders the window to the back of its level. Equivalent to
+ -orderWindow: NSWindowBelow relativeTo: 0.
+*/
- (void) orderBack: (id)sender
{
[self orderWindow: NSWindowBelow relativeTo: 0];
}
+/**
+ If the application is active, orders the window to the front in its
+ level. If the application is not active, the window is ordered in as
+ far forward as possible in its level without being ordered in front
+ of the key or main window of the currently active app. The current key
+ and main window status is not changed. Equivalent to -orderWindow:
+ NSWindowAbove relativeTo: 0.
+*/
- (void) orderFront: (id)sender
{
- if ([NSApp isActive] == YES)
- {
- [self orderWindow: NSWindowAbove relativeTo: 0];
- }
+ [self orderWindow: NSWindowAbove relativeTo: 0];
}
+/**
+ Orders the window to the front in its level (even in front of the
+ key and main windows of the current app) regardless of whether the
+ app is current or not. This method should only be used in rare cases
+ where the app is cooperating with another app that is displaying
+ data for it. The current key and main window status is not changed.
+*/
- (void) orderFrontRegardless
{
- [self orderWindow: NSWindowAbove relativeTo: 0];
+ [self orderWindow: NSWindowAbove relativeTo: -1];
}
+/**
+ Orders the window out from the screen. Equivalent to -orderWindow:
+ NSWindowOut relativeTo: 0.
+*/
- (void) orderOut: (id)sender
{
[self orderWindow: NSWindowOut relativeTo: 0];
}
+/**
+ <p>
+ If place is NSWindowOut, removes the window from the screen. If
+ place is NSWindowAbove, places the window directly above otherWin,
+ or directly above all windows in its level if otherWin is 0. If
+ place is NSWindowBelow, places the window directly below otherWin,
+ or directly below all windows in its level if otherWin is 0.
+ </p>
+ <p>
+ If place is NSWindowAbove or NSWindowBelow and the application is
+ hidden, the application is unhidden.
+ <p>
+*/
+/*
+ As a special undocumented case (for -orderFrontRegardless), if otherWin
+ is negative, then the backend should not try to keep the window below the
+ current key/main window
+*/
- (void) orderWindow: (NSWindowOrderingMode)place relativeTo: (int)otherWin
{
GSDisplayServer *srv = GSServerForWindow(self);
@@ -1431,6 +1469,14 @@
else if (place != NSWindowOut)
[_contentView displayIfNeeded];
+ /* The backend will keep us below the current key window unless we
+ force it not too */
+ if ((otherWin == 0
+ || otherWin == [[NSApp keyWindow] windowNumber]
+ || otherWin == [[NSApp mainWindow] windowNumber])
+ && [NSApp isActive])
+ otherWin = -1;
+
[srv orderwindow: place : otherWin : _windowNum];
if (display)
[self display];
2003-11-26 Adam Fedor <[EMAIL PROTECTED]>
* Source/x11/XGServerWindow.m ([XGServer -orderwindow:::]):
When orderWin == 0, make sure the window does not go in front
of the current key window.
Index: Source/x11/XGServerWindow.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/back/Source/x11/XGServerWindow.m,v
retrieving revision 1.35
diff -u -r1.35 XGServerWindow.m
--- Source/x11/XGServerWindow.m 19 Nov 2003 16:05:29 -0000 1.35
+++ Source/x11/XGServerWindow.m 27 Nov 2003 04:36:17 -0000
@@ -1534,10 +1534,27 @@
NSDebugLLog(@"XGTrace", @"DPSorderwindow: %d : %d : %d",op,otherWin,winNum);
level = window->win_attrs.window_level;
- if (otherWin != 0)
+ if (otherWin > 0)
{
other = WINDOW_WITH_TAG(otherWin);
- level = other->win_attrs.window_level;
+ if (other)
+ level = other->win_attrs.window_level;
+ }
+ else if (otherWin == 0 && op == NSWindowAbove)
+ {
+ /* Don't let the window go in front of the current key/main window. */
+ /* FIXME: Don't know how to get the current main window. */
+ Window keywin;
+ int revert, status;
+ status = XGetInputFocus(dpy, &keywin, &revert);
+ other = NULL;
+ if (status == True)
+ {
+ /* Alloc a temporary window structure */
+ other = GSAutoreleasedBuffer(sizeof(gswindow_device_t));
+ other->ident = keywin;
+ op = NSWindowBelow;
+ }
}
else
{
_______________________________________________
Bug-gnustep mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-gnustep