From 71f52d54bd934a635689e5d178eaa4b8dc88803f Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Tue, 1 Jan 2008 22:03:22 +0100 Subject: [PATCH] richedit: Added support for some message (key, mouse) filtering events. --- dlls/riched20/editor.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 01d60c52afc..12fa18c88c4 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -1034,6 +1034,27 @@ ME_FindText(ME_TextEditor *editor, DWORD flags, const CHARRANGE *chrg, const WCH return -1; } +/* helper to send a msg filter notification */ +static BOOL +ME_FilterEvent(ME_TextEditor *editor, UINT msg, WPARAM* wParam, LPARAM* lParam) +{ + MSGFILTER msgf; + + msgf.nmhdr.hwndFrom = editor->hWnd; + msgf.nmhdr.idFrom = GetWindowLongW(editor->hWnd, GWLP_ID); + msgf.nmhdr.code = EN_MSGFILTER; + msgf.msg = msg; + + msgf.wParam = *wParam; + msgf.lParam = *lParam; + if (SendMessageW(GetParent(editor->hWnd), WM_NOTIFY, msgf.nmhdr.idFrom, (LPARAM)&msgf)) + return FALSE; + *wParam = msgf.wParam; + *lParam = msgf.lParam; + msgf.wParam = *wParam; + + return TRUE; +} static BOOL ME_KeyDown(ME_TextEditor *editor, WORD nKey) @@ -2374,6 +2395,9 @@ static LRESULT RichEditWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, SetWindowLongPtrW(hWnd, 0, 0); return 0; case WM_LBUTTONDOWN: + if ((editor->nEventMask & ENM_MOUSEEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; SetFocus(hWnd); ME_LButtonDown(editor, (short)LOWORD(lParam), (short)HIWORD(lParam)); SetCapture(hWnd); @@ -2381,6 +2405,9 @@ static LRESULT RichEditWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, ME_SetCursor(editor, LOWORD(lParam)); break; case WM_MOUSEMOVE: + if ((editor->nEventMask & ENM_MOUSEEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; if (GetCapture() == hWnd) ME_MouseMove(editor, (short)LOWORD(lParam), (short)HIWORD(lParam)); ME_LinkNotify(editor,msg,wParam,lParam); @@ -2389,14 +2416,26 @@ static LRESULT RichEditWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, case WM_LBUTTONUP: if (GetCapture() == hWnd) ReleaseCapture(); + if ((editor->nEventMask & ENM_MOUSEEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; editor->linesel = 0; ME_SetCursor(editor, LOWORD(lParam)); ME_LinkNotify(editor,msg,wParam,lParam); break; case WM_LBUTTONDBLCLK: + if ((editor->nEventMask & ENM_MOUSEEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; ME_LinkNotify(editor,msg,wParam,lParam); ME_SelectWord(editor); break; + case WM_RBUTTONUP: + case WM_RBUTTONDOWN: + if ((editor->nEventMask & ENM_MOUSEEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; + goto do_default; case WM_CONTEXTMENU: if (!ME_ShowContextMenu(editor, (short)LOWORD(lParam), (short)HIWORD(lParam))) goto do_default; @@ -2438,7 +2477,15 @@ static LRESULT RichEditWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, case WM_COMMAND: TRACE("editor wnd command = %d\n", LOWORD(wParam)); return 0; + case WM_KEYUP: + if ((editor->nEventMask & ENM_KEYEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; + goto do_default; case WM_KEYDOWN: + if ((editor->nEventMask & ENM_KEYEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; if (ME_KeyDown(editor, LOWORD(wParam))) return 0; goto do_default; @@ -2545,7 +2592,11 @@ static LRESULT RichEditWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, { int gcWheelDelta; UINT pulScrollLines; - + + if ((editor->nEventMask & ENM_MOUSEEVENTS) && + !ME_FilterEvent(editor, msg, &wParam, &lParam)) + return 0; + SystemParametersInfoW(SPI_GETWHEELSCROLLLINES,0, &pulScrollLines, 0); gcWheelDelta = -GET_WHEEL_DELTA_WPARAM(wParam); -- 2.11.4.GIT