X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d14a1e28567de23c586bc80017073d0c39f8d18f..febb39df079df7ee642ad70d47be72cb57870f1c:/wxPython/src/_taskbar.i diff --git a/wxPython/src/_taskbar.i b/wxPython/src/_taskbar.i index 24a1d4abd9..abdc2c6539 100644 --- a/wxPython/src/_taskbar.i +++ b/wxPython/src/_taskbar.i @@ -23,22 +23,27 @@ %{ -#ifdef __WXMAC__ -// implement dummy classes and such for wxMac +#ifndef wxHAS_TASK_BAR_ICON +// implement dummy classes for platforms that don't have it class wxTaskBarIcon : public wxEvtHandler { public: - wxTaskBarIcon() { PyErr_SetNone(PyExc_NotImplementedError); } + wxTaskBarIcon() { wxPyRaiseNotImplemented(); } }; - + class wxTaskBarIconEvent : public wxEvent { public: wxTaskBarIconEvent(wxEventType, wxTaskBarIcon *) - { PyErr_SetNone(PyExc_NotImplementedError); } + { wxPyRaiseNotImplemented(); } virtual wxEvent* Clone() const { return NULL; } + bool IsOk() const { return false; } + bool IsIconInstalled() const { return false; } + bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString) { return false; } + bool RemoveIcon() { return false; } + bool PopupMenu(wxMenu *menu) { return false; } }; enum { @@ -50,27 +55,75 @@ enum { wxEVT_TASKBAR_LEFT_DCLICK = 0, wxEVT_TASKBAR_RIGHT_DCLICK = 0, }; + + +#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; + 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 %} +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() { + self->RemoveIcon(); + delete self; + } + } -#ifndef __WXMAC__ bool IsOk() const; + %pythoncode { def __nonzero__(self): return self.IsOk() } + bool IsIconInstalled() const; bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString); - bool RemoveIcon(void); + bool RemoveIcon(); bool PopupMenu(wxMenu *menu); -#endif }; @@ -100,6 +153,6 @@ EVT_TASKBAR_RIGHT_DOWN = wx.PyEventBinder ( wxEVT_TASKBAR_RIGHT_DOWN ) EVT_TASKBAR_RIGHT_UP = wx.PyEventBinder ( wxEVT_TASKBAR_RIGHT_UP ) EVT_TASKBAR_LEFT_DCLICK = wx.PyEventBinder ( wxEVT_TASKBAR_LEFT_DCLICK ) EVT_TASKBAR_RIGHT_DCLICK = wx.PyEventBinder ( wxEVT_TASKBAR_RIGHT_DCLICK ) -} +} //---------------------------------------------------------------------------