Revision: 53244
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53244
Author:   blendix
Date:     2012-12-21 11:56:02 +0000 (Fri, 21 Dec 2012)
Log Message:
-----------
Fix #33644: rendering to a new window and then closing it would not completely
remove it, but still stick around listed in the Window menu.

Fixed by removing the setReleasedWhenClosed:NO hack and using the proper cocoa
window delegate mechanism.

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm

Modified: trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm      2012-12-21 
11:31:59 UTC (rev 53243)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowCocoa.mm      2012-12-21 
11:56:02 UTC (rev 53244)
@@ -67,13 +67,13 @@
 }
 
 - (void)setSystemAndWindowCocoa:(GHOST_SystemCocoa *)sysCocoa 
windowCocoa:(GHOST_WindowCocoa *)winCocoa;
-- (void)windowWillClose:(NSNotification *)notification;
 - (void)windowDidBecomeKey:(NSNotification *)notification;
 - (void)windowDidResignKey:(NSNotification *)notification;
 - (void)windowDidExpose:(NSNotification *)notification;
 - (void)windowDidResize:(NSNotification *)notification;
 - (void)windowDidMove:(NSNotification *)notification;
 - (void)windowWillMove:(NSNotification *)notification;
+- (BOOL)windowShouldClose:(id)sender;  
 @end
 
 @implementation CocoaWindowDelegate : NSObject
@@ -83,11 +83,6 @@
        associatedWindow = winCocoa;
 }
 
-- (void)windowWillClose:(NSNotification *)notification
-{
-       systemCocoa->handleWindowEvent(GHOST_kEventWindowClose, 
associatedWindow);
-}
-
 - (void)windowDidBecomeKey:(NSNotification *)notification
 {
        systemCocoa->handleWindowEvent(GHOST_kEventWindowActivate, 
associatedWindow);
@@ -132,6 +127,14 @@
                wm_draw_update(ghostC);
        }*/
 }
+
+- (BOOL)windowShouldClose:(id)sender;
+{
+       //Let Blender close the window rather than closing immediately
+       systemCocoa->handleWindowEvent(GHOST_kEventWindowClose, 
associatedWindow);
+       return false;
+}
+
 @end
 
 #pragma mark NSWindow subclass
@@ -571,8 +574,6 @@
        [m_window setContentView:m_openGLView];
        [m_window setInitialFirstResponder:m_openGLView];
        
-       [m_window setReleasedWhenClosed:NO]; //To avoid bad pointer exception 
in case of user closing the window
-       
        [m_window makeKeyAndOrderFront:nil];
        
        setDrawingContextType(type);
@@ -616,11 +617,6 @@
        [m_openGLView release];
        
        if (m_window) {
-               // previously we called [m_window release], but on 10.8 this 
does not
-               // remove the window from [NSApp orderedWindows] and perhaps 
other
-               // places, leading to crashes. so instead we set 
setReleasedWhenClosed
-               // back to YES right before closing
-               [m_window setReleasedWhenClosed:YES];
                [m_window close];
        }
        
@@ -955,7 +951,6 @@
                                //Copy current window parameters
                                [tmpWindow setTitle:[m_window title]];
                                [tmpWindow setRepresentedFilename:[m_window 
representedFilename]];
-                               [tmpWindow setReleasedWhenClosed:NO];
                                [tmpWindow setAcceptsMouseMovedEvents:YES];
                                [tmpWindow setDelegate:[m_window delegate]];
                                [tmpWindow setSystemAndWindowCocoa:[m_window 
systemCocoa] windowCocoa:this];
@@ -1013,7 +1008,6 @@
                                //Copy current window parameters
                                [tmpWindow setTitle:[m_window title]];
                                [tmpWindow setRepresentedFilename:[m_window 
representedFilename]];
-                               [tmpWindow setReleasedWhenClosed:NO];
                                [tmpWindow setAcceptsMouseMovedEvents:YES];
                                [tmpWindow setDelegate:[m_window delegate]];
                                [tmpWindow setSystemAndWindowCocoa:[m_window 
systemCocoa] windowCocoa:this];

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to