[ros-diffs] [winesync] 27917: Autosyncing with Wine HEAD

winesync at svn.reactos.org winesync at svn.reactos.org
Fri Jul 27 12:05:21 CEST 2007


Author: winesync
Date: Fri Jul 27 14:05:21 2007
New Revision: 27917

URL: http://svn.reactos.org/svn/reactos?rev=27917&view=rev
Log:
Autosyncing with Wine HEAD

Modified:
    trunk/reactos/dll/win32/riched20/caret.c
    trunk/reactos/dll/win32/riched20/editor.c
    trunk/reactos/dll/win32/riched20/editstr.h
    trunk/reactos/dll/win32/riched20/reader.c
    trunk/reactos/dll/win32/riched20/riched20.rbuild
    trunk/reactos/dll/win32/riched20/string.c
    trunk/reactos/dll/win32/riched20/txtsrv.c

Modified: trunk/reactos/dll/win32/riched20/caret.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/caret.c?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/caret.c (original)
+++ trunk/reactos/dll/win32/riched20/caret.c Fri Jul 27 14:05:21 2007
@@ -232,21 +232,28 @@
 
   ME_WrapMarkedParagraphs(editor);
   ME_GetCursorCoordinates(editor, &editor->pCursors[0], &x, &y, &height);
-  CreateCaret(editor->hWnd, NULL, 0, height);
-  SetCaretPos(x, y);
+  if(editor->bHaveFocus)
+  {
+    CreateCaret(editor->hWnd, NULL, 0, height);
+    SetCaretPos(x, y);
+  }
 }
 
 
 void ME_ShowCaret(ME_TextEditor *ed)
 {
   ME_MoveCaret(ed);
-  ShowCaret(ed->hWnd);
+  if(ed->bHaveFocus)
+    ShowCaret(ed->hWnd);
 }
 
 void ME_HideCaret(ME_TextEditor *ed)
 {
-  HideCaret(ed->hWnd);
-  DestroyCaret();
+  if(ed->bHaveFocus)
+  {
+    HideCaret(ed->hWnd);
+    DestroyCaret();
+  }
 }
 
 void ME_InternalDeleteText(ME_TextEditor *editor, int nOfs, 
@@ -366,6 +373,8 @@
   int nChars)
 {  
   assert(nCursor>=0 && nCursor<editor->nCursors);
+  /* text operations set modified state */
+  editor->nModifyStep = 1;
   ME_InternalDeleteText(editor, ME_GetCursorOfs(editor, nCursor), nChars);
 }
 

Modified: trunk/reactos/dll/win32/riched20/editor.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/editor.c?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/editor.c (original)
+++ trunk/reactos/dll/win32/riched20/editor.c Fri Jul 27 14:05:21 2007
@@ -66,7 +66,7 @@
   + EM_GETSELTEXT (ANSI&Unicode)
   + EM_GETSCROLLPOS 3.0 (only Y value valid)
 ! - EM_GETTHUMB
-  - EM_GETTEXTEX 2.0
+  + EM_GETTEXTEX 2.0
   + EM_GETTEXTLENGTHEX (GTL_PRECISE unimplemented)
   - EM_GETTEXTMODE 2.0
 ? + EM_GETTEXTRANGE (ANSI&Unicode)
@@ -114,7 +114,7 @@
   + EM_SETSCROLLPOS 3.0
   - EM_SETTABSTOPS 3.0
   - EM_SETTARGETDEVICE
-  + EM_SETTEXTEX 3.0 (unicode only, no rich text insertion handling, proper style?)
+  + EM_SETTEXTEX 3.0 (no rich text insertion handling, proper style?)
   - EM_SETTEXTMODE 2.0
   - EM_SETTYPOGRAPHYOPTIONS 3.0
   + EM_SETUNDOLIMIT 2.0
@@ -226,9 +226,8 @@
 #include "winreg.h"
 #define NO_SHLWAPI_STREAM 
 #include "shlwapi.h"
