X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42683dfb10210006f5763c433066cf158dea737f..f7f78039d2e18114efdec0abe46dc4ed2d4529a8:/src/mac/window.cpp diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 54df63cb6e..9f7a20f4e7 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -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 @@ -193,9 +194,6 @@ wxWindowMac::~wxWindowMac() if ( m_parent ) m_parent->RemoveChild(this); - wxWindowDestroyEvent event((wxWindow *)this); - (void)GetEventHandler()->ProcessEvent(event); - // delete our drop target if we've got one #if wxUSE_DRAG_AND_DROP if ( m_dropTarget != NULL ) @@ -388,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; @@ -1641,7 +1642,7 @@ wxString wxWindowMac::MacGetToolTipString( wxPoint &pt ) { return m_tooltip->GetTip() ; } - return "" ; + return wxEmptyString ; } void wxWindowMac::Update() @@ -1854,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 ; @@ -2078,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() ; + } +} +