]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/taskbar.mm
Fix crash in wxDC::GetMultiLineTextExtent() after last commit.
[wxWidgets.git] / src / cocoa / taskbar.mm
index 1a5cd8e5006089e69e9ca2b52372aa430397d99e..b48ecd30d1ce7eab883abdac14054937f988dd00 100644 (file)
@@ -9,10 +9,6 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "taskbar.h"
-#endif
-
 #include "wx/wxprec.h"
 #ifdef wxHAS_TASK_BAR_ICON
 
 #include "wx/cocoa/NSApplication.h"
 #include "wx/cocoa/autorelease.h"
 
+// A category for methods that are only present in Panther's SDK
+@interface NSStatusItem(wxNSStatusItemPrePantherCompatibility)
+- (void)popUpStatusItemMenu:(NSMenu *)menu;
+@end
+
 class wxTaskBarIconWindow;
 
 // ============================================================================
@@ -63,7 +64,7 @@ public:
 protected:
     inline wxMenu* CreatePopupMenu()
     {   wxASSERT(m_taskBarIcon);
-        m_taskBarIcon->CreatePopupMenu();
+        return m_taskBarIcon->CreatePopupMenu();
     }
     wxTaskBarIcon *m_taskBarIcon;
     wxTaskBarIconWindow *m_iconWindow;
@@ -215,7 +216,7 @@ wxTaskBarIconDockImpl::wxTaskBarIconDockImpl(wxTaskBarIcon *taskBarIcon)
 :   wxTaskBarIconCocoaImpl(taskBarIcon)
 {
     m_originalDockIcon = nil;
-    wxASSERT_MSG(!sm_dockIcon,"You should never have more than one dock icon!");
+    wxASSERT_MSG(!sm_dockIcon, wxT("You should never have more than one dock icon!"));
     sm_dockIcon = this;
 }
 
@@ -310,8 +311,9 @@ bool wxTaskBarIconCustomStatusItemImpl::RemoveIcon()
 
 bool wxTaskBarIconCustomStatusItemImpl::PopupMenu(wxMenu *menu)
 {
-    wxASSERT(menu);
-    menu->SetInvokingWindow(m_iconWindow);
+    wxCHECK_MSG(menu, false, "can't popup a NULL menu");
+
+    wxMenuInvokingWindowSetter setInvokingWin(*menu, m_iconWindow);
     menu->UpdateUI();
 
     if([m_cocoaNSStatusItem respondsToSelector:@selector(popUpStatusItemMenu:)])
@@ -327,7 +329,6 @@ bool wxTaskBarIconCustomStatusItemImpl::PopupMenu(wxMenu *menu)
             eventNumber:0 clickCount:1 pressure:0.0];
         [NSMenu popUpContextMenu:menu->GetNSMenu() withEvent:nsevent forView:m_iconWindow->GetNSView()];
     }
-    menu->SetInvokingWindow(NULL);
     return true;
 }
 
@@ -389,7 +390,7 @@ void wxTaskBarIconWindowCustom::OnPaint(wxPaintEvent &event)
 
 // This neatly solves the problem of DLL separation.  If the wxAdvanced
 // library (which this file is part of) is loaded then this category is
-// defined and we get dock menu behavior without app.mm ever having to
+// defined and we get dock menu behaviour without app.mm ever having to
 // know we exist.  C++ did sucketh so. :-)
 
 @interface wxNSApplicationDelegate(wxTaskBarIconNSApplicationDelegateCategory)