Author: akhaldi
Date: Sat May 30 17:14:16 2015
New Revision: 67974
URL:
http://svn.reactos.org/svn/reactos?rev=67974&view=rev
Log:
[USER32] Sync edit.c with Wine Staging 1.7.37. CORE-9246
Modified:
trunk/reactos/media/doc/README.WINE
trunk/reactos/win32ss/user/user32/controls/edit.c
Modified: trunk/reactos/media/doc/README.WINE
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
==============================================================================
--- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original)
+++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sat May 30 17:14:16 2015
@@ -294,7 +294,7 @@
User32 -
reactos/win32ss/user/user32/controls/button.c # Synced to WineStaging-1.7.37
reactos/win32ss/user/user32/controls/combo.c # Synced to WineStaging-1.7.37
- reactos/win32ss/user/user32/controls/edit.c # Synced to Wine-1_1_40
+ reactos/win32ss/user/user32/controls/edit.c # Synced to WineStaging-1.7.37
reactos/win32ss/user/user32/controls/icontitle.c # Synced to WineStaging-1.7.37
reactos/win32ss/user/user32/controls/listbox.c # Synced to Wine-1_1_39
reactos/win32ss/user/user32/controls/scrollbar.c # Forked
Modified: trunk/reactos/win32ss/user/user32/controls/edit.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/user32/contro…
==============================================================================
--- trunk/reactos/win32ss/user/user32/controls/edit.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/user32/controls/edit.c [iso-8859-1] Sat May 30 17:14:16
2015
@@ -237,7 +237,14 @@
msg = WM_CTLCOLOREDIT;
/* why do we notify to es->hwndParent, and we send this one to GetParent()? */
- hbrush = GetControlBrush(es->hwndSelf, hdc, msg); // reactos r54259
+#ifdef __REACTOS__
+ /* ReactOS r54259 */
+ hbrush = GetControlBrush(es->hwndSelf, hdc, msg);
+#else
+ hbrush = (HBRUSH)SendMessageW(GetParent(es->hwndSelf), msg, (WPARAM)hdc,
(LPARAM)es->hwndSelf);
+ if (!hbrush)
+ hbrush = (HBRUSH)DefWindowProcW(GetParent(es->hwndSelf), msg, (WPARAM)hdc,
(LPARAM)es->hwndSelf);
+#endif
return hbrush;
}
@@ -255,11 +262,11 @@
* EDIT_WordBreakProc
*
* Find the beginning of words.
- * Note: unlike the specs for a WordBreakProc, this function only
- * allows to be called without linebreaks between s[0] up to
+ * Note: unlike the specs for a WordBreakProc, this function can
+ * only be called without linebreaks between s[0] up to
* s[count - 1]. Remember it is only called
* internally, so we can decide this for ourselves.
- * Additional we will always be breaking the full string.
+ * Additionally we will always be breaking the full string.
*
*/
static INT EDIT_WordBreakProc(EDITSTATE *es, LPWSTR s, INT index, INT count, INT action)
@@ -342,7 +349,10 @@
countA = WideCharToMultiByte(CP_ACP, 0, es->text + start, count, NULL, 0, NULL,
NULL);
textA = HeapAlloc(GetProcessHeap(), 0, countA);
- if (textA == NULL) return 0; // reactos r33503
+#ifdef __REACTOS__
+ /* ReactOS r33503 */
+ if (textA == NULL) return 0;
+#endif
WideCharToMultiByte(CP_ACP, 0, es->text + start, count, textA, countA, NULL, NULL);
TRACE_(relay)("(ANSI wordbrk=%p,str=%s,idx=%d,cnt=%d,act=%d)\n",
es->word_break_proc, debugstr_an(textA, countA), index, countA, action);
@@ -402,31 +412,29 @@
tabdef.iScale = 0;
tabdef.pTabStops = es->tabs;
tabdef.iTabOrigin = 0;
- //// ReactOS r57679
+
hr = ScriptStringAnalyse(udc, &es->text[index], line_def->net_length,
- (3*line_def->net_length/2+16), -1,
- SSA_LINK|SSA_FALLBACK|SSA_GLYPHS|SSA_TAB, -1,
- NULL, NULL, NULL, &tabdef, NULL, &line_def->ssa);
- ////
+#ifdef __REACTOS__
+ /* ReactOS r57679 */
+ (3*line_def->net_length/2+16), -1,
+#else
+ (1.5*line_def->net_length+16), -1,
+#endif
+ SSA_LINK|SSA_FALLBACK|SSA_GLYPHS|SSA_TAB, -1,
+ NULL, NULL, NULL, &tabdef, NULL,
&line_def->ssa);
if (FAILED(hr))
{
- WARN("ScriptStringAnalyse failed (%x)\n",hr);
- line_def->ssa = NULL;
- }
-
- if (es->font)
+ WARN("ScriptStringAnalyse failed (%x)\n",hr);
+ line_def->ssa = NULL;
+ }
+
+ if (es->font)
SelectObject(udc, old_font);
if (udc != dc)
ReleaseDC(es->hwndSelf, udc);
}
return line_def->ssa;
-}
-
-static inline INT get_vertical_line_count(EDITSTATE *es)
-{
- INT vlc = (es->format_rect.bottom - es->format_rect.top) / es->line_height;
- return max(1,vlc);
}
static SCRIPT_STRING_ANALYSIS EDIT_UpdateUniscribeData(EDITSTATE *es, HDC dc, INT line)
@@ -445,12 +453,22 @@
udc = GetDC(es->hwndSelf);
if (es->font)
old_font = SelectObject(udc, es->font);
- //// ReactOS r57677
+
if (es->style & ES_PASSWORD)
+#ifdef __REACTOS__
+ /* ReactOS r57677 */
ScriptStringAnalyse(udc, &es->password_char, length, (3*length/2+16), -1,
SSA_LINK|SSA_FALLBACK|SSA_GLYPHS|SSA_PASSWORD, -1, NULL, NULL, NULL, NULL, NULL,
&es->ssa);
+#else
+ ScriptStringAnalyse(udc, &es->password_char, length, (1.5*length+16), -1,
SSA_LINK|SSA_FALLBACK|SSA_GLYPHS|SSA_PASSWORD, -1, NULL, NULL, NULL, NULL, NULL,
&es->ssa);
+#endif
else
+#ifdef __REACTOS__
+ /* ReactOS r57677 */
ScriptStringAnalyse(udc, es->text, length, (3*length/2+16), -1,
SSA_LINK|SSA_FALLBACK|SSA_GLYPHS, -1, NULL, NULL, NULL, NULL, NULL, &es->ssa);
- ////
+#else
+ ScriptStringAnalyse(udc, es->text, length, (1.5*length+16), -1,
SSA_LINK|SSA_FALLBACK|SSA_GLYPHS, -1, NULL, NULL, NULL, NULL, NULL, &es->ssa);
+#endif
+
if (es->font)
SelectObject(udc, old_font);
if (udc != dc)
@@ -469,6 +487,12 @@
return EDIT_UpdateUniscribeData_linedef(es,dc,line_def);
}
+}
+
+static inline INT get_vertical_line_count(EDITSTATE *es)
+{
+ INT vlc = (es->format_rect.bottom - es->format_rect.top) / es->line_height;
+ return max(1,vlc);
}
/*********************************************************************
@@ -541,8 +565,11 @@
/* The buffer has been expanded, create a new line and
insert it into the link list */
LINEDEF *new_line = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LINEDEF));
- if (new_line == NULL) // reactos r33509
- break; // reactos r33509
+#ifdef __REACTOS__
+ /* ReactOS r33509 */
+ if (new_line == NULL)
+ break;
+#endif
new_line->next = previous_line->next;
previous_line->next = new_line;
current_line = new_line;
@@ -573,7 +600,7 @@
while (*cp) {
if (*cp == '\n') break;
if ((*cp == '\r') && (*(cp + 1) == '\n'))
- break;
+ break;
cp++;
}
@@ -598,12 +625,12 @@
EDIT_InvalidateUniscribeData_linedef(current_line);
EDIT_UpdateUniscribeData_linedef(es, NULL, current_line);
if (current_line->ssa)
- {
- sz = ScriptString_pSize(current_line->ssa);
- /* Calculate line width */
- current_line->width = sz->cx;
- }
- else current_line->width = es->char_width *
current_line->net_length;
+ {
+ sz = ScriptString_pSize(current_line->ssa);
+ /* Calculate line width */
+ current_line->width = sz->cx;
+ }
+ else current_line->width = es->char_width * current_line->net_length;
}
else current_line->width = 0;
@@ -649,23 +676,23 @@
EDIT_InvalidateUniscribeData_linedef(current_line);
EDIT_UpdateUniscribeData_linedef(es, NULL, current_line);
- if (current_line->ssa)
- {
- count = ScriptString_pcOutChars(current_line->ssa);
- piDx = HeapAlloc(GetProcessHeap(),0,sizeof(INT) * (*count));
- ScriptStringGetLogicalWidths(current_line->ssa,piDx);
-
- prev = current_line->net_length-1;
- do {
- current_line->width -= piDx[prev];
- prev--;
- } while ( prev > 0 &&
current_line->width > fw);
- if (prev<=0)
- prev = 1;
- HeapFree(GetProcessHeap(),0,piDx);
- }
- else
- prev = (fw / es->char_width);
+ if (current_line->ssa)
+ {
+ count = ScriptString_pcOutChars(current_line->ssa);
+ piDx = HeapAlloc(GetProcessHeap(),0,sizeof(INT) * (*count));
+ ScriptStringGetLogicalWidths(current_line->ssa,piDx);
+
+ prev = current_line->net_length-1;
+ do {
+ current_line->width -= piDx[prev];
+ prev--;
+ } while ( prev > 0 && current_line->width > fw);
+ if (prev<=0)
+ prev = 1;
+ HeapFree(GetProcessHeap(),0,piDx);
+ }
+ else
+ prev = (fw / es->char_width);
}
/* If the first line we are calculating, wrapped before istart, we must
@@ -780,7 +807,7 @@
if ((es->style & ES_CENTER) || (es->style & ES_RIGHT))
rc.left = es->format_rect.left;
else
- rc.left = LOWORD(EDIT_EM_PosFromChar(es, nstart_index, FALSE));
+ rc.left = LOWORD(EDIT_EM_PosFromChar(es, nstart_index, FALSE));
rc.right = es->format_rect.right;
SetRectRgn(hrgn, rc.left, rc.top, rc.right, rc.bottom);
@@ -1258,6 +1285,8 @@
if (!es->text) {
+#ifdef __REACTOS__
+/* FIXME: What is this ? */
CHAR *textA = NULL; // ReactOS Hacked! r45670
//UINT countA = 0;
@@ -1277,6 +1306,13 @@
if (textA) //// ReactOS
{
+#else
+ if(!es->hloc32W) return;
+
+ if(es->hloc32A)
+ {
+ CHAR *textA = LocalLock(es->hloc32A);
+#endif
HLOCAL hloc32W_new;
UINT countW_new = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
if(countW_new > es->buffer_size + 1)
@@ -1310,6 +1346,7 @@
*/
static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force)
{
+ if (es->hlocapp) return;
/* Edit window might be already destroyed */
if(!IsWindow(es->hwndSelf))
@@ -1385,7 +1422,7 @@
TRACE("trying to ReAlloc to %d+1 characters\n", size);
- /* Force edit to unlock it's buffer. es->text now NULL */
+ /* Force edit to unlock its buffer. es->text now NULL */
EDIT_UnlockBuffer(es, TRUE);
if (es->hloc32W) {
@@ -2603,7 +2640,7 @@
es->text_width = 0;
/* Issue the EN_MAXTEXT notification and continue with replacing text
- * such that buffer limit is honored. */
+ * so that buffer limit is honored. */
if ((honor_limit) && (size > es->buffer_limit)) {
EDIT_NOTIFY_PARENT(es, EN_MAXTEXT);
/* Buffer limit can be smaller than the actual length of text in combobox */
@@ -2835,11 +2872,11 @@
es->buffer_size = LocalSize(es->hloc32W)/sizeof(WCHAR) - 1;
- /* The text buffer handle belongs to the control */
+ /* The text buffer handle belongs to the control */
es->hlocapp = NULL;
EDIT_LockBuffer(es);
- text_buffer_changed(es);
+ text_buffer_changed(es);
es->x_offset = es->y_offset = 0;
es->selection_start = es->selection_end = 0;
@@ -2998,11 +3035,14 @@
es->tabs = NULL;
else {
es->tabs = HeapAlloc(GetProcessHeap(), 0, count * sizeof(INT));
- if (es->tabs == NULL) // reactos r33503
+#ifdef __REACTOS__
+ /* ReactOS r33503 */
+ if (es->tabs == NULL)
{
es->tabs_count = 0;
return FALSE;
- } // reactos r33503
+ }
+#endif
memcpy(es->tabs, tabs, count * sizeof(INT));
}
EDIT_InvalidateUniscribeData(es);
@@ -3047,8 +3087,11 @@
ulength = strlenW(es->undo_text);
utext = HeapAlloc(GetProcessHeap(), 0, (ulength + 1) * sizeof(WCHAR));
- if (utext == NULL) // reactos r33503
- return FALSE; // reactos r33503
+#ifdef __REACTOS__
+ /* ReactOS r33503 */
+ if (utext == NULL)
+ return FALSE;
+#endif
strcpyW(utext, es->undo_text);
@@ -3277,7 +3320,7 @@
SendMessageW(es->hwndSelf, WM_CLEAR, 0, 0);
break;
case EM_SETSEL:
- SendMessageW(es->hwndSelf, EM_SETSEL, 0, -1);
+ SendMessageW(es->hwndSelf, EM_SETSEL, 0, -1);
break;
default:
ERR("unknown menu item, please report\n");
@@ -3329,10 +3372,13 @@
{
RECT rc;
/* Windows places the menu at the edit's center in this case */
- // reactos r55202
+#ifdef __REACTOS__
+ /* ReactOS r55202 */
GetClientRect(es->hwndSelf, &rc);
MapWindowPoints(es->hwndSelf, 0, (POINT *)&rc, 2);
- //WIN_GetRectangles( es->hwndSelf, COORDS_SCREEN, NULL, &rc );
+#else
+ WIN_GetRectangles( es->hwndSelf, COORDS_SCREEN, NULL, &rc );
+#endif
x = rc.left + (rc.right - rc.left) / 2;
y = rc.top + (rc.bottom - rc.top) / 2;
}
@@ -3419,7 +3465,7 @@
case WM_SYSKEYDOWN: /* Handle Alt+up/down arrows */
if (nEUI)
- SendMessageW(hCombo, CB_SHOWDROPDOWN, bDropped ? FALSE : TRUE, 0);
+ SendMessageW(hCombo, CB_SHOWDROPDOWN, !bDropped, 0);
else
SendMessageW(hLBox, WM_KEYDOWN, VK_F4, 0);
break;
@@ -3559,12 +3605,15 @@
if ((es->style & ES_MULTILINE) && EDIT_IsInsideDialog(es))
SendMessageW(es->hwndParent, WM_NEXTDLGCTL, shift, 0);
break;
+#ifdef __REACTOS__
+ /* ReactOS CORE-1419 */
case VK_BACK:
if (control)
{
- FIXME("Ctrl+Backspace\n"); // See bug 1419.
+ FIXME("Ctrl+Backspace\n");
}
break;
+#endif
}
return TRUE;
}
@@ -3582,8 +3631,8 @@
if(!(es->style & ES_NOHIDESEL))
EDIT_InvalidateText(es, es->selection_start, es->selection_end);
EDIT_NOTIFY_PARENT(es, EN_KILLFOCUS);
- /* throw away left over scroll when we lose focus */
- es->wheelDeltaRemainder = 0;
+ /* throw away left over scroll when we lose focus */
+ es->wheelDeltaRemainder = 0;
return 0;
}
@@ -4443,10 +4492,16 @@
return;
if (CompFlag & GCS_RESULTSTR)
+ {
EDIT_GetResultStr(hIMC, es);
- if (CompFlag & GCS_COMPSTR)
- EDIT_GetCompositionStr(hIMC, CompFlag, es);
- cursor = ImmGetCompositionStringW(hIMC, GCS_CURSORPOS, 0, 0);
+ cursor = 0;
+ }
+ else
+ {
+ if (CompFlag & GCS_COMPSTR)
+ EDIT_GetCompositionStr(hIMC, CompFlag, es);
+ cursor = ImmGetCompositionStringW(hIMC, GCS_CURSORPOS, 0, 0);
+ }
ImmReleaseContext(hwnd, hIMC);
EDIT_SetCaretPos(es, es->selection_start + cursor, es->flags &
EF_AFTER_WRAP);
}
@@ -4629,12 +4684,12 @@
/* The app can own the text buffer handle */
if (es->hloc32W && (es->hloc32W != es->hlocapp)) {
- LocalFree(es->hloc32W);
- }
+ LocalFree(es->hloc32W);
+ }
if (es->hloc32A && (es->hloc32A != es->hlocapp)) {
- LocalFree(es->hloc32A);
- }
- EDIT_InvalidateUniscribeData(es);
+ LocalFree(es->hloc32A);
+ }
+ EDIT_InvalidateUniscribeData(es);
pc = es->first_line_def;
while (pc)
{
@@ -4670,25 +4725,26 @@
{
EDITSTATE *es = (EDITSTATE *)GetWindowLongPtrW( hwnd, 0 );
LRESULT result = 0;
-#ifdef __REACTOS__ // r50219
- PWND pWnd;
-
- pWnd = ValidateHwnd(hwnd);
- if (pWnd)
+#ifdef __REACTOS__
+ /* ReactOS r50219 */
+ PWND pWnd;
+
+ pWnd = ValidateHwnd(hwnd);
+ if (pWnd)
+ {
+ if (!pWnd->fnid)
{
- if (!pWnd->fnid)
- {
- NtUserSetWindowFNID(hwnd, FNID_EDIT);
- }
- else
- {
- if (pWnd->fnid != FNID_EDIT)
- {
- ERR("Wrong window class for Edit! fnId
0x%x\n",pWnd->fnid);
- return 0;
- }
- }
+ NtUserSetWindowFNID(hwnd, FNID_EDIT);
}
+ else
+ {
+ if (pWnd->fnid != FNID_EDIT)
+ {
+ ERR("Wrong window class for Edit! fnId 0x%x\n",pWnd->fnid);
+ return 0;
+ }
+ }
+ }
#endif
TRACE("hwnd=%p msg=%x (%s) wparam=%lx lparam=%lx\n", hwnd, msg,
SPY_GetMsgName(msg, hwnd), wParam, lParam);
@@ -4932,9 +4988,10 @@
case WM_NCDESTROY:
result = EDIT_WM_NCDestroy(es);
-// es = NULL; reactos
#ifdef __REACTOS__
NtUserSetWindowFNID(hwnd, FNID_DESTROY);
+#else
+ es = NULL;
#endif
break;
@@ -4958,7 +5015,7 @@
if (SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0,
0))
result |= DLGC_WANTMESSAGE;
}
- }
+ }
}
break;
@@ -5240,22 +5297,26 @@
}
break;
-
default:
result = DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
break;
}
- /* reactos: check GetWindowLong in case es has been destroyed during processing */
+#ifdef __REACTOS__
+ /* ReactOS: check GetWindowLong in case es has been destroyed during processing */
if (IsWindow(hwnd) && es && GetWindowLongPtrW(hwnd, 0))
EDIT_UnlockBuffer(es, FALSE);
+#else
+ if (IsWindow(hwnd) && es) EDIT_UnlockBuffer(es, FALSE);
+#endif
TRACE("hwnd=%p msg=%x (%s) -- 0x%08lx\n", hwnd, msg,
SPY_GetMsgName(msg, hwnd), result);
return result;
}
-// reactos
+#ifdef __REACTOS__
+
/*********************************************************************
*
* EditWndProc (USER32.@)
@@ -5273,6 +5334,8 @@
{
return EditWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
}
+
+#endif /* __REACTOS__ */
/*********************************************************************
* edit class descriptor
@@ -5282,9 +5345,12 @@
{
editW, /* name */
CS_DBLCLKS | CS_PARENTDC, /* style */
- // reactos
+#ifdef __REACTOS__
EditWndProcA, /* procA */
EditWndProcW, /* procW */
+#else
+ WINPROC_EDIT, /* proc */
+#endif
#ifndef _WIN64
sizeof(EDITSTATE *) + sizeof(WORD), /* extra */
#else