Eric Pouech : richedit: Added support for some message (key, mouse) filtering events.
Alexandre Julliard
julliard at winehq.org
Wed Jan 2 07:34:47 CST 2008
Module: wine
Branch: master
Commit: 71f52d54bd934a635689e5d178eaa4b8dc88803f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=71f52d54bd934a635689e5d178eaa4b8dc88803f
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Tue Jan 1 22:03:22 2008 +0100
richedit: Added support for some message (key, mouse) filtering events.
---
dlls/riched20/editor.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 52 insertions(+), 1 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 01d60c5..12fa18c 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);
More information about the wine-cvs
mailing list