user32: Split the handling of the 16-bit messages out of the edit winproc.
This commit is contained in:
parent
810e701a3f
commit
68656c0c3f
|
@ -2467,23 +2467,23 @@ static HLOCAL EDIT_EM_GetHandle(EDITSTATE *es)
|
||||||
*
|
*
|
||||||
* In this function we'll try to switch to local heap.
|
* In this function we'll try to switch to local heap.
|
||||||
*/
|
*/
|
||||||
static HLOCAL16 EDIT_EM_GetHandle16(EDITSTATE *es)
|
static HLOCAL16 EDIT_EM_GetHandle16( HWND hwnd )
|
||||||
{
|
{
|
||||||
CHAR *textA;
|
CHAR *textA;
|
||||||
UINT alloc_size;
|
UINT alloc_size;
|
||||||
HLOCAL hloc;
|
HLOCAL hloc;
|
||||||
STACK16FRAME* stack16;
|
STACK16FRAME* stack16;
|
||||||
HANDLE16 oldDS;
|
HANDLE16 oldDS;
|
||||||
HLOCAL16 hloc16 = GetWindowWord( es->hwndSelf, GWW_HANDLE16 );
|
HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 );
|
||||||
|
|
||||||
if (hloc16) return hloc16;
|
if (hloc16) return hloc16;
|
||||||
|
|
||||||
if (!(hloc = EDIT_EM_GetHandle(es))) return 0;
|
if (!(hloc = (HLOCAL)SendMessageA( hwnd, EM_GETHANDLE, 0, 0 ))) return 0;
|
||||||
alloc_size = LocalSize( hloc );
|
alloc_size = LocalSize( hloc );
|
||||||
|
|
||||||
stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||||
oldDS = stack16->ds;
|
oldDS = stack16->ds;
|
||||||
stack16->ds = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
|
stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
|
||||||
|
|
||||||
if (!LocalHeapSize16()) {
|
if (!LocalHeapSize16()) {
|
||||||
|
|
||||||
|
@ -2509,7 +2509,7 @@ static HLOCAL16 EDIT_EM_GetHandle16(EDITSTATE *es)
|
||||||
memcpy( textA, LocalLock( hloc ), alloc_size );
|
memcpy( textA, LocalLock( hloc ), alloc_size );
|
||||||
LocalUnlock( hloc );
|
LocalUnlock( hloc );
|
||||||
LocalUnlock16( hloc16 );
|
LocalUnlock16( hloc16 );
|
||||||
SetWindowWord( es->hwndSelf, GWW_HANDLE16, hloc16 );
|
SetWindowWord( hwnd, GWW_HANDLE16, hloc16 );
|
||||||
|
|
||||||
TRACE("Returning %04X, LocalSize() = %d\n", hloc16, alloc_size);
|
TRACE("Returning %04X, LocalSize() = %d\n", hloc16, alloc_size);
|
||||||
|
|
||||||
|
@ -2872,17 +2872,16 @@ static void EDIT_EM_SetHandle(EDITSTATE *es, HLOCAL hloc)
|
||||||
* FIXME: ES_LOWERCASE, ES_UPPERCASE, ES_OEMCONVERT, ES_NUMBER ???
|
* FIXME: ES_LOWERCASE, ES_UPPERCASE, ES_OEMCONVERT, ES_NUMBER ???
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc16)
|
static void EDIT_EM_SetHandle16( HWND hwnd, HLOCAL16 hloc16 )
|
||||||
{
|
{
|
||||||
STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
|
||||||
HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
|
HINSTANCE16 hInstance = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE );
|
||||||
HANDLE16 oldDS = stack16->ds;
|
HANDLE16 oldDS = stack16->ds;
|
||||||
HLOCAL hloc32;
|
HLOCAL hloc32;
|
||||||
INT count;
|
INT count;
|
||||||
CHAR *text;
|
CHAR *text;
|
||||||
|
|
||||||
if (!(es->style & ES_MULTILINE))
|
if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) return;
|
||||||
return;
|
|
||||||
|
|
||||||
if (!hloc16) {
|
if (!hloc16) {
|
||||||
WARN("called with NULL handle\n");
|
WARN("called with NULL handle\n");
|
||||||
|
@ -2897,11 +2896,11 @@ static void EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc16)
|
||||||
memcpy( LocalLock(hloc32), text, count );
|
memcpy( LocalLock(hloc32), text, count );
|
||||||
LocalUnlock(hloc32);
|
LocalUnlock(hloc32);
|
||||||
LocalUnlock16(hloc16);
|
LocalUnlock16(hloc16);
|
||||||
SetWindowWord( es->hwndSelf, GWW_HANDLE16, hloc16 );
|
SetWindowWord( hwnd, GWW_HANDLE16, hloc16 );
|
||||||
}
|
}
|
||||||
stack16->ds = oldDS;
|
stack16->ds = oldDS;
|
||||||
|
|
||||||
if (hloc32) EDIT_EM_SetHandle(es, hloc32);
|
if (hloc32) SendMessageA( hwnd, EM_SETHANDLE, (WPARAM)hloc32, 0 );
|
||||||
else ERR("Could not allocate new buffer\n");
|
else ERR("Could not allocate new buffer\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3055,29 +3054,6 @@ static BOOL EDIT_EM_SetTabStops(EDITSTATE *es, INT count, const INT *tabs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
*
|
|
||||||
* EM_SETTABSTOPS16
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static BOOL EDIT_EM_SetTabStops16(EDITSTATE *es, INT count, const INT16 *tabs)
|
|
||||||
{
|
|
||||||
if (!(es->style & ES_MULTILINE))
|
|
||||||
return FALSE;
|
|
||||||
HeapFree(GetProcessHeap(), 0, es->tabs);
|
|
||||||
es->tabs_count = count;
|
|
||||||
if (!count)
|
|
||||||
es->tabs = NULL;
|
|
||||||
else {
|
|
||||||
INT i;
|
|
||||||
es->tabs = HeapAlloc(GetProcessHeap(), 0, count * sizeof(INT));
|
|
||||||
for (i = 0 ; i < count ; i++)
|
|
||||||
es->tabs[i] = *tabs++;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
*
|
*
|
||||||
* EM_SETWORDBREAKPROC
|
* EM_SETWORDBREAKPROC
|
||||||
|
@ -3097,18 +3073,6 @@ static void EDIT_EM_SetWordBreakProc(EDITSTATE *es, void *wbp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
*
|
|
||||||
* EM_SETWORDBREAKPROC16
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static void EDIT_EM_SetWordBreakProc16(EDITSTATE *es, EDITWORDBREAKPROC16 wbp)
|
|
||||||
{
|
|
||||||
struct word_break_thunk *thunk = add_word_break_thunk( wbp );
|
|
||||||
if (thunk) EDIT_EM_SetWordBreakProc( es, thunk );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
*
|
*
|
||||||
* EM_UNDO / WM_UNDO
|
* EM_UNDO / WM_UNDO
|
||||||
|
@ -4736,12 +4700,6 @@ static inline LRESULT DefWindowProcT(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
|
||||||
*
|
*
|
||||||
* The messages are in the order of the actual integer values
|
* The messages are in the order of the actual integer values
|
||||||
* (which can be found in include/windows.h)
|
* (which can be found in include/windows.h)
|
||||||
* Wherever possible the 16 bit versions are converted to
|
|
||||||
* the 32 bit ones, so that we can 'fall through' to the
|
|
||||||
* helper functions. These are mostly 32 bit (with a few
|
|
||||||
* exceptions, clearly indicated by a '16' extension to their
|
|
||||||
* names).
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
WPARAM wParam, LPARAM lParam, BOOL unicode )
|
WPARAM wParam, LPARAM lParam, BOOL unicode )
|
||||||
|
@ -4757,56 +4715,21 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
if (es && (msg != WM_NCDESTROY)) EDIT_LockBuffer(es);
|
if (es && (msg != WM_NCDESTROY)) EDIT_LockBuffer(es);
|
||||||
|
|
||||||
switch (msg) {
|
switch (msg) {
|
||||||
case EM_GETSEL16:
|
|
||||||
wParam = 0;
|
|
||||||
lParam = 0;
|
|
||||||
/* fall through */
|
|
||||||
case EM_GETSEL:
|
case EM_GETSEL:
|
||||||
result = EDIT_EM_GetSel(es, (PUINT)wParam, (PUINT)lParam);
|
result = EDIT_EM_GetSel(es, (PUINT)wParam, (PUINT)lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETSEL16:
|
|
||||||
if ((short)LOWORD(lParam) == -1)
|
|
||||||
EDIT_EM_SetSel(es, (UINT)-1, 0, FALSE);
|
|
||||||
else
|
|
||||||
EDIT_EM_SetSel(es, LOWORD(lParam), HIWORD(lParam), FALSE);
|
|
||||||
if (!wParam)
|
|
||||||
EDIT_EM_ScrollCaret(es);
|
|
||||||
result = 1;
|
|
||||||
break;
|
|
||||||
case EM_SETSEL:
|
case EM_SETSEL:
|
||||||
EDIT_EM_SetSel(es, wParam, lParam, FALSE);
|
EDIT_EM_SetSel(es, wParam, lParam, FALSE);
|
||||||
EDIT_EM_ScrollCaret(es);
|
EDIT_EM_ScrollCaret(es);
|
||||||
result = 1;
|
result = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETRECT16:
|
|
||||||
if (lParam)
|
|
||||||
{
|
|
||||||
RECT16 *r16 = MapSL(lParam);
|
|
||||||
r16->left = es->format_rect.left;
|
|
||||||
r16->top = es->format_rect.top;
|
|
||||||
r16->right = es->format_rect.right;
|
|
||||||
r16->bottom = es->format_rect.bottom;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EM_GETRECT:
|
case EM_GETRECT:
|
||||||
if (lParam)
|
if (lParam)
|
||||||
CopyRect((LPRECT)lParam, &es->format_rect);
|
CopyRect((LPRECT)lParam, &es->format_rect);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETRECT16:
|
|
||||||
if ((es->style & ES_MULTILINE) && lParam) {
|
|
||||||
RECT rc;
|
|
||||||
RECT16 *r16 = MapSL(lParam);
|
|
||||||
rc.left = r16->left;
|
|
||||||
rc.top = r16->top;
|
|
||||||
rc.right = r16->right;
|
|
||||||
rc.bottom = r16->bottom;
|
|
||||||
EDIT_SetRectNP(es, &rc);
|
|
||||||
EDIT_UpdateText(es, NULL, TRUE);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EM_SETRECT:
|
case EM_SETRECT:
|
||||||
if ((es->style & ES_MULTILINE) && lParam) {
|
if ((es->style & ES_MULTILINE) && lParam) {
|
||||||
EDIT_SetRectNP(es, (LPRECT)lParam);
|
EDIT_SetRectNP(es, (LPRECT)lParam);
|
||||||
|
@ -4814,47 +4737,28 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETRECTNP16:
|
|
||||||
if ((es->style & ES_MULTILINE) && lParam) {
|
|
||||||
RECT rc;
|
|
||||||
RECT16 *r16 = MapSL(lParam);
|
|
||||||
rc.left = r16->left;
|
|
||||||
rc.top = r16->top;
|
|
||||||
rc.right = r16->right;
|
|
||||||
rc.bottom = r16->bottom;
|
|
||||||
EDIT_SetRectNP(es, &rc);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EM_SETRECTNP:
|
case EM_SETRECTNP:
|
||||||
if ((es->style & ES_MULTILINE) && lParam)
|
if ((es->style & ES_MULTILINE) && lParam)
|
||||||
EDIT_SetRectNP(es, (LPRECT)lParam);
|
EDIT_SetRectNP(es, (LPRECT)lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SCROLL16:
|
|
||||||
case EM_SCROLL:
|
case EM_SCROLL:
|
||||||
result = EDIT_EM_Scroll(es, (INT)wParam);
|
result = EDIT_EM_Scroll(es, (INT)wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_LINESCROLL16:
|
|
||||||
wParam = (WPARAM)(INT)(SHORT)HIWORD(lParam);
|
|
||||||
lParam = (LPARAM)(INT)(SHORT)LOWORD(lParam);
|
|
||||||
/* fall through */
|
|
||||||
case EM_LINESCROLL:
|
case EM_LINESCROLL:
|
||||||
result = (LRESULT)EDIT_EM_LineScroll(es, (INT)wParam, (INT)lParam);
|
result = (LRESULT)EDIT_EM_LineScroll(es, (INT)wParam, (INT)lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SCROLLCARET16:
|
|
||||||
case EM_SCROLLCARET:
|
case EM_SCROLLCARET:
|
||||||
EDIT_EM_ScrollCaret(es);
|
EDIT_EM_ScrollCaret(es);
|
||||||
result = 1;
|
result = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETMODIFY16:
|
|
||||||
case EM_GETMODIFY:
|
case EM_GETMODIFY:
|
||||||
result = ((es->flags & EF_MODIFIED) != 0);
|
result = ((es->flags & EF_MODIFIED) != 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETMODIFY16:
|
|
||||||
case EM_SETMODIFY:
|
case EM_SETMODIFY:
|
||||||
if (wParam)
|
if (wParam)
|
||||||
es->flags |= EF_MODIFIED;
|
es->flags |= EF_MODIFIED;
|
||||||
|
@ -4862,60 +4766,39 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
es->flags &= ~(EF_MODIFIED | EF_UPDATE); /* reset pending updates */
|
es->flags &= ~(EF_MODIFIED | EF_UPDATE); /* reset pending updates */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETLINECOUNT16:
|
|
||||||
case EM_GETLINECOUNT:
|
case EM_GETLINECOUNT:
|
||||||
result = (es->style & ES_MULTILINE) ? es->line_count : 1;
|
result = (es->style & ES_MULTILINE) ? es->line_count : 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_LINEINDEX16:
|
|
||||||
if ((INT16)wParam == -1)
|
|
||||||
wParam = (WPARAM)-1;
|
|
||||||
/* fall through */
|
|
||||||
case EM_LINEINDEX:
|
case EM_LINEINDEX:
|
||||||
result = (LRESULT)EDIT_EM_LineIndex(es, (INT)wParam);
|
result = (LRESULT)EDIT_EM_LineIndex(es, (INT)wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETHANDLE16:
|
|
||||||
EDIT_EM_SetHandle16(es, (HLOCAL16)wParam);
|
|
||||||
break;
|
|
||||||
case EM_SETHANDLE:
|
case EM_SETHANDLE:
|
||||||
EDIT_EM_SetHandle(es, (HLOCAL)wParam);
|
EDIT_EM_SetHandle(es, (HLOCAL)wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETHANDLE16:
|
|
||||||
result = (LRESULT)EDIT_EM_GetHandle16(es);
|
|
||||||
break;
|
|
||||||
case EM_GETHANDLE:
|
case EM_GETHANDLE:
|
||||||
result = (LRESULT)EDIT_EM_GetHandle(es);
|
result = (LRESULT)EDIT_EM_GetHandle(es);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETTHUMB16:
|
|
||||||
case EM_GETTHUMB:
|
case EM_GETTHUMB:
|
||||||
result = EDIT_EM_GetThumb(es);
|
result = EDIT_EM_GetThumb(es);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* these messages missing from specs */
|
/* these messages missing from specs */
|
||||||
case WM_USER+15:
|
|
||||||
case 0x00bf:
|
case 0x00bf:
|
||||||
case WM_USER+16:
|
|
||||||
case 0x00c0:
|
case 0x00c0:
|
||||||
case WM_USER+19:
|
|
||||||
case 0x00c3:
|
case 0x00c3:
|
||||||
case WM_USER+26:
|
|
||||||
case 0x00ca:
|
case 0x00ca:
|
||||||
FIXME("undocumented message 0x%x, please report\n", msg);
|
FIXME("undocumented message 0x%x, please report\n", msg);
|
||||||
result = DefWindowProcW(hwnd, msg, wParam, lParam);
|
result = DefWindowProcW(hwnd, msg, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_LINELENGTH16:
|
|
||||||
case EM_LINELENGTH:
|
case EM_LINELENGTH:
|
||||||
result = (LRESULT)EDIT_EM_LineLength(es, (INT)wParam);
|
result = (LRESULT)EDIT_EM_LineLength(es, (INT)wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_REPLACESEL16:
|
|
||||||
lParam = (LPARAM)MapSL(lParam);
|
|
||||||
unicode = FALSE; /* 16-bit message is always ascii */
|
|
||||||
/* fall through */
|
|
||||||
case EM_REPLACESEL:
|
case EM_REPLACESEL:
|
||||||
{
|
{
|
||||||
LPWSTR textW;
|
LPWSTR textW;
|
||||||
|
@ -4938,50 +4821,35 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EM_GETLINE16:
|
|
||||||
lParam = (LPARAM)MapSL(lParam);
|
|
||||||
unicode = FALSE; /* 16-bit message is always ascii */
|
|
||||||
/* fall through */
|
|
||||||
case EM_GETLINE:
|
case EM_GETLINE:
|
||||||
result = (LRESULT)EDIT_EM_GetLine(es, (INT)wParam, (LPWSTR)lParam, unicode);
|
result = (LRESULT)EDIT_EM_GetLine(es, (INT)wParam, (LPWSTR)lParam, unicode);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_LIMITTEXT16:
|
|
||||||
case EM_SETLIMITTEXT:
|
case EM_SETLIMITTEXT:
|
||||||
EDIT_EM_SetLimitText(es, wParam);
|
EDIT_EM_SetLimitText(es, wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_CANUNDO16:
|
|
||||||
case EM_CANUNDO:
|
case EM_CANUNDO:
|
||||||
result = (LRESULT)EDIT_EM_CanUndo(es);
|
result = (LRESULT)EDIT_EM_CanUndo(es);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_UNDO16:
|
|
||||||
case EM_UNDO:
|
case EM_UNDO:
|
||||||
case WM_UNDO:
|
case WM_UNDO:
|
||||||
result = (LRESULT)EDIT_EM_Undo(es);
|
result = (LRESULT)EDIT_EM_Undo(es);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_FMTLINES16:
|
|
||||||
case EM_FMTLINES:
|
case EM_FMTLINES:
|
||||||
result = (LRESULT)EDIT_EM_FmtLines(es, (BOOL)wParam);
|
result = (LRESULT)EDIT_EM_FmtLines(es, (BOOL)wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_LINEFROMCHAR16:
|
|
||||||
case EM_LINEFROMCHAR:
|
case EM_LINEFROMCHAR:
|
||||||
result = (LRESULT)EDIT_EM_LineFromChar(es, (INT)wParam);
|
result = (LRESULT)EDIT_EM_LineFromChar(es, (INT)wParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETTABSTOPS16:
|
|
||||||
result = (LRESULT)EDIT_EM_SetTabStops16(es, (INT)wParam, MapSL(lParam));
|
|
||||||
break;
|
|
||||||
case EM_SETTABSTOPS:
|
case EM_SETTABSTOPS:
|
||||||
result = (LRESULT)EDIT_EM_SetTabStops(es, (INT)wParam, (LPINT)lParam);
|
result = (LRESULT)EDIT_EM_SetTabStops(es, (INT)wParam, (LPINT)lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETPASSWORDCHAR16:
|
|
||||||
unicode = FALSE; /* 16-bit message is always ascii */
|
|
||||||
/* fall through */
|
|
||||||
case EM_SETPASSWORDCHAR:
|
case EM_SETPASSWORDCHAR:
|
||||||
{
|
{
|
||||||
WCHAR charW = 0;
|
WCHAR charW = 0;
|
||||||
|
@ -4998,19 +4866,14 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EM_EMPTYUNDOBUFFER16:
|
|
||||||
case EM_EMPTYUNDOBUFFER:
|
case EM_EMPTYUNDOBUFFER:
|
||||||
EDIT_EM_EmptyUndoBuffer(es);
|
EDIT_EM_EmptyUndoBuffer(es);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETFIRSTVISIBLELINE16:
|
|
||||||
result = es->y_offset;
|
|
||||||
break;
|
|
||||||
case EM_GETFIRSTVISIBLELINE:
|
case EM_GETFIRSTVISIBLELINE:
|
||||||
result = (es->style & ES_MULTILINE) ? es->y_offset : es->x_offset;
|
result = (es->style & ES_MULTILINE) ? es->y_offset : es->x_offset;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_SETREADONLY16:
|
|
||||||
case EM_SETREADONLY:
|
case EM_SETREADONLY:
|
||||||
{
|
{
|
||||||
DWORD old_style = es->style;
|
DWORD old_style = es->style;
|
||||||
|
@ -5032,23 +4895,14 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EM_SETWORDBREAKPROC16:
|
|
||||||
EDIT_EM_SetWordBreakProc16(es, (EDITWORDBREAKPROC16)lParam);
|
|
||||||
break;
|
|
||||||
case EM_SETWORDBREAKPROC:
|
case EM_SETWORDBREAKPROC:
|
||||||
EDIT_EM_SetWordBreakProc(es, (void *)lParam);
|
EDIT_EM_SetWordBreakProc(es, (void *)lParam);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETWORDBREAKPROC16:
|
|
||||||
result = (LRESULT)get_word_break_thunk( es->word_break_proc );
|
|
||||||
break;
|
|
||||||
case EM_GETWORDBREAKPROC:
|
case EM_GETWORDBREAKPROC:
|
||||||
result = (LRESULT)es->word_break_proc;
|
result = (LRESULT)es->word_break_proc;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETPASSWORDCHAR16:
|
|
||||||
unicode = FALSE; /* 16-bit message is always ascii */
|
|
||||||
/* fall through */
|
|
||||||
case EM_GETPASSWORDCHAR:
|
case EM_GETPASSWORDCHAR:
|
||||||
{
|
{
|
||||||
if(unicode)
|
if(unicode)
|
||||||
|
@ -5063,8 +4917,6 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The following EM_xxx are new to win95 and don't exist for 16 bit */
|
|
||||||
|
|
||||||
case EM_SETMARGINS:
|
case EM_SETMARGINS:
|
||||||
EDIT_EM_SetMargins(es, (INT)wParam, LOWORD(lParam), HIWORD(lParam), TRUE);
|
EDIT_EM_SetMargins(es, (INT)wParam, LOWORD(lParam), HIWORD(lParam), TRUE);
|
||||||
break;
|
break;
|
||||||
|
@ -5389,13 +5241,141 @@ static LRESULT EditWndProc_common( HWND hwnd, UINT msg,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* EditWndProc_wrapper16
|
||||||
|
*/
|
||||||
|
static LRESULT EditWndProc_wrapper16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )
|
||||||
|
{
|
||||||
|
static const UINT msg16_offset = EM_GETSEL16 - EM_GETSEL;
|
||||||
|
LRESULT result;
|
||||||
|
|
||||||
|
switch (msg)
|
||||||
|
{
|
||||||
|
case EM_SCROLL16:
|
||||||
|
case EM_SCROLLCARET16:
|
||||||
|
case EM_GETMODIFY16:
|
||||||
|
case EM_SETMODIFY16:
|
||||||
|
case EM_GETLINECOUNT16:
|
||||||
|
case EM_GETTHUMB16:
|
||||||
|
case EM_LINELENGTH16:
|
||||||
|
case EM_LIMITTEXT16:
|
||||||
|
case EM_CANUNDO16:
|
||||||
|
case EM_UNDO16:
|
||||||
|
case EM_FMTLINES16:
|
||||||
|
case EM_LINEFROMCHAR16:
|
||||||
|
case EM_SETPASSWORDCHAR16:
|
||||||
|
case EM_EMPTYUNDOBUFFER16:
|
||||||
|
case EM_SETREADONLY16:
|
||||||
|
case EM_GETPASSWORDCHAR16:
|
||||||
|
/* these messages missing from specs */
|
||||||
|
case WM_USER+15:
|
||||||
|
case WM_USER+16:
|
||||||
|
case WM_USER+19:
|
||||||
|
case WM_USER+26:
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_GETSEL16:
|
||||||
|
wParam = 0;
|
||||||
|
lParam = 0;
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_REPLACESEL16:
|
||||||
|
case EM_GETLINE16:
|
||||||
|
lParam = (LPARAM)MapSL(lParam);
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_LINESCROLL16:
|
||||||
|
wParam = (INT)(SHORT)HIWORD(lParam);
|
||||||
|
lParam = (INT)(SHORT)LOWORD(lParam);
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_LINEINDEX16:
|
||||||
|
if ((INT16)wParam == -1) wParam = (WPARAM)-1;
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_SETSEL16:
|
||||||
|
if ((short)LOWORD(lParam) == -1)
|
||||||
|
{
|
||||||
|
wParam = -1;
|
||||||
|
lParam = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wParam = LOWORD(lParam);
|
||||||
|
lParam = HIWORD(lParam);
|
||||||
|
}
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_GETRECT16:
|
||||||
|
if (lParam)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
RECT16 *r16 = MapSL(lParam);
|
||||||
|
EditWndProc_common( hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, FALSE );
|
||||||
|
r16->left = rect.left;
|
||||||
|
r16->top = rect.top;
|
||||||
|
r16->right = rect.right;
|
||||||
|
r16->bottom = rect.bottom;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
case EM_SETRECT16:
|
||||||
|
case EM_SETRECTNP16:
|
||||||
|
if (lParam)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
RECT16 *r16 = MapSL(lParam);
|
||||||
|
rect.left = r16->left;
|
||||||
|
rect.top = r16->top;
|
||||||
|
rect.right = r16->right;
|
||||||
|
rect.bottom = r16->bottom;
|
||||||
|
EditWndProc_common( hwnd, msg - msg16_offset, wParam, (LPARAM)&rect, FALSE );
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
case EM_SETHANDLE16:
|
||||||
|
EDIT_EM_SetHandle16( hwnd, (HLOCAL16)wParam );
|
||||||
|
break;
|
||||||
|
case EM_GETHANDLE16:
|
||||||
|
result = EDIT_EM_GetHandle16( hwnd );
|
||||||
|
break;
|
||||||
|
case EM_SETTABSTOPS16:
|
||||||
|
{
|
||||||
|
INT16 *tabs16 = MapSL(lParam);
|
||||||
|
INT i, count = wParam, *tabs = NULL;
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
if (!(tabs = HeapAlloc( GetProcessHeap(), 0, count * sizeof(*tabs) ))) return 0;
|
||||||
|
for (i = 0; i < count; i++) tabs[i] = tabs16[i];
|
||||||
|
}
|
||||||
|
result = EditWndProc_common( hwnd, msg - msg16_offset, count, (LPARAM)tabs, FALSE );
|
||||||
|
HeapFree( GetProcessHeap(), 0, tabs );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
case EM_GETFIRSTVISIBLELINE16:
|
||||||
|
if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) return 0;
|
||||||
|
msg -= msg16_offset;
|
||||||
|
break;
|
||||||
|
case EM_SETWORDBREAKPROC16:
|
||||||
|
{
|
||||||
|
struct word_break_thunk *thunk = add_word_break_thunk( (EDITWORDBREAKPROC16)lParam );
|
||||||
|
return EditWndProc_common( hwnd, EM_SETWORDBREAKPROC, wParam, (LPARAM)thunk, FALSE );
|
||||||
|
}
|
||||||
|
case EM_GETWORDBREAKPROC16:
|
||||||
|
result = EditWndProc_common( hwnd, EM_GETWORDBREAKPROC, wParam, lParam, FALSE );
|
||||||
|
return (LRESULT)get_word_break_thunk( (EDITWORDBREAKPROCA)result );
|
||||||
|
default:
|
||||||
|
return EditWndProc_common( hwnd, msg, wParam, lParam, unicode );
|
||||||
|
}
|
||||||
|
return EditWndProc_common( hwnd, msg, wParam, lParam, FALSE );
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
*
|
*
|
||||||
* EditWndProc (USER32.@)
|
* EditWndProc (USER32.@)
|
||||||
*/
|
*/
|
||||||
LRESULT WINAPI EditWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
LRESULT WINAPI EditWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return EditWndProc_common(hWnd, uMsg, wParam, lParam, FALSE);
|
return EditWndProc_wrapper16(hWnd, uMsg, wParam, lParam, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
|
@ -5404,7 +5384,7 @@ LRESULT WINAPI EditWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
*/
|
*/
|
||||||
static LRESULT WINAPI EditWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static LRESULT WINAPI EditWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return EditWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
|
return EditWndProc_wrapper16(hWnd, uMsg, wParam, lParam, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
|
|
Loading…
Reference in New Issue