+bool wxTaskBarIcon::PopupMenu(wxMenu *menu) //, int x, int y);
+{
+ // OK, so I know this isn't thread-friendly, but
+ // what to do? We need this check.
+
+ static bool s_inPopup = FALSE;
+
+ if (s_inPopup)
+ return FALSE;
+
+ s_inPopup = TRUE;
+
+ bool rval = FALSE;
+ wxWindow* win;
+ int x, y;
+ wxGetMousePosition(&x, &y);
+
+ // is wxFrame the best window type to use???
+ win = new wxFrame(NULL, -1, "", wxPoint(x,y), wxSize(-1,-1), 0);
+ win->PushEventHandler(this);
+
+ // Remove from record of top-level windows, or will confuse wxWindows
+ // if we try to exit right now.
+ wxTopLevelWindows.DeleteObject(win);
+
+ menu->UpdateUI();
+
+ rval = win->PopupMenu(menu, 0, 0);
+
+ win->PopEventHandler(FALSE);
+ win->Destroy();
+ delete win;
+
+ s_inPopup = FALSE;
+
+ return rval;
+}
+