+wxChar *wxTaskBarWindowClass = (wxChar*) wxT("wxTaskBarWindowClass");
+
+wxTaskBarIconList wxTaskBarIcon::sm_taskBarIcons;
+
+// initialized on demand
+UINT gs_msgTaskbar = 0;
+UINT gs_msgRestartTaskbar = 0;
+
+#if WXWIN_COMPATIBILITY_2_4
+BEGIN_EVENT_TABLE(wxTaskBarIcon, wxEvtHandler)
+ EVT_TASKBAR_MOVE (wxTaskBarIcon::_OnMouseMove)
+ EVT_TASKBAR_LEFT_DOWN (wxTaskBarIcon::_OnLButtonDown)
+ EVT_TASKBAR_LEFT_UP (wxTaskBarIcon::_OnLButtonUp)
+ EVT_TASKBAR_RIGHT_DOWN (wxTaskBarIcon::_OnRButtonDown)
+ EVT_TASKBAR_RIGHT_UP (wxTaskBarIcon::_OnRButtonUp)
+ EVT_TASKBAR_LEFT_DCLICK (wxTaskBarIcon::_OnLButtonDClick)
+ EVT_TASKBAR_RIGHT_DCLICK (wxTaskBarIcon::_OnRButtonDClick)
+END_EVENT_TABLE()
+#endif
+
+
+IMPLEMENT_DYNAMIC_CLASS(wxTaskBarIcon, wxEvtHandler)
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// NotifyIconData: wrapper around NOTIFYICONDATA
+// ----------------------------------------------------------------------------
+
+struct NotifyIconData : public NOTIFYICONDATA
+{
+ NotifyIconData(WXHWND hwnd)
+ {
+ memset(this, 0, sizeof(NOTIFYICONDATA));
+ cbSize = sizeof(NOTIFYICONDATA);
+ hWnd = (HWND) hwnd;
+ uCallbackMessage = gs_msgTaskbar;
+ uFlags = NIF_MESSAGE;
+
+ // we use the same id for all taskbar icons as we don't need it to
+ // distinguish between them
+ uID = 99;
+ }
+};
+
+// ----------------------------------------------------------------------------
+// wxTaskBarIcon
+// ----------------------------------------------------------------------------
+
+wxTaskBarIcon::wxTaskBarIcon()