Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
3739dcd6
Commit
3739dcd6
authored
Feb 12, 2010
by
Kusanagi Kouichi
Committed by
Alexandre Julliard
Feb 12, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11.drv: Simplify X11DRV_ImmSetInternalString.
parent
af088286
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
94 deletions
+31
-94
xim.c
dlls/winex11.drv/xim.c
+31
-94
No files found.
dlls/winex11.drv/xim.c
View file @
3739dcd6
...
...
@@ -58,112 +58,45 @@ static XIMStyle ximStyle = 0;
static
XIMStyle
ximStyleRoot
=
0
;
static
XIMStyle
ximStyleRequest
=
STYLE_CALLBACK
;
static
BOOL
X11DRV_ImmSetInternalString
(
DWORD
dwIndex
,
DWORD
dwOffset
,
static
void
X11DRV_ImmSetInternalString
(
DWORD
dwOffset
,
DWORD
selLength
,
LPWSTR
lpComp
,
DWORD
dwCompLen
)
{
/* Composition strings are edited in chunks */
unsigned
int
byte_length
=
dwCompLen
*
sizeof
(
WCHAR
);
unsigned
int
byte_offset
=
dwOffset
*
sizeof
(
WCHAR
);
unsigned
int
byte_selection
=
selLength
*
sizeof
(
WCHAR
);
BOOL
rc
=
FALSE
;
int
byte_expansion
=
byte_length
-
byte_selection
;
LPBYTE
ptr_new
;
TRACE
(
"( %i, %i, %
d, %p, %d):
\n
"
,
dwOffset
,
selLength
,
dwIndex
,
lpComp
,
dwCompLen
);
TRACE
(
"( %i, %i, %
p, %d):
\n
"
,
dwOffset
,
selLength
,
lpComp
,
dwCompLen
);
if
(
dwIndex
==
GCS_COMPSTR
)
if
(
byte_expansion
+
dwCompStringLength
>=
dwCompStringSize
)
{
unsigned
int
i
,
j
;
LPBYTE
ptr_new
;
LPBYTE
ptr_old
;
if
((
dwCompLen
==
0
)
&&
(
selLength
==
0
))
{
/* DO Nothing */
}
/* deletion occurred */
else
if
((
dwCompLen
==
0
)
&&
(
selLength
!=
0
))
{
if
(
dwCompStringLength
)
{
for
(
i
=
0
;
i
<
byte_selection
;
i
++
)
{
if
(
byte_offset
+
byte_selection
+
i
<
dwCompStringLength
)
{
CompositionString
[
byte_offset
+
i
]
=
CompositionString
[
byte_offset
+
byte_selection
+
i
];
}
else
CompositionString
[
byte_offset
+
i
]
=
0
;
}
/* clean up the end */
dwCompStringLength
-=
byte_selection
;
i
=
dwCompStringLength
;
while
(
i
<
dwCompStringSize
)
{
CompositionString
[
i
++
]
=
0
;
}
}
}
if
(
CompositionString
)
ptr_new
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
CompositionString
,
dwCompStringSize
+
byte_expansion
);
else
{
int
byte_expansion
=
byte_length
-
byte_selection
;
if
(
byte_expansion
+
dwCompStringLength
>=
dwCompStringSize
)
{
if
(
CompositionString
)
CompositionString
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
CompositionString
,
dwCompStringSize
+
byte_expansion
);
else
CompositionString
=
HeapAlloc
(
GetProcessHeap
(),
0
,
dwCompStringSize
+
byte_expansion
);
memset
(
&
(
CompositionString
[
dwCompStringSize
]),
0
,
byte_expansion
);
dwCompStringSize
+=
byte_expansion
;
}
ptr_new
=
((
LPBYTE
)
lpComp
);
ptr_old
=
CompositionString
+
byte_offset
+
byte_selection
;
dwCompStringLength
+=
byte_expansion
;
ptr_new
=
HeapAlloc
(
GetProcessHeap
(),
0
,
dwCompStringSize
+
byte_expansion
);
for
(
j
=
0
,
i
=
byte_offset
;
i
<
dwCompStringSize
;
i
++
)
{
if
(
j
<
byte_length
)
{
CompositionString
[
i
]
=
ptr_new
[
j
++
];
}
else
{
if
(
ptr_old
<
CompositionString
+
dwCompStringSize
)
{
CompositionString
[
i
]
=
*
ptr_old
;
ptr_old
++
;
}
else
CompositionString
[
i
]
=
0
;
}
}
if
(
ptr_new
==
NULL
)
{
ERR
(
"Couldn't expand composition string buffer
\n
"
);
return
;
}
rc
=
IME_SetCompositionString
(
SCS_SETSTR
,
CompositionString
,
dwCompStringLength
,
NULL
,
0
)
;
CompositionString
=
ptr_new
;
dwCompStringSize
+=
byte_expansion
;
}
else
if
((
dwIndex
==
GCS_RESULTSTR
)
&&
(
lpComp
)
&&
(
dwCompLen
))
{
rc
=
IME_SetCompositionString
(
SCS_SETSTR
,
lpComp
,
byte_length
,
NULL
,
0
);
IME_NotifyIME
(
NI_COMPOSITIONSTR
,
CPS_COMPLETE
,
0
);
}
ptr_new
=
CompositionString
+
byte_offset
;
memmove
(
ptr_new
+
byte_length
,
ptr_new
+
byte_selection
,
dwCompStringLength
-
byte_offset
-
byte_selection
);
memcpy
(
ptr_new
,
lpComp
,
byte_length
);
dwCompStringLength
+=
byte_expansion
;
return
rc
;
IME_SetCompositionString
(
SCS_SETSTR
,
CompositionString
,
dwCompStringLength
,
NULL
,
0
);
}
void
X11DRV_XIMLookupChars
(
const
char
*
str
,
DWORD
count
)
...
...
@@ -172,6 +105,8 @@ void X11DRV_XIMLookupChars( const char *str, DWORD count )
WCHAR
*
wcOutput
;
HWND
focus
;
TRACE
(
"%p %u
\n
"
,
str
,
count
);
dwOutput
=
MultiByteToWideChar
(
CP_UNIXCP
,
0
,
str
,
count
,
NULL
,
0
);
wcOutput
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WCHAR
)
*
dwOutput
);
if
(
wcOutput
==
NULL
)
...
...
@@ -181,7 +116,9 @@ void X11DRV_XIMLookupChars( const char *str, DWORD count )
if
((
focus
=
GetFocus
()))
IME_UpdateAssociation
(
focus
);
X11DRV_ImmSetInternalString
(
GCS_RESULTSTR
,
0
,
0
,
wcOutput
,
dwOutput
);
IME_SetCompositionString
(
SCS_SETSTR
,
wcOutput
,
sizeof
(
WCHAR
)
*
dwOutput
,
NULL
,
0
);
IME_NotifyIME
(
NI_COMPOSITIONSTR
,
CPS_COMPLETE
,
0
);
HeapFree
(
GetProcessHeap
(),
0
,
wcOutput
);
}
...
...
@@ -244,20 +181,20 @@ static void XIMPreEditDrawCallback(XIM ic, XPointer client_data,
/* ignore null */
dwOutput
--
;
X11DRV_ImmSetInternalString
(
GCS_COMPSTR
,
sel
,
len
,
wcOutput
,
dwOutput
);
X11DRV_ImmSetInternalString
(
sel
,
len
,
wcOutput
,
dwOutput
);
HeapFree
(
GetProcessHeap
(),
0
,
wcOutput
);
}
}
else
{
FIXME
(
"wchar PROBIBILY WRONG
\n
"
);
X11DRV_ImmSetInternalString
(
GCS_COMPSTR
,
sel
,
len
,
X11DRV_ImmSetInternalString
(
sel
,
len
,
(
LPWSTR
)
P_DR
->
text
->
string
.
wide_char
,
P_DR
->
text
->
length
);
}
}
else
X11DRV_ImmSetInternalString
(
GCS_COMPSTR
,
sel
,
len
,
NULL
,
0
);
X11DRV_ImmSetInternalString
(
sel
,
len
,
NULL
,
0
);
IME_SetCursorPos
(
P_DR
->
caret
);
}
TRACE
(
"Finished
\n
"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment