From 3d8079f054e5514e2a0ab79189051c122282f4da Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 17 Mar 2009 21:39:47 +0000 Subject: [PATCH] fix crash at window destruction --- panda/src/osxdisplay/osxGraphicsWindow.h | 2 +- panda/src/osxdisplay/osxGraphicsWindow.mm | 24 ++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/panda/src/osxdisplay/osxGraphicsWindow.h b/panda/src/osxdisplay/osxGraphicsWindow.h index 96421968f3..ef50f31287 100644 --- a/panda/src/osxdisplay/osxGraphicsWindow.h +++ b/panda/src/osxdisplay/osxGraphicsWindow.h @@ -59,7 +59,7 @@ public: virtual void set_properties_now(WindowProperties &properties); private: - void release_system_resources(); + void release_system_resources(bool destructing); inline void send_key_event(ButtonHandle key, bool down); protected: diff --git a/panda/src/osxdisplay/osxGraphicsWindow.mm b/panda/src/osxdisplay/osxGraphicsWindow.mm index 58228cfeea..d5b7008f65 100644 --- a/panda/src/osxdisplay/osxGraphicsWindow.mm +++ b/panda/src/osxdisplay/osxGraphicsWindow.mm @@ -358,7 +358,7 @@ system_close_window() { osxdisplay_cat.debug() << "System Closing Window \n"; } - release_system_resources(); + release_system_resources(false); } //////////////////////////////////////////////////////////////////// @@ -549,7 +549,7 @@ handle_text_input(EventHandlerCallRef my_handler, EventRef text_event) { // Description: Clean up the OS level messes. //////////////////////////////////////////////////////////////////// void osxGraphicsWindow:: -release_system_resources() { +release_system_resources(bool destructing) { if (_is_fullscreen) { _is_fullscreen = false; full_screen_window = NULL; @@ -597,12 +597,14 @@ release_system_resources() { _current_icon = NULL; } - WindowProperties properties; - properties.set_foreground(false); - properties.set_open(false); - properties.set_cursor_filename(Filename()); - system_changed_properties(properties); - + if (!destructing) { + WindowProperties properties; + properties.set_foreground(false); + properties.set_open(false); + properties.set_cursor_filename(Filename()); + system_changed_properties(properties); + } + _is_fullscreen = false; _osx_window = NULL; } @@ -670,7 +672,7 @@ osxGraphicsWindow:: SetWRefCon(_osx_window, (long) NULL); } - release_system_resources(); + release_system_resources(true); } /////////////////////////////////////////////////////////////////// @@ -989,7 +991,7 @@ close_window() { properties.set_open(false); system_changed_properties(properties); - release_system_resources(); + release_system_resources(false); _gsg.clear(); _active = false; GraphicsWindow::close_window(); @@ -1885,7 +1887,7 @@ set_properties_now(WindowProperties &properties) { // get a copy of my properties.. WindowProperties req_properties(_properties); - release_system_resources(); + release_system_resources(false); req_properties.add_properties(properties); os_open_window(req_properties);