libui/zOLD_windows/utilwin.cpp

51 lines
1.6 KiB
C++

// 14 may 2015
#include "uipriv_windows.hpp"
// The utility window is a special window that performs certain tasks internal to libui.
// It is not a message-only window, and it is always hidden and disabled.
// Its roles:
// - It is the initial parent of all controls. When a control loses its parent, it also becomes that control's parent.
// - It handles WM_QUERYENDSESSION requests.
// - It handles WM_WININICHANGE and forwards the message to any child windows that request it.
// - It handles executing functions queued to run by uiQueueMain().
// TODO explain why it isn't message-only
static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
void (*qf)(void *);
LRESULT lResult;
uiprivTimer *timer;
if (handleParentMessages(hwnd, uMsg, wParam, lParam, &lResult) != FALSE)
return lResult;
switch (uMsg) {
case WM_QUERYENDSESSION:
// TODO block handler (TODO figure out if this meant the Vista-style block handler or not)
if (uiprivShouldQuit()) {
uiQuit();
return TRUE;
}
return FALSE;
case WM_WININICHANGE:
issueWM_WININICHANGE(wParam, lParam);
return 0;
case WM_TIMER:
timer = (uiprivTimer *) wParam;
if (!(*(timer->f))(timer->data)) {
if (KillTimer(utilWindow, (UINT_PTR) timer) == 0)
logLastError(L"error calling KillTimer() to end uiTimer() procedure");
uiprivFreeTimer(timer);
}
return 0;
}
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
void uninitUtilWindow(void)
{
if (DestroyWindow(utilWindow) == 0)
logLastError(L"error destroying utility window");
if (UnregisterClass(utilWindowClass, hInstance) == 0)
logLastError(L"error unregistering utility window class");
}