]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/taskbar.cpp
otherwise we always fall back to blitting, even if we can provide better results
[wxWidgets.git] / src / mac / carbon / taskbar.cpp
index 7cce1813fd9b29394af799d3536ff23937a7adf2..9c46425f454161cb39bda795ecc6f464455da7dd 100644 (file)
@@ -143,6 +143,8 @@ wxTaskBarIcon::wxTaskBarIcon(const wxTaskBarIconType& nType)
             this, (&(EventHandlerRef&)m_pEventHandlerRef));
             
     wxASSERT(err == noErr);
             this, (&(EventHandlerRef&)m_pEventHandlerRef));
             
     wxASSERT(err == noErr);
+    
+    Connect(wxEVT_TASKBAR_RIGHT_DOWN, wxTaskBarIconEventHandler(wxTaskBarIcon::OnRightDown));
 }
 
 wxTaskBarIcon::~wxTaskBarIcon()
 }
 
 wxTaskBarIcon::~wxTaskBarIcon()
@@ -181,11 +183,14 @@ bool wxTaskBarIcon::SetIcon(const wxIcon& icon, const wxString& tooltip)
 
     CGImageRef pImage;
     
 
     CGImageRef pImage;
     
-#if wxMAC_USE_CORE_GRAPHICS        
+#if 0 // is always available under OSX now -- crashes on 10.2 in CFRetain() - RN
     pImage = (CGImageRef) bmp.CGImageCreate() ;
 #else
     pImage = (CGImageRef) bmp.CGImageCreate() ;
 #else
-    wxMask* mask = bmp.GetMask();
-    if (!mask)
+    WXHBITMAP iconport ;
+    WXHBITMAP maskport ;
+    iconport = bmp.GetHBITMAP( &maskport ) ;
+
+    if (!maskport)
     {
         // Make a mask with no transparent pixels
         wxBitmap   mbmp(icon.GetWidth(), icon.GetHeight());
     {
         // Make a mask with no transparent pixels
         wxBitmap   mbmp(icon.GetWidth(), icon.GetHeight());
@@ -195,12 +200,10 @@ bool wxTaskBarIcon::SetIcon(const wxIcon& icon, const wxString& tooltip)
         dc.Clear();
         dc.SelectObject(wxNullBitmap);
         bmp.SetMask( new wxMask(mbmp, *wxWHITE) ) ;
         dc.Clear();
         dc.SelectObject(wxNullBitmap);
         bmp.SetMask( new wxMask(mbmp, *wxWHITE) ) ;
+        iconport = bmp.GetHBITMAP( &maskport ) ;
     } 
     
     //create the icon from the bitmap and mask bitmap contained within
     } 
     
     //create the icon from the bitmap and mask bitmap contained within
-    WXHBITMAP iconport ;
-    WXHBITMAP maskport ;
-    iconport = bmp.GetHBITMAP( &maskport ) ;
     err = CreateCGImageFromPixMaps(
                                             GetGWorldPixMap(MAC_WXHBITMAP(iconport)),
                                             GetGWorldPixMap(MAC_WXHBITMAP(maskport)),
     err = CreateCGImageFromPixMaps(
                                             GetGWorldPixMap(MAC_WXHBITMAP(iconport)),
                                             GetGWorldPixMap(MAC_WXHBITMAP(maskport)),
@@ -288,4 +291,10 @@ bool wxTaskBarIcon::PopupMenu(wxMenu *menu)
     return true;
 }
 
     return true;
 }
 
+//Skip the event so that popupmenu isn't called in parent, avoiding double-creation of the menus
+void wxTaskBarIcon::OnRightDown(wxTaskBarIconEvent& evt)
+{
+    evt.Skip();
+}
+
 #endif //wxHAS_TASK_BAR_ICON
 #endif //wxHAS_TASK_BAR_ICON