summaryrefslogtreecommitdiff
path: root/alf/alf.cpp
diff options
context:
space:
mode:
authorJonas Kümmerlin <jonas@kuemmerlin.eu>2019-01-11 16:17:48 +0100
committerJonas Kümmerlin <jonas@kuemmerlin.eu>2019-01-11 16:17:48 +0100
commit3ecdf8ec97ee6a0b7453f7b4d0c58a84916cfab0 (patch)
tree1e113eb67605db65900951c5d55cd8102bf0f178 /alf/alf.cpp
parent9279dd93c3997a51b227d3380b4da659fcbdff96 (diff)
add pretranslate message hook
Diffstat (limited to 'alf/alf.cpp')
-rw-r--r--alf/alf.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/alf/alf.cpp b/alf/alf.cpp
index 6f8d28a..57059d2 100644
--- a/alf/alf.cpp
+++ b/alf/alf.cpp
@@ -154,6 +154,10 @@ ALF_DefWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
return 0;
}
+ if (msg == ALF_WM_PRETRANSLATEMSG) {
+ return (LRESULT)ALF_PreTranslateMessagePriv(hwnd, priv, (MSG *)lparam);
+ }
+
if (msg == WM_COMMAND) {
HWND source = (HWND)lparam;
WORD code = HIWORD(wparam);
@@ -453,6 +457,26 @@ ALF_ApplicationFromWindow(HWND hwnd)
return (ALFAPP)SendMessage(hwnd, ALF_WM_GETAPPLICATION, 0, 0);
}
+BOOL
+ALF_PreTranslateMessage(HWND hwnd, MSG *message)
+{
+ return (BOOL)SendMessage(hwnd, ALF_WM_PRETRANSLATEMSG, 0, (LPARAM)message);
+}
+
+BOOL
+ALF_PreTranslateMessagePriv(HWND win, ALFWindowPriv *priv, MSG *message)
+{
+ BOOL ret = FALSE;
+
+ if (priv->vtbl->pretranslatemessage)
+ ret = priv->vtbl->pretranslatemessage(priv->closure, win, message);
+
+ if (!ret)
+ ret = IsDialogMessage(win, message);
+
+ return ret;
+}
+
int
ALF_ShowModal(HWND win)
{
@@ -467,7 +491,7 @@ ALF_ShowModal(HWND win)
// TODO: call application message hooks
// TODO: call preprocess message hook
- if (!IsDialogMessage(win, &msg)) {
+ if (!ALF_PreTranslateMessage(win, &msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}