]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/toolbar.mm
fix memory leak in wxScreenDC, fixes #13249
[wxWidgets.git] / src / cocoa / toolbar.mm
index 3688f0e7b370c308b9b26dd7d5d068e05c3bb6c1..7237864f57aebacc7387ff4a4a47d64c6c78a974 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     2003/08/17
 // RCS-ID:      $Id$
 // Copyright:   (c) 2003 David Elliott
-// Licence:    wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
 #include "wx/wxprec.h"
 
 #if wxUSE_TOOLBAR_NATIVE
+
+#include "wx/toolbar.h"
+
 #ifndef WX_PRECOMP
-    #include "wx/toolbar.h"
     #include "wx/frame.h"
     #include "wx/log.h"
 #endif // WX_PRECOMP
@@ -58,8 +60,8 @@ public:
         CreateButtonCell();
     }
 
-    wxToolBarTool(wxToolBar *tbar, wxControl *control)
-        : wxToolBarToolBase(tbar, control)
+    wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label)
+        : wxToolBarToolBase(tbar, control, label)
     {
         Init();
     }
@@ -184,7 +186,13 @@ bool wxToolBar::Create( wxWindow *parent,
                         const wxString& name )
 {
     // Call wxControl::Create so we get a wxNonControlNSControl
-    return wxToolBarBase::Create(parent,winid,pos,size,style,wxDefaultValidator,name);
+    if ( !wxToolBarBase::Create(parent, winid, pos, size, style,
+                                wxDefaultValidator, name) )
+        return false;
+
+    FixupStyle();
+
+    return true;
 }
 
 wxToolBarToolBase *wxToolBar::CreateTool(int toolid,
@@ -200,9 +208,10 @@ wxToolBarToolBase *wxToolBar::CreateTool(int toolid,
                              clientData, shortHelpString, longHelpString);
 }
 
-wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control)
+wxToolBarToolBase *
+wxToolBar::CreateTool(wxControl *control, const wxString& label)
 {
-    return new wxToolBarTool(this, control);
+    return new wxToolBarTool(this, control, label);
 }
 
 void wxToolBar::SetWindowStyleFlag( long style )
@@ -221,6 +230,11 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
     return true;
 }
 
+bool wxToolBar::Cocoa_acceptsFirstMouse(bool &acceptsFirstMouse, WX_NSEvent theEvent)
+{
+    acceptsFirstMouse = true; return true;
+}
+
 bool wxToolBar::Cocoa_drawRect(const NSRect &rect)
 {
     wxToolBarToolsList::compatibility_iterator node;
@@ -253,6 +267,7 @@ bool wxToolBar::Cocoa_mouseDragged(WX_NSEvent theEvent)
         NSButtonCell *buttonCell = m_mouseDownTool->GetNSButtonCell();
         if(buttonCell)
         {
+            [buttonCell retain];
             [buttonCell setHighlighted: YES];
             if([buttonCell trackMouse: theEvent
                 inRect:AddToolPadding(m_mouseDownTool->GetFrameRect()) ofView:m_cocoaNSView
@@ -263,6 +278,7 @@ bool wxToolBar::Cocoa_mouseDragged(WX_NSEvent theEvent)
                 wxLogTrace(wxTRACE_COCOA,wxT("Button was clicked after drag!"));
             }
             [buttonCell setHighlighted: NO];
+            [buttonCell release];
         }
     }
     return wxToolBarBase::Cocoa_mouseDragged(theEvent);
@@ -276,6 +292,7 @@ bool wxToolBar::Cocoa_mouseDown(WX_NSEvent theEvent)
         NSButtonCell *buttonCell = tool->GetNSButtonCell();
         if(buttonCell)
         {
+            [buttonCell retain];
             m_mouseDownTool = tool;
             [buttonCell setHighlighted: YES];
             if([buttonCell trackMouse: theEvent
@@ -287,6 +304,7 @@ bool wxToolBar::Cocoa_mouseDown(WX_NSEvent theEvent)
                 wxLogTrace(wxTRACE_COCOA,wxT("Button was clicked!"));
             }
             [buttonCell setHighlighted: NO];
+            [buttonCell release];
         }
     }
     return wxToolBarBase::Cocoa_mouseDown(theEvent);