X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f1d9e1ec6b596ec336e8e68fdec78244088d5c25..64ea838d8f4d1853b7d850db93ee565e901d099a:/src/cocoa/taskbar.mm diff --git a/src/cocoa/taskbar.mm b/src/cocoa/taskbar.mm index 5975e31c3d..b48ecd30d1 100644 --- a/src/cocoa/taskbar.mm +++ b/src/cocoa/taskbar.mm @@ -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 @@ -42,6 +38,11 @@ #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; // ============================================================================ @@ -61,6 +62,10 @@ public: virtual ~wxTaskBarIconCocoaImpl(); inline wxTaskBarIcon* GetTaskBarIcon() { return m_taskBarIcon; } protected: + inline wxMenu* CreatePopupMenu() + { wxASSERT(m_taskBarIcon); + return m_taskBarIcon->CreatePopupMenu(); + } wxTaskBarIcon *m_taskBarIcon; wxTaskBarIconWindow *m_iconWindow; private: @@ -211,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; } @@ -231,7 +236,7 @@ WX_NSMenu wxTaskBarIconDockImpl::CocoaGetDockNSMenu() WX_NSMenu wxTaskBarIconDockImpl::CocoaDoGetDockNSMenu() { - wxMenu *dockMenu = m_taskBarIcon->CreatePopupMenu(); + wxMenu *dockMenu = CreatePopupMenu(); if(!dockMenu) return nil; if(!m_iconWindow) @@ -306,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:)]) @@ -323,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; } @@ -385,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)