On vie, 2011-01-14 at 16:11 +0100, Fred Kiefer wrote:
> Hi German,
> 
> your latest patch looks very promising to me. What I didn't understand
> is the line
> +      else
> +     {
> +       [[self keyWindow] makeMainWindow];
> +     }
> 
> When there is already a main Window, shouldn't we just keep that?
> I will have a closer look at the whole patch over the weekend.
> 
> Thank you for your contribution
> Fred
> 

I thought that this was necessary for the apps that were not prepared to
have the menu in window. But it was a bad argument, the problem is that
we need to save the main window in the metod -hide:, too. Otherwise the
windows are order out and we lose the main window, and method
-deactivate: don't save the main window, because there isn't. This is
the same that NSApp do for key window, save the key window at methods
-hide and -deactivate. Attached the new patch.

Regards.

Index: Source/NSWindow.m
===================================================================
--- Source/NSWindow.m	(revision 31886)
+++ Source/NSWindow.m	(working copy)
@@ -1818,14 +1818,6 @@
   if (_f.is_main == YES)
     {
       _f.is_main = NO;
-
-      //We close the menu if the app will be hide
-      if (NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", self) ==
-	  NSWindows95InterfaceStyle)
-	{
-	  [[[self menu] attachedMenu] close];
-	}
-      
       if (_f.is_key == YES)
         {
           [_wv setInputState: GSTitleBarKey];
Index: Source/NSApplication.m
===================================================================
--- Source/NSApplication.m	(revision 31886)
+++ Source/NSApplication.m	(working copy)
@@ -1293,18 +1293,17 @@
           [_hidden_key makeKeyWindow];
           _hidden_key = nil;
         }
+
+      if ([self mainWindow] == nil && _hidden_main != nil
+          && [[self windows] indexOfObjectIdenticalTo: _hidden_main] != NSNotFound)
+        {
+          [_hidden_main makeMainWindow];
+          _hidden_main = nil;
+        }
       
       if ([self keyWindow] != nil)
         {
           [[self keyWindow] orderFront: self];
-	  
-	  /* If menu is in window, we need a main window, in other way
-	     the menu can't respond */
-	  if (NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", self) ==
-	      NSWindows95InterfaceStyle && [[self keyWindow] canBecomeMainWindow])
-	    {
-	      [[self keyWindow] becomeMainWindow];
-	    }
         }
       else if ([self mainWindow] != nil)
         {
@@ -1354,10 +1353,13 @@
           _hidden_key = [self keyWindow];
           [_hidden_key resignKeyWindow];
         }
-      // FIXME: main window is not saved for when the app is activated again.
-      // This is not a problem if it is also key, and I'm not sure if it
-      // is a problem at all. May be annoying in the case of workspace switch.
-      [[self mainWindow] resignMainWindow];
+      // The main window is saved for when the app is activated again.
+      // This is necessary for menu in window.
+      if ([self mainWindow] != nil)
+        {
+          _hidden_main = [self mainWindow];
+          [_hidden_main resignMainWindow];
+        }
       
       windows_list = GSOrderedWindows();
       iter = [windows_list reverseObjectEnumerator];
@@ -2395,6 +2397,14 @@
           _hidden_key = [self keyWindow];
           [_hidden_key resignKeyWindow];
         }
+
+      // The main window is saved for when the app is activated again.
+      // This is necessary for menu in window.
+      if ([self mainWindow] != nil)
+        {
+          _hidden_main = [self mainWindow];
+          [_hidden_main resignMainWindow];
+        }
       
       windows_list = GSOrderedWindows();
       iter = [windows_list reverseObjectEnumerator];
Index: Source/NSSavePanel.m
===================================================================
--- Source/NSSavePanel.m	(revision 31886)
+++ Source/NSSavePanel.m	(working copy)
@@ -50,7 +50,6 @@
 #import "AppKit/NSImage.h"
 #import "AppKit/NSImageView.h"
 #import "AppKit/NSMatrix.h"
-#import "AppKit/NSMenu.h"
 #import "AppKit/NSPasteboard.h"
 #import "AppKit/NSDragging.h"
 #import "AppKit/NSSavePanel.h"
@@ -183,7 +182,6 @@
   NSImage *image;
   NSRect r;
   id lastKeyView;
-  NSInterfaceStyle style = NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", nil);
 
   // Track window resizing so we can change number of browser columns.
   [[NSNotificationCenter defaultCenter] addObserver: self
@@ -375,12 +373,6 @@
   [self registerForDraggedTypes: [NSArray arrayWithObjects:
 	NSFilenamesPboardType, nil]];
 
-
-  if (style == NSWindows95InterfaceStyle)
-    {	  
-      [[[[NSApp mainWindow] menu] attachedMenu] close];
-    }
-
   return self;
 }
 
Index: Source/NSMenuView.m
===================================================================
--- Source/NSMenuView.m	(revision 31886)
+++ Source/NSMenuView.m	(working copy)
@@ -1389,14 +1389,21 @@
 - (BOOL) _executeItemAtIndex: (int)indexOfActionToExecute
 	       removeSubmenu: (BOOL)subMenusNeedRemoving
 {
+  NSInterfaceStyle style =
+    NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", self);
+  
+  /*If we have menu in window, close the menu after select
+    an option*/
+  if (style == NSWindows95InterfaceStyle)
+    {
+      [[[[NSApp mainWindow] menu] attachedMenu] close];
+    }
+  
   if (indexOfActionToExecute >= 0
       && [_attachedMenu attachedMenu] != nil && [_attachedMenu attachedMenu] ==
       [[_items_link objectAtIndex: indexOfActionToExecute] submenu])
     {
-      NSInterfaceStyle style =
-	  NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", self);
-      if (style == NSMacintoshInterfaceStyle ||
-	  style == NSWindows95InterfaceStyle)
+      if (style == NSMacintoshInterfaceStyle)
         {
 	  // On Macintosh, clicking on or releasing the mouse over a
 	  // submenu item always closes the menu (if it is open) and
@@ -1405,6 +1412,11 @@
 	  return YES;
         }
 
+      if (style == NSWindows95InterfaceStyle)
+	{
+	  return YES;
+	}
+
       if (subMenusNeedRemoving)
         {
           [self detachSubmenu];
Index: Headers/AppKit/NSApplication.h
===================================================================
--- Headers/AppKit/NSApplication.h	(revision 31886)
+++ Headers/AppKit/NSApplication.h	(working copy)
@@ -145,6 +145,7 @@
   NSMutableArray	*_hidden;
   NSMutableArray	*_inactive;
   NSWindow		*_hidden_key;
+  NSWindow              *_hidden_main;
   GSInfoPanel           *_infoPanel;
 
   /* This autorelease pool should only be created and used by -run, with
_______________________________________________
Gnustep-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to