+#include "rtf.h"
 #include "imm.h"
-#include "textserv.h"
-#include "rtf.h"
 
 #define STACK_SIZE_DEFAULT  100
 #define STACK_SIZE_MAX     1000
@@ -1155,6 +1154,7 @@
   ed->lpOleCallback = NULL;
   ed->mode = TM_RICHTEXT | TM_MULTILEVELUNDO | TM_MULTICODEPAGE;
   ed->AutoURLDetect_bEnable = FALSE;
+  ed->bHaveFocus = FALSE;
   GetClientRect(hWnd, &ed->rcFormat);
   for (i=0; i<HFONT_CACHE_SIZE; i++)
   {
@@ -1418,7 +1418,7 @@
 {
   ME_TextEditor *editor = (ME_TextEditor *)GetWindowLongPtrW(hWnd, 0);
   
-  TRACE("hwnd %p msg %04x (%s) %x %lx, unicode %d\n",
+  TRACE("hwnd %p msg %04x (%s) %lx %lx, unicode %d\n",
         hWnd, msg, get_msg_name(msg), wParam, lParam, unicode);
   
   if (!editor && msg != WM_NCCREATE && msg != WM_NCDESTROY) {
@@ -1520,7 +1520,7 @@
       editor->nUndoLimit = min(wParam, STACK_SIZE_MAX);
     /* Setting a max stack size keeps wine from getting killed 
       for hogging memory. Windows allocates all this memory at once, so
-      no program would realistically set a value above our maxiumum. */  
+      no program would realistically set a value above our maximum. */
     return editor->nUndoLimit;
   }
   case EM_CANUNDO:
@@ -1635,17 +1635,23 @@
   }
   case EM_SETTEXTEX:
   {
-    LPWSTR wszText = (LPWSTR)lParam;
+    LPWSTR wszText;
     SETTEXTEX *pStruct = (SETTEXTEX *)wParam;
-    size_t len = wszText ? lstrlenW(wszText) : 0;
+    size_t len;
     int from, to;
     ME_Style *style;
     int oldModify = editor->nModifyStep;
-    TRACE("EM_SETTEXTEX - %s, flags %d, cp %d\n", debugstr_w(wszText), (int)pStruct->flags, pStruct->codepage);
-    if (pStruct->codepage != 1200) {
-      FIXME("EM_SETTEXTEX only supports unicode right now!\n"); 
-      return 0;
-    }
+
+    if (!pStruct) return 0;
+
+    TRACE("EM_SETTEXTEX - %s, flags %d, cp %d\n",
+          pStruct->codepage == 1200 ? debugstr_w((LPCWSTR)lParam) : debugstr_a((LPCSTR)lParam),
+          pStruct->flags, pStruct->codepage);
+
+    /* FIXME: make use of pStruct->codepage in the to unicode translation */
+    wszText = lParam ? ME_ToUnicode(pStruct->codepage == 1200, (void *)lParam) : NULL;
+    len = wszText ? lstrlenW(wszText) : 0;
+
     /* FIXME: this should support RTF strings too, according to MSDN */
     if (pStruct->flags & ST_SELECTION) {
       ME_GetSelection(editor, &from, &to);
@@ -2001,7 +2007,7 @@
       nStart = 0;
       nCount = ex->cb - 1;
     }
-    if (ex->codepage == 1200 || unicode)
+    if (ex->codepage == 1200)
     {
       nCount = min(nCount, ex->cb / sizeof(WCHAR) - 1);
       return ME_GetTextW(editor, (LPWSTR)lParam, nStart, nCount, ex->flags & GT_USECRLF);
@@ -2018,6 +2024,7 @@
 
       buflen = ME_GetTextW(editor, buffer, nStart, nCount, ex->flags & GT_USECRLF);
       rc = WideCharToMultiByte(ex->codepage, flags, buffer, -1, (LPSTR)lParam, ex->cb, ex->lpDefaultChar, ex->lpUsedDefaultChar);
+      if (rc) rc--; /* do not count 0 terminator */
 
       richedit_free(buffer);
       return rc;
@@ -2183,7 +2190,7 @@
       nNextLineOfs = ME_FindItemFwd(item, diParagraphOrEnd)->member.para.nCharOfs
        - (editor->bEmulateVersion10?2:1);
     nChars = nNextLineOfs - nThisLineOfs;
-    TRACE("EM_LINELENGTH(%d)==%d\n",wParam, nChars);
+    TRACE("EM_LINELENGTH(%ld)==%d\n",wParam, nChars);
     return nChars;
   }
   case EM_EXLIMITTEXT:
@@ -2330,11 +2337,13 @@
     }
     break;
   case WM_SETFOCUS:
+    editor->bHaveFocus = TRUE;
     ME_ShowCaret(editor);
     ME_SendOldNotify(editor, EN_SETFOCUS);
     return 0;
   case WM_KILLFOCUS:
     ME_HideCaret(editor);
+    editor->bHaveFocus = FALSE;
     ME_SendOldNotify(editor, EN_KILLFOCUS);
     return 0;
   case WM_ERASEBKGND:
@@ -2507,6 +2516,64 @@
     ME_RewrapRepaint(editor);
     return DefWindowProcW(hWnd, msg, wParam, lParam);
   }
+  /* IME messages to make richedit controls IME aware */
+  case WM_IME_SETCONTEXT:
+  case WM_IME_CONTROL:
+  case WM_IME_SELECT:
+  case WM_IME_COMPOSITIONFULL:
+    return 0;
+  case WM_IME_STARTCOMPOSITION:
+  {
+    editor->imeStartIndex=ME_GetCursorOfs(editor,0);
+    ME_DeleteSelection(editor);
+    ME_CommitUndo(editor);
+    ME_UpdateRepaint(editor);
+    return 0;
+  }
+  case WM_IME_COMPOSITION:
+  {
+    HIMC hIMC;
+
+    ME_Style *style = ME_GetInsertStyle(editor, 0);
+    hIMC = ImmGetContext(hWnd);
+    ME_DeleteSelection(editor);
+    ME_CommitUndo(editor);
+    ME_SaveTempStyle(editor);
+    if (lParam & GCS_RESULTSTR)
+    {
+        LPWSTR lpCompStr = NULL;
+        DWORD dwBufLen;
+
+        dwBufLen = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);
+        lpCompStr = HeapAlloc(GetProcessHeap(),0,dwBufLen + sizeof(WCHAR));
+        ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, lpCompStr, dwBufLen);
+        lpCompStr[dwBufLen/sizeof(WCHAR)] = 0;
+        ME_InsertTextFromCursor(editor,0,lpCompStr,dwBufLen/sizeof(WCHAR),style);
+    }
+    else if (lParam & GCS_COMPSTR)
+    {
+        LPWSTR lpCompStr = NULL;
+        DWORD dwBufLen;
+
+        dwBufLen = ImmGetCompositionStringW(hIMC, GCS_COMPSTR, NULL, 0);
+        lpCompStr = HeapAlloc(GetProcessHeap(),0,dwBufLen + sizeof(WCHAR));
+        ImmGetCompositionStringW(hIMC, GCS_COMPSTR, lpCompStr, dwBufLen);
+        lpCompStr[dwBufLen/sizeof(WCHAR)] = 0;
+
+        ME_InsertTextFromCursor(editor,0,lpCompStr,dwBufLen/sizeof(WCHAR),style);
+        ME_SetSelection(editor,editor->imeStartIndex,
+                        editor->imeStartIndex + dwBufLen/sizeof(WCHAR));
+    }
+    ME_ReleaseStyle(style);
+    ME_UpdateRepaint(editor);
+    return 0;
+  }
+  case WM_IME_ENDCOMPOSITION:
+  {
+    ME_DeleteSelection(editor);
+    editor->imeStartIndex=-1;
+    return 0;
+  }
   case EM_GETOLEINTERFACE:
   {
     LPVOID *ppvObj = (LPVOID*) lParam;
@@ -2789,14 +2856,14 @@
 
 LRESULT WINAPI REComboWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
   /* FIXME: Not implemented */
-  TRACE("hWnd %p msg %04x (%s) %08x %08lx\n",
+  TRACE("hWnd %p msg %04x (%s) %08lx %08lx\n",
         hWnd, msg, get_msg_name(msg), wParam, lParam);
   return DefWindowProcW(hWnd, msg, wParam, lParam);
 }
 
 LRESULT WINAPI REListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
   /* FIXME: Not implemented */
-  TRACE("hWnd %p msg %04x (%s) %08x %08lx\n",
+  TRACE("hWnd %p msg %04x (%s) %08lx %08lx\n",
         hWnd, msg, get_msg_name(msg), wParam, lParam);
   return DefWindowProcW(hWnd, msg, wParam, lParam);
 }

Modified: trunk/reactos/dll/win32/riched20/editstr.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/editstr.h?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/editstr.h (original)
+++ trunk/reactos/dll/win32/riched20/editstr.h Fri Jul 27 14:05:21 2007
@@ -321,6 +321,9 @@
   BOOL bHideSelection;
   BOOL AutoURLDetect_bEnable;
   WCHAR cPasswordMask;
+  BOOL bHaveFocus;
+  /*for IME */
+  int imeStartIndex;
 } ME_TextEditor;
 
 typedef struct tagME_Context

