-bool wxTaskBarIcon::RegisterWindowClass()
-{
- if (sm_registeredClass)
- return TRUE;
-
- // Also register the taskbar message here
- sm_taskbarMsg = ::RegisterWindowMessage("wxTaskBarIconMessage");
-
- WNDCLASS wc;
- bool rc;
-
- HINSTANCE hInstance = GetModuleHandle(NULL);
-
- /*
- * set up and register window class
- */
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = (WNDPROC) wxTaskBarIconWindowProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = 0;
- wc.hCursor = 0;
- wc.hbrBackground = 0;
- wc.lpszMenuName = NULL;
- wc.lpszClassName = wxTaskBarWindowClass ;
- rc = (::RegisterClass( &wc ) != 0);
-
- sm_registeredClass = (rc != 0);
-
- return( (rc != 0) );
+ // the SetForegroundWindow() and PostMessage() calls are needed to work
+ // around Win32 bug with the popup menus shown for the notifications as
+ // documented at http://support.microsoft.com/kb/q135788/
+ ::SetForegroundWindow(GetHwndOf(m_win));
+
+ bool rval = m_win->PopupMenu(menu, 0, 0);
+
+ ::PostMessage(GetHwndOf(m_win), WM_NULL, 0, 0L);
+
+ m_win->PopEventHandler(false);
+
+ s_inPopup = false;
+
+ return rval;