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

Reply via email to