MCPcopy Create free account
hub / github.com/cafali/SnapKey / WndProc

Function WndProc

SnapKey.cpp:240–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

238}
239
240LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
241 switch (msg) {
242 case WM_TRAYICON:
243 if (lParam == WM_RBUTTONDOWN) {
244 POINT curPoint;
245 GetCursorPos(&curPoint);
246 SetForegroundWindow(hwnd);
247
248 HMENU hMenu = CreatePopupMenu();
249 AppendMenu(hMenu, MF_STRING, ID_TRAY_REBIND_KEYS, TEXT("Rebind Keys"));
250
251 // submenu layouts
252 HMENU hSubMenu = CreatePopupMenu();
253 vector<string> layouts = ListLayouts();
254 if (!layouts.empty()) {
255 int id = 0;
256 for (auto& layout : layouts) {
257 AppendMenuA(hSubMenu, MF_STRING, ID_LAYOUT_BASE + id, layout.c_str());
258 id++;
259 }
260 } else {
261 AppendMenu(hSubMenu, MF_GRAYED, 0, TEXT("No layouts found"));
262 }
263 AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hSubMenu, TEXT("Select Profile"));
264
265 AppendMenu(hMenu, MF_STRING, ID_TRAY_RESTART_SNAPKEY, TEXT("Restart SnapKey"));
266 AppendMenu(hMenu, MF_STRING, ID_TRAY_LOCK_FUNCTION, isLocked ? TEXT("Enable SnapKey") : TEXT("Disable SnapKey"));
267 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
268 AppendMenu(hMenu, MF_STRING, ID_TRAY_HELP, TEXT("Get Help"));
269 AppendMenu(hMenu, MF_STRING, ID_TRAY_CHECKUPDATE, TEXT("Check Updates"));
270 AppendMenu(hMenu, MF_STRING, ID_TRAY_VERSION_INFO, TEXT("Version Info (1.2.9)"));
271 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
272 AppendMenu(hMenu, MF_STRING, ID_TRAY_EXIT_CONTEXT_MENU_ITEM, TEXT("Exit SnapKey"));
273
274 TrackPopupMenu(hMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, curPoint.x, curPoint.y, 0, hwnd, NULL);
275 DestroyMenu(hMenu);
276 }
277 else if (lParam == WM_LBUTTONDBLCLK) {
278 isLocked = !isLocked;
279 HICON hIcon = isLocked
280 ? (HICON)LoadImage(NULL, TEXT("icon_off.ico"), IMAGE_ICON, 0, 0, LR_LOADFROMFILE)
281 : (HICON)LoadImage(NULL, TEXT("icon.ico"), IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
282 if (hIcon) {
283 nid.hIcon = hIcon;
284 Shell_NotifyIcon(NIM_MODIFY, &nid);
285 DestroyIcon(hIcon);
286 }
287 }
288 break;
289
290 case WM_COMMAND:
291 if (LOWORD(wParam) >= ID_LAYOUT_BASE) {
292 int layoutIndex = LOWORD(wParam) - ID_LAYOUT_BASE;
293 vector<string> layouts = ListLayouts();
294 if (layoutIndex >= 0 && layoutIndex < (int)layouts.size()) {
295 ApplyLayout(layouts[layoutIndex]);
296 RestartSnapKey(); // restart after applying layout
297 }

Callers

nothing calls this directly

Calls 4

ListLayoutsFunction · 0.85
ApplyLayoutFunction · 0.85
RestartSnapKeyFunction · 0.85
GetVersionInfoFunction · 0.85

Tested by

no test coverage detected