mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 02:27:40 -04:00
Revert part of a89577e that allowed message handlers to override the
default window proc, killing key commands like Alt+F4
This commit is contained in:
@ -479,10 +479,22 @@ void DebugMsgF(const char* format, ...);
|
|||||||
|
|
||||||
// Handles all the windows messages we might receive
|
// Handles all the windows messages we might receive
|
||||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
static bool gDragging = false;
|
static bool gDragging = false;
|
||||||
static UInt8 mouse_down = 0;
|
static UInt8 mouse_down = 0;
|
||||||
|
|
||||||
|
// Messages we registered for manually (no const value)
|
||||||
|
if (message == s_WmTaskbarList)
|
||||||
|
{
|
||||||
|
// Grab the Windows 7 taskbar list stuff
|
||||||
|
if (gTaskbarList)
|
||||||
|
gTaskbarList->Release();
|
||||||
|
HRESULT result = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&gTaskbarList);
|
||||||
|
if (FAILED(result))
|
||||||
|
gTaskbarList = nil;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle messages
|
// Handle messages
|
||||||
switch (message) {
|
switch (message) {
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
@ -505,7 +517,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
if (gClient->WindowActive() && gClient->GetInputManager())
|
if (gClient->WindowActive() && gClient->GetInputManager())
|
||||||
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
case WM_RBUTTONUP:
|
case WM_RBUTTONUP:
|
||||||
case WM_MBUTTONUP:
|
case WM_MBUTTONUP:
|
||||||
@ -517,19 +529,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
if (gClient && gClient->WindowActive() && gClient->GetInputManager())
|
if (gClient && gClient->WindowActive() && gClient->GetInputManager())
|
||||||
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
{
|
{
|
||||||
if (gClient && gClient->GetInputManager())
|
if (gClient && gClient->GetInputManager())
|
||||||
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
|
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
SetForegroundWindow(hWnd);
|
SetForegroundWindow(hWnd);
|
||||||
return TRUE;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case WM_SYSKEYUP:
|
case WM_SYSKEYUP:
|
||||||
@ -541,25 +553,25 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
//DefWindowProc(hWnd, message, wParam, lParam);
|
//DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
switch (wParam) {
|
switch (wParam) {
|
||||||
// Trap ALT so it doesn't pause the app
|
// Trap ALT so it doesn't pause the app
|
||||||
case SC_KEYMENU :
|
case SC_KEYMENU :
|
||||||
//// disable screensavers and monitor power downs too.
|
//// disable screensavers and monitor power downs too.
|
||||||
case SC_SCREENSAVE:
|
case SC_SCREENSAVE:
|
||||||
case SC_MONITORPOWER:
|
case SC_MONITORPOWER:
|
||||||
return 0;
|
return 0;
|
||||||
case SC_CLOSE :
|
case SC_CLOSE :
|
||||||
// kill game if window is closed
|
// kill game if window is closed
|
||||||
gClient->SetDone(TRUE);
|
gClient->SetDone(TRUE);
|
||||||
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
||||||
mgr->QueueDisableNet(false, nil);
|
mgr->QueueDisableNet(false, nil);
|
||||||
DestroyWindow(gClient->GetWindowHandle());
|
DestroyWindow(gClient->GetWindowHandle());
|
||||||
return TRUE;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case WM_SETCURSOR:
|
case WM_SETCURSOR:
|
||||||
{
|
{
|
||||||
@ -583,9 +595,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
{
|
{
|
||||||
bool active = (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE);
|
bool active = (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE);
|
||||||
bool minimized = (HIWORD(wParam) != 0);
|
bool minimized = (HIWORD(wParam) != 0);
|
||||||
@ -603,7 +615,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
gPendingActivateFlag = active;
|
gPendingActivateFlag = active;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
// Let go of the mouse if the window is being moved.
|
// Let go of the mouse if the window is being moved.
|
||||||
case WM_ENTERSIZEMOVE:
|
case WM_ENTERSIZEMOVE:
|
||||||
@ -611,7 +623,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
gDragging = true;
|
gDragging = true;
|
||||||
if( gClient )
|
if( gClient )
|
||||||
gClient->WindowActivate(false);
|
gClient->WindowActivate(false);
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
// Redo the mouse capture if the window gets moved
|
// Redo the mouse capture if the window gets moved
|
||||||
case WM_EXITSIZEMOVE:
|
case WM_EXITSIZEMOVE:
|
||||||
@ -619,7 +631,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
gDragging = false;
|
gDragging = false;
|
||||||
if( gClient )
|
if( gClient )
|
||||||
gClient->WindowActivate(true);
|
gClient->WindowActivate(true);
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
// Redo the mouse capture if the window gets moved (special case for Colin
|
// Redo the mouse capture if the window gets moved (special case for Colin
|
||||||
// and his cool program that bumps windows out from under the taskbar)
|
// and his cool program that bumps windows out from under the taskbar)
|
||||||
@ -631,7 +643,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
DebugMsgF("Got WM_MOVE, but ignoring");
|
DebugMsgF("Got WM_MOVE, but ignoring");
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
/// Resize the window
|
/// Resize the window
|
||||||
// (we do WM_SIZING here instead of WM_SIZE because, for some reason, WM_SIZE is
|
// (we do WM_SIZING here instead of WM_SIZE because, for some reason, WM_SIZE is
|
||||||
@ -646,7 +658,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
::GetClientRect(hWnd, &r);
|
::GetClientRect(hWnd, &r);
|
||||||
gClient->GetPipeline()->Resize(r.right - r.left, r.bottom - r.top);
|
gClient->GetPipeline()->Resize(r.right - r.left, r.bottom - r.top);
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
// Let go of the mouse if the window is being minimized
|
// Let go of the mouse if the window is being minimized
|
||||||
@ -663,38 +675,23 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
if (gClient)
|
if (gClient)
|
||||||
gClient->WindowActivate(true);
|
gClient->WindowActivate(true);
|
||||||
}
|
}
|
||||||
return TRUE;
|
break;
|
||||||
|
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
gClient->SetDone(TRUE);
|
gClient->SetDone(TRUE);
|
||||||
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
||||||
mgr->QueueDisableNet(false, nil);
|
mgr->QueueDisableNet(false, nil);
|
||||||
DestroyWindow(gClient->GetWindowHandle());
|
DestroyWindow(gClient->GetWindowHandle());
|
||||||
return TRUE;
|
break;
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
gClient->SetDone(TRUE);
|
gClient->SetDone(TRUE);
|
||||||
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
||||||
mgr->QueueDisableNet(false, nil);
|
mgr->QueueDisableNet(false, nil);
|
||||||
PostQuitMessage(0);
|
PostQuitMessage(0);
|
||||||
return TRUE;
|
break;
|
||||||
case WM_CREATE:
|
|
||||||
// Create renderer
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Messages we registered for manually (no const value)
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
if (message == s_WmTaskbarList)
|
|
||||||
{
|
|
||||||
// Grab the Windows 7 taskbar list stuff
|
|
||||||
if (gTaskbarList)
|
|
||||||
gTaskbarList->Release();
|
|
||||||
HRESULT result = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&gTaskbarList);
|
|
||||||
if (FAILED(result))
|
|
||||||
gTaskbarList = nil;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PumpMessageQueueProc( void )
|
void PumpMessageQueueProc( void )
|
||||||
|
Reference in New Issue
Block a user