]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/window.cpp
Applied patch [ 735304 ] wxDisplay::ChangeMode - does not resize full-screen windows
[wxWidgets.git] / src / mac / carbon / window.cpp
index 54df63cb6e6a81f4bbbd9ef31e04ec3e9bf7d437..d68b00c5bdbd389c5186f040a82814ae7de8120d 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
@@ -103,17 +104,7 @@ void wxWindowMac::Init()
     // generic
     InitBase();
 
-    // MSW specific
-    m_doubleClickAllowed = 0;
-    m_winCaptured = FALSE;
-
     m_isBeingDeleted = FALSE;
-
-    m_useCtl3D = FALSE;
-    m_mouseInWindow = FALSE;
-
-    m_xThumbSize = 0;
-    m_yThumbSize = 0;
     m_backgroundTransparent = FALSE;
 
     // as all windows are created with WS_VISIBLE style...
@@ -150,7 +141,7 @@ wxWindowMac::~wxWindowMac()
     }
 
     m_isBeingDeleted = TRUE;
-
+    
 #ifndef __WXUNIVERSAL__
     // VS: make sure there's no wxFrame with last focus set to us:
     for ( wxWindow *win = GetParent(); win; win = win->GetParent() )
@@ -193,9 +184,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 +376,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;
@@ -799,25 +790,9 @@ bool wxWindowMac::Show(bool show)
     if ( !wxWindowBase::Show(show) )
         return FALSE;
 
-/*
-    WindowRef window = (WindowRef) MacGetRootWindow() ;
-    wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
-    if ( win == NULL && win->m_isBeingDeleted )
-        return FALSE ;
-*/
     MacSuperShown( show ) ;
     Refresh() ;
-/*
-    if ( !show )
-    {
-        if ( win && !win->m_isBeingDeleted )
-            Refresh() ;
-    }
-    else
-    {
-        Refresh() ;
-    }
-*/
+
     return TRUE;
 }
 
@@ -826,7 +801,7 @@ void wxWindowMac::MacSuperShown( bool show )
     wxWindowListNode *node = GetChildren().GetFirst();
     while ( node )
     {
-        wxWindowMac *child = (wxWindowMac *)node->GetData();
+        wxWindowMac *child = node->GetData();
         if ( child->m_isShown )
             child->MacSuperShown( show ) ;
         node = node->GetNext();
@@ -1277,7 +1252,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
     
     for (wxWindowListNode *node = GetChildren().GetFirst(); node; node = node->GetNext())
     {
-        wxWindowMac *child = (wxWindowMac*)node->GetData();
+        wxWindowMac *child = node->GetData();
         if (child == m_vScrollBar) continue;
         if (child == m_hScrollBar) continue;
         if (child->IsTopLevel()) continue;
@@ -1396,21 +1371,6 @@ void wxWindowMac::SetupColours()
 
 void wxWindowMac::OnIdle(wxIdleEvent& event)
 {
-/*
-   // Check if we need to send a LEAVE event
-   if (m_mouseInWindow)
-   {
-       POINT pt;
-       ::GetCursorPos(&pt);
-       if (::WindowFromPoint(pt) != (HWND) GetHWND())
-       {
-           // Generate a LEAVE event
-           m_mouseInWindow = FALSE;
-           MSWOnMouseLeave(pt.x, pt.y, 0);
-       }
-    }
-*/
-
     // This calls the UI-update mechanism (querying windows for
     // menu/toolbar/control state information)
     UpdateWindowUI();
@@ -1473,7 +1433,7 @@ bool wxWindowMac::MacGetWindowFromPointSub( const wxPoint &point , wxWindowMac**
     
     for (wxWindowListNode *node = GetChildren().GetFirst(); node; node = node->GetNext())
     {
-        wxWindowMac *child = (wxWindowMac*)node->GetData();
+        wxWindowMac *child = node->GetData();
         // added the m_isShown test --dmazzoni
         if ( child->MacGetRootWindow() == window && child->m_isShown )
         {
@@ -1578,7 +1538,7 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
     
     for (wxWindowListNode *node = GetChildren().GetFirst(); node; node = node->GetNext())
     {
-        wxWindowMac *child = (wxWindowMac*)node->GetData();
+        wxWindowMac *child = node->GetData();
         if ( child->MacGetRootWindow() == window && child->IsShown() && child->IsEnabled() )
         {
             if (child->MacDispatchMouseEvent(event))
@@ -1641,7 +1601,7 @@ wxString wxWindowMac::MacGetToolTipString( wxPoint &pt )
     {
         return m_tooltip->GetTip() ;
     }
-    return "" ;
+    return wxEmptyString ;
 }
 
 void wxWindowMac::Update()
@@ -1716,7 +1676,7 @@ const wxRegion& wxWindowMac::MacGetVisibleRegion( bool respectChildrenAndSibling
         {
             for (wxWindowListNode *node = GetChildren().GetFirst(); node; node = node->GetNext())
             {
-                wxWindowMac *child = (wxWindowMac*)node->GetData();
+                wxWindowMac *child = node->GetData();
                 
                 if ( !child->IsTopLevel() && child->IsShown() )
                 {
@@ -1739,7 +1699,7 @@ const wxRegion& wxWindowMac::MacGetVisibleRegion( bool respectChildrenAndSibling
             bool thisWindowThrough = false ;
             for (wxWindowListNode *node = GetParent()->GetChildren().GetFirst(); node; node = node->GetNext())
             {
-                wxWindowMac *sibling = (wxWindowMac*)node->GetData();
+                wxWindowMac *sibling = node->GetData();
                 if ( sibling == this )
                 {
                     thisWindowThrough = true ;
@@ -1828,7 +1788,7 @@ void wxWindowMac::MacRedraw( WXHRGN updatergnr , long time, bool erase)
     {
         // calculate the update region for the child windows by intersecting the window rectangle with our own
         // passed in update region and then offset it to be client-wise window coordinates again
-        wxWindowMac *child = (wxWindowMac*)node->GetData();
+        wxWindowMac *child = node->GetData();
         SetRectRgn( childupdate , child->m_x , child->m_y , child->m_x + child->m_width ,  child->m_y + child->m_height ) ;
         SectRgn( childupdate , updatergn , childupdate ) ;
         OffsetRgn( childupdate , -child->m_x , -child->m_y ) ;
@@ -1854,13 +1814,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 ;
@@ -1988,7 +1948,7 @@ void wxWindowMac::MacSuperChangedPosition()
     wxWindowListNode *node = GetChildren().GetFirst();
     while ( node )
     {
-        wxWindowMac *child = (wxWindowMac *)node->GetData();
+        wxWindowMac *child = node->GetData();
         child->MacSuperChangedPosition() ;
         node = node->GetNext();
     }
@@ -2001,7 +1961,7 @@ void wxWindowMac::MacTopLevelWindowChangedPosition()
     wxWindowListNode *node = GetChildren().GetFirst();
     while ( node )
     {
-        wxWindowMac *child = (wxWindowMac *)node->GetData();
+        wxWindowMac *child = node->GetData();
         child->MacTopLevelWindowChangedPosition() ;
         node = node->GetNext();
     }
@@ -2078,3 +2038,26 @@ 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_DOWN
+        // 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()));
+        if ( ! GetEventHandler()->ProcessEvent(evtCtx) )
+            event.Skip() ;
+       }
+       else
+       {
+               event.Skip() ;
+       }
+}
+