Modified: trunk/reactos/dll/win32/riched20/reader.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/reader.c?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/reader.c (original)
+++ trunk/reactos/dll/win32/riched20/reader.c Fri Jul 27 14:05:21 2007
@@ -2682,7 +2682,7 @@
 RTFFlushCPOutputBuffer(RTF_Info *info)
 {
         int bufferMax = info->dwCPOutputCount * 2 * sizeof(WCHAR);
-        WCHAR *buffer = (WCHAR *)RTFAlloc(bufferMax);
+        WCHAR *buffer = RTFAlloc(bufferMax);
         int length;
 
         length = MultiByteToWideChar(info->codePage, 0, info->cpOutputBuffer,

Modified: trunk/reactos/dll/win32/riched20/riched20.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/riched20.rbuild?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/riched20.rbuild (original)
+++ trunk/reactos/dll/win32/riched20/riched20.rbuild Fri Jul 27 14:05:21 2007
@@ -10,6 +10,7 @@
 	<define name="WINVER">0x501</define>
 	<library>wine</library>
 	<library>ole32</library>
+	<library>imm32</library>
 	<library>user32</library>
 	<library>gdi32</library>
 	<library>kernel32</library>

Modified: trunk/reactos/dll/win32/riched20/string.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/string.c?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/string.c (original)
+++ trunk/reactos/dll/win32/riched20/string.c Fri Jul 27 14:05:21 2007
@@ -130,7 +130,7 @@
 
   s = ME_MakeString(orig->szData+charidx);
   orig->nLen = charidx;
-  orig->szData[charidx] = L'\0';
+  orig->szData[charidx] = '\0';
   return s;
 }
 
@@ -347,6 +347,8 @@
 
 LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz)
 {
+  assert(psz != NULL);
+
   if (unicode)
     return (LPWSTR)psz;
   else {

Modified: trunk/reactos/dll/win32/riched20/txtsrv.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/riched20/txtsrv.c?rev=27917&r1=27916&r2=27917&view=diff
==============================================================================
--- trunk/reactos/dll/win32/riched20/txtsrv.c (original)
+++ trunk/reactos/dll/win32/riched20/txtsrv.c Fri Jul 27 14:05:21 2007
@@ -28,7 +28,6 @@
 #include "editor.h"
 #include "ole2.h"
 #include "richole.h"
-#include "winreg.h"
 #include "imm.h"
 #include "textserv.h"
 #include "wine/debug.h"




More information about the Ros-diffs mailing list