X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f1d9e1ec6b596ec336e8e68fdec78244088d5c25..6f026b5b63fe7ccb025e84509886f74772b9df13:/src/cocoa/taskbar.mm?ds=sidebyside diff --git a/src/cocoa/taskbar.mm b/src/cocoa/taskbar.mm index 5975e31c3d..e5491905c8 100644 --- a/src/cocoa/taskbar.mm +++ b/src/cocoa/taskbar.mm @@ -4,15 +4,10 @@ // Author: David Elliott // Modified by: // Created: 2004/01/24 -// RCS-ID: $Id$ // Copyright: (c) 2004 David Elliott // 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 +37,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 +61,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 +215,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 +235,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 +310,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 +328,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 +389,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)