]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_taskbar.i
Respect the REUSEADDR flag to allow rebinding; bind to local port prior to connecting...
[wxWidgets.git] / wxPython / src / _taskbar.i
index 5d4c54bf88e13b628e2c08099ca3373b24d7922d..abdc2c65396c9240ccbd5b0ea6b11a525450d198 100644 (file)
 
 
 %{
 
 
 %{
-#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()  { wxPyRaiseNotImplemented(); }
 };
 
 class wxTaskBarIcon : public wxEvtHandler
 {
 public:
     wxTaskBarIcon()  { wxPyRaiseNotImplemented(); }
 };
+
 
 class wxTaskBarIconEvent : public wxEvent
 {
 
 class wxTaskBarIconEvent : public wxEvent
 {
@@ -39,6 +39,11 @@ public:
     wxTaskBarIconEvent(wxEventType, wxTaskBarIcon *)
         { wxPyRaiseNotImplemented(); }
     virtual wxEvent* Clone() const { return NULL; }
     wxTaskBarIconEvent(wxEventType, wxTaskBarIcon *)
         { 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 {
 };
 
 enum {
@@ -50,36 +55,75 @@ enum {
     wxEVT_TASKBAR_LEFT_DCLICK = 0,
     wxEVT_TASKBAR_RIGHT_DCLICK = 0,
 };
     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
 %}
 
 
 #endif
 %}
 
 
+MustHaveApp(wxPyTaskBarIcon);
 
 
-
-class wxTaskBarIcon : public wxEvtHandler
+%rename(TaskBarIcon) wxPyTaskBarIcon;
+class wxPyTaskBarIcon : public wxEvtHandler
 {
 public:
 {
 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() {
     %extend {
         void Destroy() {
-        #ifndef __WXMAC__
             self->RemoveIcon();
             self->RemoveIcon();
-        #endif
+            delete self;
         }
     }
 
         }
     }
 
-#ifndef __WXMAC__
     bool IsOk() const;
     %pythoncode { def __nonzero__(self): return self.IsOk() }
     bool IsOk() const;
     %pythoncode { def __nonzero__(self): return self.IsOk() }
-    
+
     bool IsIconInstalled() const;
 
     bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString);
     bool IsIconInstalled() const;
 
     bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxPyEmptyString);
-    bool RemoveIcon(void);
+    bool RemoveIcon();
     bool PopupMenu(wxMenu *menu);
     bool PopupMenu(wxMenu *menu);
-#endif
 };
 
 
 };
 
 
@@ -109,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 )
 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 )
-}   
+}
 
 //---------------------------------------------------------------------------
 
 //---------------------------------------------------------------------------