]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/window.cpp
Use GetItem to get item info for events, even for virtual wxListCtrl.
[wxWidgets.git] / src / mac / carbon / window.cpp
index 6991424ffcd59ef4e2466bc6192f74d7247d8e09..b8a268cd53b1b07e06602330c2374f1ffac5a7f9 100644 (file)
@@ -33,6 +33,8 @@
     #include "wx/layout.h"
     #include "wx/statusbr.h"
     #include "wx/menuitem.h"
+    #include "wx/treectrl.h"
+    #include "wx/listctrl.h"
 #endif
 
 #include "wx/tooltip.h"
@@ -156,6 +158,7 @@ static const EventTypeSpec eventList[] =
     { kEventClassCommand, kEventProcessCommand } ,
     { kEventClassCommand, kEventCommandUpdateStatus } ,
 
+    { kEventClassControl , kEventControlGetClickActivation } ,
     { kEventClassControl , kEventControlHit } ,
 
     { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent } ,
@@ -166,6 +169,9 @@ static const EventTypeSpec eventList[] =
     { kEventClassControl , kEventControlVisibilityChanged } ,
     { kEventClassControl , kEventControlEnabledStateChanged } ,
     { kEventClassControl , kEventControlHiliteChanged } ,
+
+    { kEventClassControl , kEventControlActivate } ,
+    { kEventClassControl , kEventControlDeactivate } ,
 #endif
     { kEventClassControl , kEventControlSetFocusPart } ,
 
@@ -251,10 +257,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
 
                     {
                         wxMacCGContextStateSaver sg( cgContext ) ;
-                        // make sure the context is having its origin at the wx-window coordinates of the 
-                        // view (read at the top of this file about the differences)
-                                               if ( thisWindow->MacGetLeftBorderSize() != 0 || thisWindow->MacGetTopBorderSize() != 0 )
-                                                       CGContextTranslateCTM( cgContext , -thisWindow->MacGetLeftBorderSize() , -thisWindow->MacGetTopBorderSize() );
                         float alpha = 1.0 ;
                         {
                             wxWindow* iter = thisWindow ;
@@ -297,6 +299,16 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
         case kEventControlHiliteChanged :
             thisWindow->MacHiliteChanged() ;
             break ;
+            
+        case kEventControlActivate :
+        case kEventControlDeactivate :
+            if ( thisWindow->IsKindOf( CLASSINFO( wxTreeCtrl ) ) 
+                    || thisWindow->IsKindOf( CLASSINFO( wxListCtrl ) ) 
+                )
+                thisWindow->Refresh();
+            
+            //thisWindow->MacActivateStateChanged() ;
+            break ;
 #endif
 
         // we emulate this event under Carbon CFM
@@ -354,6 +366,18 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
             result = thisWindow->MacControlHit( handler , event ) ;
             break ;
 
+        case kEventControlGetClickActivation :
+            {
+               // fix to always have a proper activation for DataBrowser controls (stay in bkgnd otherwise)
+                WindowRef owner = cEvent.GetParameter<WindowRef>(kEventParamWindowRef);
+                if ( !IsWindowActive(owner) )
+                {
+                    cEvent.SetParameter(kEventParamClickActivation,(UInt32) kActivateAndIgnoreClick) ;
+                    result = noErr ;
+                }
+            }
+            break ;
+
         default :
             break ;
     }
@@ -1099,7 +1123,7 @@ void wxWindowMac::MacPostControlCreate(const wxPoint& pos, const wxSize& size)
     m_peer->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics) ) ;
 
     if (!m_macIsUserPane)
-        SetInitialBestSize(size);
+        SetInitialSize(size);
 
     SetCursor( *wxSTANDARD_CURSOR ) ;
 }
@@ -1665,10 +1689,10 @@ void wxWindowMac::DoGetClientSize( int *x, int *y ) const
 
 bool wxWindowMac::SetCursor(const wxCursor& cursor)
 {
-    if (m_cursor == cursor)
+    if (m_cursor.IsSameAs(cursor))
         return false;
 
-    if (wxNullCursor == cursor)
+    if (!cursor.IsOk())
     {
         if ( ! wxWindowBase::SetCursor( *wxSTANDARD_CURSOR ) )
             return false ;
@@ -2696,7 +2720,7 @@ void wxWindowMac::OnSetFocus( wxFocusEvent& event )
         Rect rect ;
 
         m_peer->GetRect( &rect ) ;
-        // auf den umgebenden Rahmen zur\9fck
+        // auf den umgebenden Rahmen zurÂ\9fck
         InsetRect( &rect, -1 , -1 ) ;
 
         wxTopLevelWindowMac* top = MacGetTopLevelWindow();