| 387 | } |
| 388 | |
| 389 | void PiuScreenQuit(PiuScreen* self) |
| 390 | { |
| 391 | MSG msg; |
| 392 | txScreen* screen = (*self)->screen; |
| 393 | if (screen && screen->quit) |
| 394 | (*screen->quit)(screen); |
| 395 | while (PeekMessage(&msg, (*self)->control, WM_MESSAGE_TO_APPLICATION, WM_MESSAGE_TO_HOST, PM_REMOVE)) { |
| 396 | free((void*)msg.lParam); |
| 397 | } |
| 398 | KillTimer((*self)->control, 0); |
| 399 | if ((*self)->screen->archive) { |
| 400 | UnmapViewOfFile((*self)->screen->archive); |
| 401 | (*self)->screen->archive = NULL; |
| 402 | } |
| 403 | if ((*self)->ffiLibrary) { |
| 404 | wchar_t path[MAX_PATH]; |
| 405 | HANDLE file; |
| 406 | GetModuleFileNameW((*self)->ffiLibrary, path, 1024); |
| 407 | FreeLibrary((*self)->ffiLibrary); |
| 408 | file = CreateFileW(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| 409 | while (file == INVALID_HANDLE_VALUE) { |
| 410 | Sleep(1); |
| 411 | file = CreateFileW(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| 412 | } |
| 413 | CloseHandle(file); |
| 414 | (*self)->ffiLibrary = NULL; |
| 415 | } |
| 416 | if ((*self)->archiveMapping) { |
| 417 | CloseHandle((*self)->archiveMapping); |
| 418 | (*self)->archiveMapping = INVALID_HANDLE_VALUE; |
| 419 | } |
| 420 | if ((*self)->archiveFile) { |
| 421 | CloseHandle((*self)->archiveFile); |
| 422 | (*self)->archiveFile = INVALID_HANDLE_VALUE; |
| 423 | } |
| 424 | if ((*self)->library) { |
| 425 | wchar_t path[MAX_PATH]; |
| 426 | HANDLE file; |
| 427 | GetModuleFileNameW((*self)->library, path, 1024); |
| 428 | FreeLibrary((*self)->library); |
| 429 | file = CreateFileW(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| 430 | while (file == INVALID_HANDLE_VALUE) { |
| 431 | Sleep(1); |
| 432 | file = CreateFileW(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| 433 | } |
| 434 | CloseHandle(file); |
| 435 | (*self)->library = NULL; |
| 436 | } |
| 437 | InvalidateRect((*self)->control, NULL, FALSE); |
| 438 | } |
| 439 | |
| 440 | void PiuScreenUnbind(void* it, PiuApplication* application, PiuView* view) |
| 441 | { |
no test coverage detected