]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/window.mm
byte length for interim UniChar String corrected
[wxWidgets.git] / src / cocoa / window.mm
index 2bcdeb8c73ee34229eb40ee4665f75414e53dd13..91e48b8579dc1ef5fea0cad49850e7ae863b1f64 100644 (file)
@@ -267,8 +267,8 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID winid,
     {
         m_parent->AddChild(this);
         m_parent->CocoaAddChild(this);
+        SetInitialFrameRect(pos,size);
     }
-    SetInitialFrameRect(pos,size);
 
     return TRUE;
 }
@@ -279,7 +279,10 @@ wxWindow::~wxWindow()
     wxAutoNSAutoreleasePool pool;
     DestroyChildren();
 
-    CocoaRemoveFromParent();
+    // Make sure our parent (in the wxWindows sense) is our superview
+    // before we go removing from it.
+    if(m_parent && m_parent->GetNSView()==[GetNSViewForSuperview() superview])
+        CocoaRemoveFromParent();
     delete m_cocoaHider;
     delete m_cocoaScroller;
     SetNSView(NULL);
@@ -301,6 +304,10 @@ void wxWindowCocoa::CocoaRemoveFromParent(void)
 
 void wxWindowCocoa::SetNSView(WX_NSView cocoaNSView)
 {
+    // Assume setting the NSView to NULL means this wxWindow is being destroyed
+    if(m_cocoaNSView && !cocoaNSView)
+        SendDestroyEvent();
+
     bool need_debug = cocoaNSView || m_cocoaNSView;
     if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d"),this,m_cocoaNSView,[m_cocoaNSView retainCount]);
     DisassociateNSView(m_cocoaNSView);
@@ -411,17 +418,27 @@ bool wxWindowCocoa::Cocoa_mouseUp(WX_NSEvent theEvent)
 
 bool wxWindowCocoa::Cocoa_rightMouseDown(WX_NSEvent theEvent)
 {
-    return false;
+    wxMouseEvent event([theEvent clickCount]<2?wxEVT_RIGHT_DOWN:wxEVT_RIGHT_DCLICK);
+    InitMouseEvent(event,theEvent);
+    wxLogDebug(wxT("Mouse Down @%d,%d num clicks=%d"),event.m_x,event.m_y,[theEvent clickCount]);
+    return GetEventHandler()->ProcessEvent(event);
 }
 
 bool wxWindowCocoa::Cocoa_rightMouseDragged(WX_NSEvent theEvent)
 {
-    return false;
+    wxMouseEvent event(wxEVT_MOTION);
+    InitMouseEvent(event,theEvent);
+    event.m_rightDown = true;
+    wxLogDebug(wxT("Mouse Drag @%d,%d"),event.m_x,event.m_y);
+    return GetEventHandler()->ProcessEvent(event);
 }
 
 bool wxWindowCocoa::Cocoa_rightMouseUp(WX_NSEvent theEvent)
 {
-    return false;
+    wxMouseEvent event(wxEVT_RIGHT_UP);
+    InitMouseEvent(event,theEvent);
+    wxLogDebug(wxT("Mouse Up @%d,%d"),event.m_x,event.m_y);
+    return GetEventHandler()->ProcessEvent(event);
 }
 
 bool wxWindowCocoa::Cocoa_otherMouseDown(WX_NSEvent theEvent)