X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b17dd4ceee210d51cb5ff36cf5f135b34cd2ebb6..716a5baa6ecd0d5d0c31914567e4da3165ca6ff0:/wxPython/src/_taskbar.i diff --git a/wxPython/src/_taskbar.i b/wxPython/src/_taskbar.i index a43322bb81..abdc2c6539 100644 --- a/wxPython/src/_taskbar.i +++ b/wxPython/src/_taskbar.i @@ -58,64 +58,61 @@ enum { #else -// // Otherwise make a class that can virtualize CreatePopupMenu -// class wxPyTaskBarIcon : public wxTaskBarIcon -// { -// DECLARE_ABSTRACT_CLASS(wxPyTaskBarIcon); -// public: -// wxPyTaskBarIcon() : wxTaskBarIcon() -// {} - -// wxMenu* CreatePopupMenu() { -// wxMenu *rval = NULL; -// bool found; -// bool blocked = wxPyBeginBlockThreads(); -// if ((found = wxPyCBH_findCallback(m_myInst, "CreatePopupMenu"))) { -// PyObject* ro; -// wxMenu* ptr; -// ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); -// if (ro) { -// if (wxPyConvertSwigPtr(ro, (void **)&ptr, wxT("wxMenu"))) -// rval = ptr; -// Py_DECREF(ro); -// } -// } -// wxPyEndBlockThreads(blocked); -// if (! found) -// rval = wxTaskBarIcon::CreatePopupMenu(); -// return rval; -// } - -// PYPRIVATE; -// }; - -// IMPLEMENT_ABSTRACT_CLASS(wxPyTaskBarIcon, wxTaskBarIcon); +// Otherwise make a class that can virtualize CreatePopupMenu +class wxPyTaskBarIcon : public wxTaskBarIcon +{ + DECLARE_ABSTRACT_CLASS(wxPyTaskBarIcon) +public: + wxPyTaskBarIcon() : wxTaskBarIcon() + {} + + wxMenu* CreatePopupMenu() { + wxMenu *rval = NULL; + bool found; + wxPyBlock_t blocked = wxPyBeginBlockThreads(); + if ((found = wxPyCBH_findCallback(m_myInst, "CreatePopupMenu"))) { + PyObject* ro; + wxMenu* ptr; + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("()")); + if (ro) { + if (wxPyConvertSwigPtr(ro, (void **)&ptr, wxT("wxMenu"))) + rval = ptr; + Py_DECREF(ro); + } + } + wxPyEndBlockThreads(blocked); + if (! found) + rval = wxTaskBarIcon::CreatePopupMenu(); + return rval; + } + + PYPRIVATE; +}; + +IMPLEMENT_ABSTRACT_CLASS(wxPyTaskBarIcon, wxTaskBarIcon); #endif %} -// NOTE: TaskbarIcon has not yet been changed to be able to virtualize the -// CreatePopupMenu method because it is just before a release and I worry that -// there will be a problem in this case with it holding a reference to itself -// (since it depends on the dtor for cleanup.) Better safe than sorry! -// -// Perhaps a better mechanism for wxPython would be to turn CreatePopupMenu -// into an event... - -MustHaveApp(wxTaskBarIcon); +MustHaveApp(wxPyTaskBarIcon); -class wxTaskBarIcon : public wxEvtHandler +%rename(TaskBarIcon) wxPyTaskBarIcon; +class wxPyTaskBarIcon : public wxEvtHandler { public: - wxTaskBarIcon(); - ~wxTaskBarIcon(); + %pythonAppend wxPyTaskBarIcon "self._setCallbackInfo(self, TaskBarIcon, 0)" + + wxPyTaskBarIcon(); + ~wxPyTaskBarIcon(); + + void _setCallbackInfo(PyObject* self, PyObject* _class, int incref); + %pythonAppend Destroy "args[0].thisown = 0"; %extend { void Destroy() { - #ifndef __WXMAC__ self->RemoveIcon(); - #endif + delete self; } }