winex11: Update caret position.
This commit is contained in:
parent
d79dff4e30
commit
bb8d1ca672
|
@ -1012,6 +1012,32 @@ INT IME_GetCursorPos()
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IME_SetCursorPos(DWORD pos)
|
||||||
|
{
|
||||||
|
LPINPUTCONTEXT lpIMC;
|
||||||
|
LPCOMPOSITIONSTRING compstr;
|
||||||
|
|
||||||
|
if (!hSelectedFrom)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lpIMC = LockRealIMC(FROM_X11);
|
||||||
|
if (!lpIMC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
compstr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
|
||||||
|
if (!compstr)
|
||||||
|
{
|
||||||
|
UnlockRealIMC(FROM_X11);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
compstr->dwCursorPos = pos;
|
||||||
|
ImmUnlockIMCC(lpIMC->hCompStr);
|
||||||
|
UnlockRealIMC(FROM_X11);
|
||||||
|
GenerateIMEMessage(FROM_X11, WM_IME_COMPOSITION, pos, GCS_CURSORPOS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void IME_UpdateAssociation(HWND focus)
|
void IME_UpdateAssociation(HWND focus)
|
||||||
{
|
{
|
||||||
ImmGetContext(focus);
|
ImmGetContext(focus);
|
||||||
|
|
|
@ -280,6 +280,7 @@ extern void IME_SetOpenStatus(BOOL fOpen);
|
||||||
extern void IME_XIMPresent(BOOL present);
|
extern void IME_XIMPresent(BOOL present);
|
||||||
extern LRESULT IME_SendMessageToSelectedHWND(UINT msg, WPARAM wParam, LPARAM lParam);
|
extern LRESULT IME_SendMessageToSelectedHWND(UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
extern INT IME_GetCursorPos();
|
extern INT IME_GetCursorPos();
|
||||||
|
extern void IME_SetCursorPos(DWORD pos);
|
||||||
extern void IME_UpdateAssociation(HWND focus);
|
extern void IME_UpdateAssociation(HWND focus);
|
||||||
extern BOOL IME_SetCompositionString(DWORD dwIndex, LPCVOID lpComp,
|
extern BOOL IME_SetCompositionString(DWORD dwIndex, LPCVOID lpComp,
|
||||||
DWORD dwCompLen, LPCVOID lpRead,
|
DWORD dwCompLen, LPCVOID lpRead,
|
||||||
|
|
|
@ -48,7 +48,6 @@ static LPBYTE CompositionString = NULL;
|
||||||
static DWORD dwCompStringSize = 0;
|
static DWORD dwCompStringSize = 0;
|
||||||
static LPBYTE ResultString = NULL;
|
static LPBYTE ResultString = NULL;
|
||||||
static DWORD dwResultStringSize = 0;
|
static DWORD dwResultStringSize = 0;
|
||||||
static DWORD dwPreeditPos = 0;
|
|
||||||
|
|
||||||
#define STYLE_OFFTHESPOT (XIMPreeditArea | XIMStatusArea)
|
#define STYLE_OFFTHESPOT (XIMPreeditArea | XIMStatusArea)
|
||||||
#define STYLE_OVERTHESPOT (XIMPreeditPosition | XIMStatusNothing)
|
#define STYLE_OVERTHESPOT (XIMPreeditPosition | XIMStatusNothing)
|
||||||
|
@ -216,7 +215,6 @@ static int XIMPreEditStartCallback(XIC ic, XPointer client_data, XPointer call_d
|
||||||
TRACE("PreEditStartCallback %p\n",ic);
|
TRACE("PreEditStartCallback %p\n",ic);
|
||||||
X11DRV_ImmSetOpenStatus(TRUE);
|
X11DRV_ImmSetOpenStatus(TRUE);
|
||||||
ximInComposeMode = TRUE;
|
ximInComposeMode = TRUE;
|
||||||
IME_SendMessageToSelectedHWND(EM_GETSEL, 0, (LPARAM)&dwPreeditPos);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +223,6 @@ static void XIMPreEditDoneCallback(XIC ic, XPointer client_data, XPointer call_d
|
||||||
TRACE("PreeditDoneCallback %p\n",ic);
|
TRACE("PreeditDoneCallback %p\n",ic);
|
||||||
ximInComposeMode = FALSE;
|
ximInComposeMode = FALSE;
|
||||||
X11DRV_ImmSetOpenStatus(FALSE);
|
X11DRV_ImmSetOpenStatus(FALSE);
|
||||||
dwPreeditPos = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void XIMPreEditDrawCallback(XIM ic, XPointer client_data,
|
static void XIMPreEditDrawCallback(XIM ic, XPointer client_data,
|
||||||
|
@ -271,6 +268,7 @@ static void XIMPreEditDrawCallback(XIM ic, XPointer client_data,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
X11DRV_ImmSetInternalString (GCS_COMPSTR, sel, len, NULL, 0);
|
X11DRV_ImmSetInternalString (GCS_COMPSTR, sel, len, NULL, 0);
|
||||||
|
IME_SetCursorPos(P_DR->caret);
|
||||||
}
|
}
|
||||||
TRACE("Finished\n");
|
TRACE("Finished\n");
|
||||||
}
|
}
|
||||||
|
@ -311,8 +309,7 @@ static void XIMPreEditCaretCallback(XIC ic, XPointer client_data,
|
||||||
FIXME("Not implemented\n");
|
FIXME("Not implemented\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
IME_SendMessageToSelectedHWND( EM_SETSEL, dwPreeditPos + pos,
|
IME_SetCursorPos(pos);
|
||||||
dwPreeditPos + pos);
|
|
||||||
P_C->position = pos;
|
P_C->position = pos;
|
||||||
}
|
}
|
||||||
TRACE("Finished\n");
|
TRACE("Finished\n");
|
||||||
|
|
Loading…
Reference in New Issue