]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/tooltip.cpp
Blind fix for bug #529874 .
[wxWidgets.git] / src / mac / carbon / tooltip.cpp
index 5f938dcfb59025ebbe33b1ba37c0c3b769a9e6d3..6e86ca590cdb5452ad64e5a771f62702977f78fc 100644 (file)
@@ -11,7 +11,7 @@
     #pragma implementation "tooltip.h"
 #endif
 
-#include "wx/setup.h"
+#include "wx/defs.h"
 
 #if wxUSE_TOOLTIPS
 
 #include "wx/tooltip.h"
 #include "wx/timer.h"
 #include "wx/geometry.h"
-#include "wx/mac/aga.h"
 #include "wx/mac/uma.h"
 
 //-----------------------------------------------------------------------------
 // global data
 //-----------------------------------------------------------------------------
 
+class wxMacToolTipTimer ;
+
 class wxMacToolTip
 {
        public :
@@ -48,24 +49,23 @@ class wxMacToolTip
                PicHandle       m_backpict ;
                bool            m_shown ;
                long            m_mark ;
+               wxMacToolTipTimer* m_timer ;
 } ;
 
-class wxMacToolTipTimer : wxTimer
+class wxMacToolTipTimer : public wxTimer
 {
 public:
-       wxMacToolTipTimer(wxMacToolTip* tip, int iMilliseconds) ;
-
-       void Notify()
-       {
-               if ( m_mark == m_tip->GetMark() )
-                       m_tip->Draw() ;
-
-               delete this;
-       }
-       
+    wxMacToolTipTimer() {} ;
+    wxMacToolTipTimer(wxMacToolTip* tip, int iMilliseconds) ;
+    virtual ~wxMacToolTipTimer() {} ;
+    void Notify()
+    {
+        if ( m_mark == m_tip->GetMark() )
+            m_tip->Draw() ;    
+    }
 protected:
-       wxMacToolTip*   m_tip;
-       long                    m_mark ;
+    wxMacToolTip*      m_tip;
+    long               m_mark ;
 };
 
 //-----------------------------------------------------------------------------
@@ -148,7 +148,7 @@ void wxToolTip::RelayEvent( wxWindow *win , wxMouseEvent &event )
                                s_ToolTipArea = wxRect2DInt( event.m_x - 2 , event.m_y - 2 , 4 , 4 ) ;
                                s_LastWindowEntered = win ;
                                
-                               WindowRef window = win->MacGetRootWindow() ;
+                               WindowRef window = MAC_WXHWND( win->MacGetRootWindow() ) ;
                                int x = event.m_x ;
                                int y = event.m_y ;
                                wxPoint local( x , y ) ;
@@ -179,22 +179,27 @@ wxMacToolTip::wxMacToolTip()
        m_backpict = NULL ;
        m_mark = 0 ;
        m_shown = false ;
+    m_timer = NULL ;
 }
 
 void wxMacToolTip::Setup( WindowRef window  , wxString text , wxPoint localPosition ) 
 {
        m_mark++ ;
        Clear() ;
-       m_position = localPosition ; 
+       m_position = localPosition ;
        m_label = wxMacMakeMacStringFromPC( text ) ;
        m_window = window ;
        s_ToolTipWindowRef = window ;
        m_backpict = NULL ;
-       new wxMacToolTipTimer( this , s_ToolTipDelay ) ;
+       if ( m_timer )
+           delete m_timer ;
+       m_timer = new wxMacToolTipTimer( this , s_ToolTipDelay ) ;
 }
 
 wxMacToolTip::~wxMacToolTip() 
 {
+    if ( m_timer )
+        delete m_timer ;
        if ( m_backpict ) 
                Clear() ;
 }
@@ -219,14 +224,10 @@ void wxMacToolTip::Draw()
 */
 #endif
          {
-               #if TARGET_CARBON
-               AGAPortHelper help( GetWindowPort( m_window ) );
-               #else
-               AGAPortHelper help( ( m_window ) );
-               #endif
+               wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
                m_shown = true ;
 
-               SetOrigin( 0 , 0 ) ;
                TextFont( kFontIDGeneva ) ;
                TextSize( 10 ) ;
                TextFace( 0 ) ;
@@ -310,7 +311,7 @@ void wxMacToolTip::Draw()
        }
 }
 
-void wxToolTip::NotifyWindowDelete( WindowRef win ) 
+void wxToolTip::NotifyWindowDelete( WXHWND win ) 
 {
        if ( win == s_ToolTipWindowRef )
        {
@@ -321,19 +322,20 @@ void wxToolTip::NotifyWindowDelete( WindowRef win )
 void wxMacToolTip::Clear()
 {
        m_mark++ ;
+       if ( m_timer )
+       {
+           delete m_timer ;
+           m_timer = NULL ;
+       }
        if ( !m_shown )
                return ;
                 
        if ( m_window == s_ToolTipWindowRef && m_backpict )
        {
-               #if TARGET_CARBON
-               AGAPortHelper help( GetWindowPort(m_window) ) ;
-               #else
-               AGAPortHelper help( (m_window) ) ;
-               #endif
+               wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ;
+
                m_shown = false ;
 
-               SetOrigin( 0 , 0 ) ;
                BackColor( whiteColor ) ;
                ForeColor(blackColor ) ;
                DrawPicture(m_backpict, &m_rect);