From 261917904250fc47a5b89be3d799a2a4df80273c Mon Sep 17 00:00:00 2001
From: Ryan Norton <wxprojects@comcast.net>
Date: Wed, 6 Oct 2004 21:09:47 +0000
Subject: [PATCH] cocoa tooltips.  Remove runtime warning from 10.2 (dave - I
 was too lazy to change this from my local copy, feel free to commit over this
 if you want)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29686 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 configure                  |  1 -
 configure.in               |  1 -
 docs/latex/wx/tooltip.tex  |  3 +++
 include/wx/cocoa/tooltip.h | 43 ++++++++++++++++++++++++++++++++++++++
 include/wx/tooltip.h       |  2 ++
 src/cocoa/window.mm        | 26 +++++++++++++++++++----
 6 files changed, 70 insertions(+), 6 deletions(-)
 create mode 100644 include/wx/cocoa/tooltip.h

diff --git a/configure b/configure
index b29fd156bd..e506c63584 100755
--- a/configure
+++ b/configure
@@ -7012,7 +7012,6 @@ fi
 if test "x$wxUSE_COCOA" != "x" -a "$wxUSE_COCOA" != "0" ; then
   wxUSE_PRINTING_ARCHITECTURE=no
   wxUSE_DRAG_AND_DROP=no
-  DEFAULT_wxUSE_TOOLTIPS=no
   DEFAULT_wxUSE_DRAGIMAGE=no
 fi
 
diff --git a/configure.in b/configure.in
index d1d6501d5e..3e2a21546b 100644
--- a/configure.in
+++ b/configure.in
@@ -1048,7 +1048,6 @@ fi
 if test "x$wxUSE_COCOA" != "x" -a "$wxUSE_COCOA" != "0" ; then
   wxUSE_PRINTING_ARCHITECTURE=no
   wxUSE_DRAG_AND_DROP=no
-  DEFAULT_wxUSE_TOOLTIPS=no
   DEFAULT_wxUSE_DRAGIMAGE=no
 fi
 
diff --git a/docs/latex/wx/tooltip.tex b/docs/latex/wx/tooltip.tex
index 0430c381f7..14ee782ad5 100644
--- a/docs/latex/wx/tooltip.tex
+++ b/docs/latex/wx/tooltip.tex
@@ -26,6 +26,8 @@ alter tooltips behaviour.
 
 Enable or disable tooltips globally.
 
+May not be supported on all platforms (eg. wxCocoa).
+
 
 \membersection{wxToolTip::SetDelay}\label{wxtooltipsetdelay}
 
@@ -33,6 +35,7 @@ Enable or disable tooltips globally.
 
 Set the delay after which the tooltip appears.
 
+May not be supported on all platforms (eg. wxCocoa).
 
 \membersection{wxToolTip::wxToolTip}\label{wxtooltipwxtooltip}
 
diff --git a/include/wx/cocoa/tooltip.h b/include/wx/cocoa/tooltip.h
new file mode 100644
index 0000000000..403445363b
--- /dev/null
+++ b/include/wx/cocoa/tooltip.h
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        cocoa/tooltip.h
+// Purpose:     wxToolTip class - tooltip control
+// Author:      Ryan Norton
+// Modified by:
+// Created:     31.01.99
+// RCS-ID:      $Id$
+// Copyright:   (c) Ryan Norton
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#include "wx/object.h"
+
+class wxToolTip : public wxObject
+{
+public:
+    // ctor & dtor
+    wxToolTip(const wxString &tip) : m_text(tip), m_window(0) {}
+    virtual ~wxToolTip() {}
+
+    // accessors
+        // tip text
+    void SetTip(const wxString& tip)	{ m_text = tip; }
+    const wxString& GetTip() const { return m_text; }
+
+        // the window we're associated with
+    wxWindow *GetWindow() const { return m_window; }
+
+    // controlling tooltip behaviour: globally change tooltip parameters
+        // enable or disable the tooltips globally
+    static void Enable(bool flag) {}
+        // set the delay after which the tooltip appears
+    static void SetDelay(long milliseconds) {}
+
+private:
+    void SetWindow(wxWindow* window) {m_window = window;}
+    friend class wxWindow;
+
+    wxString  m_text;           // tooltip text
+    wxWindow *m_window;         // window we're associated with
+    
+    DECLARE_ABSTRACT_CLASS(wxToolTip)
+};
\ No newline at end of file
diff --git a/include/wx/tooltip.h b/include/wx/tooltip.h
index a378492a9a..c20fc7b6d9 100644
--- a/include/wx/tooltip.h
+++ b/include/wx/tooltip.h
@@ -13,6 +13,8 @@
 #include "wx/gtk/tooltip.h"
 #elif defined(__WXMAC__)
 #include "wx/mac/tooltip.h"
+#elif defined(__WXCOCOA__)
+#include "wx/cocoa/tooltip.h"
 #elif defined(__WXPM__)
 #include "wx/os2/tooltip.h"
 #endif
diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm
index a1e06db23e..f2b9e65341 100644
--- a/src/cocoa/window.mm
+++ b/src/cocoa/window.mm
@@ -12,10 +12,12 @@
 #include "wx/wxprec.h"
 #ifndef WX_PRECOMP
     #include "wx/log.h"
+    #include "wx/tooltip.h"
     #include "wx/window.h"
 #endif //WX_PRECOMP
 
 #include "wx/cocoa/autorelease.h"
+#include "wx/cocoa/string.h"
 
 #import <AppKit/NSView.h>
 #import <AppKit/NSEvent.h>
@@ -23,6 +25,7 @@
 #import <AppKit/NSColor.h>
 #import <AppKit/NSClipView.h>
 #import <Foundation/NSException.h>
+#import <Foundation/NSString.h>
 
 #include <objc/objc-runtime.h>
 
@@ -354,10 +357,9 @@ bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect)
     int countRects = 1;
     // Try replacing the larger rectangle with a list of smaller ones:
 NS_DURING
-    // This only works on Panther
-//    [GetNSView() getRectsBeingDrawn:&rects count:&countRects];
-    // This compiles everywhere (and still only works on Panther)
-    objc_msgSend(GetNSView(),@selector(getRectsBeingDrawn:count:),&rects,&countRects);
+    //getRectsBeingDrawn:count: is a optimization that is only available on
+    //Panthar (10.3) and higher.  Check to see if it supports it -
+    if ( [GetNSView() respondsToSelector:@selector(getRectsBeingDrawn:count:)] )    objc_msgSend(GetNSView(),@selector(getRectsBeingDrawn:count:),&rects,&countRects);
 NS_HANDLER
 NS_ENDHANDLER
     m_updateRegion = wxRegion(rects,countRects);
@@ -598,6 +600,22 @@ void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags
     DoMoveWindow(x,y,width,height);
 }
 
+//We should really get rid of wxToolTip :)
+IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject)
+
+void wxWindowCocoa::DoSetToolTip( wxToolTip *tip )
+{
+    wxWindowBase::DoSetToolTip(tip);
+
+    wxAutoNSAutoreleasePool pool;
+
+    if ( m_tooltip )
+    {
+        m_tooltip->SetWindow((wxWindow *)this);
+        [GetNSView() setToolTip:wxNSStringWithWxString(m_tooltip->GetTip())];
+    }
+}
+
 void wxWindowCocoa::DoMoveWindow(int x, int y, int width, int height)
 {
     wxAutoNSAutoreleasePool pool;
-- 
2.45.2

