| 48 | bool g_isWinService; |
| 49 | |
| 50 | static void ShowPopupMenu (HWND hWnd, POINT *curpos, int wDefaultItem) |
| 51 | { |
| 52 | HMENU hPopup = CreatePopupMenu(); |
| 53 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_CONSOLE, "Open &console"); |
| 54 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_DATADIR, "Open &datadir"); |
| 55 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_APP, "&Show app"); |
| 56 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_ABOUT, "&About..."); |
| 57 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); |
| 58 | if(!i2p::context.AcceptsTunnels()) |
| 59 | InsertMenu (hPopup, -1, |
| 60 | i2p::util::DaemonWin32::Instance ().isGraceful ? MF_BYPOSITION | MF_STRING | MF_GRAYED : MF_BYPOSITION | MF_STRING, |
| 61 | ID_ACCEPT_TRANSIT, "Accept &transit"); |
| 62 | else |
| 63 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_DECLINE_TRANSIT, "Decline &transit"); |
| 64 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_RELOAD, "&Reload tunnels config"); |
| 65 | if (!i2p::util::DaemonWin32::Instance ().isGraceful) |
| 66 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_GRACEFUL_SHUTDOWN, "&Graceful shutdown"); |
| 67 | else |
| 68 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_STOP_GRACEFUL_SHUTDOWN, "Stop &graceful shutdown"); |
| 69 | InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_EXIT, "E&xit"); |
| 70 | SetMenuDefaultItem (hPopup, ID_CONSOLE, FALSE); |
| 71 | SendMessage (hWnd, WM_INITMENUPOPUP, (WPARAM)hPopup, 0); |
| 72 | |
| 73 | POINT p; |
| 74 | if (!curpos) |
| 75 | { |
| 76 | GetCursorPos (&p); |
| 77 | curpos = &p; |
| 78 | } |
| 79 | |
| 80 | WORD cmd = TrackPopupMenu (hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_NONOTIFY, curpos->x, curpos->y, 0, hWnd, NULL); |
| 81 | SendMessage (hWnd, WM_COMMAND, cmd, 0); |
| 82 | |
| 83 | DestroyMenu(hPopup); |
| 84 | } |
| 85 | |
| 86 | static void AddTrayIcon (HWND hWnd, bool notify = false) |
| 87 | { |
no test coverage detected