]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/window.cpp
mach targets added
[wxWidgets.git] / src / mac / window.cpp
index 4592280816f4752d240f4a567832e3d33fc6ba2b..9f7a20f4e7a0be3afa0b3844757d33b1002d5032 100644 (file)
@@ -77,6 +77,7 @@ BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase)
   EVT_INIT_DIALOG(wxWindowMac::OnInitDialog)
   EVT_IDLE(wxWindowMac::OnIdle)
   EVT_SET_FOCUS(wxWindowMac::OnSetFocus)
+  EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent)
 END_EVENT_TABLE()
 
 #endif
@@ -184,10 +185,23 @@ wxWindowMac::~wxWindowMac()
         gFocusWindow = NULL ;
     }
 
+       // CS: copied from MSW :
+    // VS: destroy children first and _then_ detach *this from its parent.
+    //     If we'd do it the other way around, children wouldn't be able
+    //     find their parent frame (see above).
+    DestroyChildren();
+
     if ( m_parent )
         m_parent->RemoveChild(this);
 
-    DestroyChildren();
+    // delete our drop target if we've got one
+#if wxUSE_DRAG_AND_DROP
+    if ( m_dropTarget != NULL )
+    {
+        delete m_dropTarget;
+        m_dropTarget = NULL;
+    }
+#endif // wxUSE_DRAG_AND_DROP
 }
 
 // Constructor
@@ -372,20 +386,23 @@ bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y)
     menu->UpdateUI();
     ClientToScreen( &x , &y ) ;
 
-    ::InsertMenu( (MenuHandle) menu->GetHMenu() , -1 ) ;
+    menu->MacBeforeDisplay( true ) ;
     long menuResult = ::PopUpMenuSelect((MenuHandle) menu->GetHMenu() ,y,x, 0) ;
     if ( HiWord(menuResult) != 0 )
     {
         MenuCommand id ;
         GetMenuItemCommandID( GetMenuHandle(HiWord(menuResult)) , LoWord(menuResult) , &id ) ;
-
-        wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, id );
-        event.m_timeStamp =  TickCount() ;
-        event.SetEventObject(this->GetEventHandler());
-        event.SetInt( id );
-        GetEventHandler()->ProcessEvent(event);
+        wxMenuItem* item = NULL ;
+        wxMenu* realmenu ;
+        item = menu->FindItem(id, &realmenu) ;
+        if (item->IsCheckable())
+        {
+            item->Check( !item->IsChecked() ) ;
+        }        
+        menu->SendEvent( id , item->IsCheckable() ? item->IsChecked() : -1 ) ;
     }
-    ::DeleteMenu( menu->MacGetMenuId() ) ;
+    menu->MacAfterDisplay( true ) ;
+
     menu->SetInvokingWindow(NULL);
 
   return TRUE;
@@ -1625,7 +1642,7 @@ wxString wxWindowMac::MacGetToolTipString( wxPoint &pt )
     {
         return m_tooltip->GetTip() ;
     }
-    return "" ;
+    return wxEmptyString ;
 }
 
 void wxWindowMac::Update()
@@ -1838,13 +1855,13 @@ WXHWND wxWindowMac::MacGetRootWindow() const
 
         iter = iter->GetParent() ;
     }
-    wxASSERT_MSG( 1 , "No valid mac root window" ) ;
+    wxASSERT_MSG( 1 , wxT("No valid mac root window") ) ;
     return NULL ;
 }
 
 void wxWindowMac::MacCreateScrollBars( long style )
 {
-    wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , "attempt to create window twice" ) ;
+    wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , wxT("attempt to create window twice") ) ;
 
     bool hasBoth = ( style & wxVSCROLL ) && ( style & wxHSCROLL ) ;
     int adjust = hasBoth ? MAC_SCROLLBAR_SIZE - 1: 0 ;
@@ -2062,3 +2079,25 @@ wxPoint wxGetMousePosition()
     return wxPoint(x, y);
 }
 
+void wxWindowMac::OnMouseEvent( wxMouseEvent &event ) 
+{
+       if ( event.GetEventType() == wxEVT_RIGHT_DOWN )
+       {
+               // copied from wxGTK : CS
+        // generate a "context menu" event: this is similar to wxEVT_RIGHT_UP
+        // except that:
+        //
+        // (a) it's a command event and so is propagated to the parent
+        // (b) under MSW it can be generated from kbd too
+        // (c) it uses screen coords (because of (a))
+        wxContextMenuEvent evtCtx(wxEVT_CONTEXT_MENU,
+                                  this->GetId(),
+                                  this->ClientToScreen(event.GetPosition()));
+        this->GetEventHandler()->ProcessEvent(evtCtx);
+       }
+       else
+       {
+               event.Skip() ;
+       }
+}
+