Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
bf85df3f
Commit
bf85df3f
authored
May 21, 2013
by
Huw Davies
Committed by
Alexandre Julliard
May 21, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32: Move back to using WC<->MB in order to specify an alternative codepage.
parent
aaa680bf
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
14 deletions
+21
-14
message.c
dlls/user32/message.c
+16
-10
user_private.h
dlls/user32/user_private.h
+1
-0
winproc.c
dlls/user32/winproc.c
+4
-4
No files found.
dlls/user32/message.c
View file @
bf85df3f
...
...
@@ -584,6 +584,10 @@ static BOOL CALLBACK broadcast_message_callback( HWND hwnd, LPARAM lparam )
return
TRUE
;
}
DWORD
get_input_codepage
(
void
)
{
return
CP_ACP
;
}
/***********************************************************************
* map_wparam_AtoW
...
...
@@ -594,6 +598,7 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
{
char
ch
[
2
];
WCHAR
wch
[
2
];
DWORD
cp
=
get_input_codepage
();
wch
[
0
]
=
wch
[
1
]
=
0
;
switch
(
message
)
...
...
@@ -612,7 +617,7 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
{
ch
[
0
]
=
low
;
ch
[
1
]
=
HIBYTE
(
*
wparam
);
RtlMultiByteToUnicodeN
(
wch
,
sizeof
(
wch
),
NULL
,
ch
,
2
);
MultiByteToWideChar
(
cp
,
0
,
ch
,
2
,
w
ch
,
2
);
TRACE
(
"map %02x,%02x -> %04x mapping %u
\n
"
,
(
BYTE
)
ch
[
0
],
(
BYTE
)
ch
[
1
],
wch
[
0
],
mapping
);
if
(
data
)
data
->
lead_byte
[
mapping
]
=
0
;
}
...
...
@@ -620,14 +625,14 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
{
ch
[
0
]
=
data
->
lead_byte
[
mapping
];
ch
[
1
]
=
low
;
RtlMultiByteToUnicodeN
(
wch
,
sizeof
(
wch
),
NULL
,
ch
,
2
);
MultiByteToWideChar
(
cp
,
0
,
ch
,
2
,
w
ch
,
2
);
TRACE
(
"map stored %02x,%02x -> %04x mapping %u
\n
"
,
(
BYTE
)
ch
[
0
],
(
BYTE
)
ch
[
1
],
wch
[
0
],
mapping
);
data
->
lead_byte
[
mapping
]
=
0
;
}
else
if
(
!
IsDBCSLeadByte
(
low
))
{
ch
[
0
]
=
low
;
RtlMultiByteToUnicodeN
(
wch
,
sizeof
(
wch
),
NULL
,
ch
,
1
);
MultiByteToWideChar
(
cp
,
0
,
ch
,
1
,
wch
,
2
);
TRACE
(
"map %02x -> %04x
\n
"
,
(
BYTE
)
ch
[
0
],
wch
[
0
]
);
if
(
data
)
data
->
lead_byte
[
mapping
]
=
0
;
}
...
...
@@ -655,14 +660,14 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
case
WM_MENUCHAR
:
ch
[
0
]
=
LOBYTE
(
*
wparam
);
ch
[
1
]
=
HIBYTE
(
*
wparam
);
RtlMultiByteToUnicodeN
(
wch
,
sizeof
(
wch
),
NULL
,
ch
,
2
);
MultiByteToWideChar
(
cp
,
0
,
ch
,
2
,
w
ch
,
2
);
*
wparam
=
MAKEWPARAM
(
wch
[
0
],
wch
[
1
]);
break
;
case
WM_IME_CHAR
:
ch
[
0
]
=
HIBYTE
(
*
wparam
);
ch
[
1
]
=
LOBYTE
(
*
wparam
);
if
(
ch
[
0
])
RtlMultiByteToUnicodeN
(
wch
,
sizeof
(
wch
[
0
]),
NULL
,
ch
,
2
);
else
RtlMultiByteToUnicodeN
(
wch
,
sizeof
(
wch
[
0
]),
NULL
,
ch
+
1
,
1
);
if
(
ch
[
0
])
MultiByteToWideChar
(
cp
,
0
,
ch
,
2
,
w
ch
,
2
);
else
MultiByteToWideChar
(
cp
,
0
,
ch
+
1
,
1
,
wch
,
1
);
*
wparam
=
MAKEWPARAM
(
wch
[
0
],
HIWORD
(
*
wparam
));
break
;
}
...
...
@@ -677,9 +682,10 @@ BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping
*/
static
void
map_wparam_WtoA
(
MSG
*
msg
,
BOOL
remove
)
{
BYTE
ch
[
2
];
BYTE
ch
[
4
];
WCHAR
wch
[
2
];
DWORD
len
;
DWORD
cp
=
get_input_codepage
();
switch
(
msg
->
message
)
{
...
...
@@ -688,7 +694,7 @@ static void map_wparam_WtoA( MSG *msg, BOOL remove )
{
wch
[
0
]
=
LOWORD
(
msg
->
wParam
);
ch
[
0
]
=
ch
[
1
]
=
0
;
RtlUnicodeToMultiByteN
(
(
LPSTR
)
ch
,
2
,
&
len
,
wch
,
sizeof
(
wch
[
0
])
);
len
=
WideCharToMultiByte
(
cp
,
0
,
wch
,
1
,
(
LPSTR
)
ch
,
2
,
NULL
,
NULL
);
if
(
len
==
2
)
/* DBCS char */
{
struct
wm_char_mapping_data
*
data
=
get_user_thread_info
()
->
wmchar_data
;
...
...
@@ -716,13 +722,13 @@ static void map_wparam_WtoA( MSG *msg, BOOL remove )
wch
[
0
]
=
LOWORD
(
msg
->
wParam
);
wch
[
1
]
=
HIWORD
(
msg
->
wParam
);
ch
[
0
]
=
ch
[
1
]
=
0
;
RtlUnicodeToMultiByteN
(
(
LPSTR
)
ch
,
2
,
NULL
,
wch
,
sizeof
(
wch
)
);
WideCharToMultiByte
(
cp
,
0
,
wch
,
2
,
(
LPSTR
)
ch
,
4
,
NULL
,
NULL
);
msg
->
wParam
=
MAKEWPARAM
(
ch
[
0
]
|
(
ch
[
1
]
<<
8
),
0
);
break
;
case
WM_IME_CHAR
:
wch
[
0
]
=
LOWORD
(
msg
->
wParam
);
ch
[
0
]
=
ch
[
1
]
=
0
;
RtlUnicodeToMultiByteN
(
(
LPSTR
)
ch
,
2
,
&
len
,
wch
,
sizeof
(
wch
[
0
])
);
len
=
WideCharToMultiByte
(
cp
,
0
,
wch
,
1
,
(
LPSTR
)
ch
,
2
,
NULL
,
NULL
);
if
(
len
==
2
)
msg
->
wParam
=
MAKEWPARAM
(
(
ch
[
0
]
<<
8
)
|
ch
[
1
],
HIWORD
(
msg
->
wParam
)
);
else
...
...
dlls/user32/user_private.h
View file @
bf85df3f
...
...
@@ -227,6 +227,7 @@ extern void move_window_bits( HWND hwnd, struct window_surface *old_surface,
extern
void
*
get_hook_proc
(
void
*
proc
,
const
WCHAR
*
module
)
DECLSPEC_HIDDEN
;
extern
RECT
get_virtual_screen_rect
(
void
)
DECLSPEC_HIDDEN
;
extern
LRESULT
call_current_hook
(
HHOOK
hhook
,
INT
code
,
WPARAM
wparam
,
LPARAM
lparam
)
DECLSPEC_HIDDEN
;
extern
DWORD
get_input_codepage
(
void
)
DECLSPEC_HIDDEN
;
extern
BOOL
map_wparam_AtoW
(
UINT
message
,
WPARAM
*
wparam
,
enum
wm_char_mapping
mapping
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
send_hardware_message
(
HWND
hwnd
,
const
INPUT
*
input
,
UINT
flags
)
DECLSPEC_HIDDEN
;
extern
LRESULT
MSG_SendInternalMessageTimeout
(
DWORD
dest_pid
,
DWORD
dest_tid
,
...
...
dlls/user32/winproc.c
View file @
bf85df3f
...
...
@@ -220,8 +220,9 @@ static WPARAM map_wparam_char_WtoA( WPARAM wParam, DWORD len )
{
WCHAR
wch
=
wParam
;
BYTE
ch
[
2
];
DWORD
cp
=
get_input_codepage
();
RtlUnicodeToMultiByteN
(
(
LPSTR
)
ch
,
len
,
&
len
,
&
wch
,
sizeof
(
wch
)
);
len
=
WideCharToMultiByte
(
cp
,
0
,
&
wch
,
1
,
(
LPSTR
)
ch
,
len
,
NULL
,
NULL
);
if
(
len
==
2
)
return
MAKEWPARAM
(
(
ch
[
0
]
<<
8
)
|
ch
[
1
],
HIWORD
(
wParam
)
);
else
...
...
@@ -827,9 +828,8 @@ static LRESULT WINPROC_CallProcWtoA( winproc_callback_t callback, HWND hwnd, UIN
{
WCHAR
wch
=
wParam
;
char
ch
[
2
];
DWORD
len
;
RtlUnicodeToMultiByteN
(
ch
,
2
,
&
len
,
&
wch
,
sizeof
(
wch
)
);
DWORD
cp
=
get_input_codepage
();
DWORD
len
=
WideCharToMultiByte
(
cp
,
0
,
&
wch
,
1
,
ch
,
2
,
NULL
,
NULL
);
ret
=
callback
(
hwnd
,
msg
,
(
BYTE
)
ch
[
0
],
lParam
,
result
,
arg
);
if
(
len
==
2
)
ret
=
callback
(
hwnd
,
msg
,
(
BYTE
)
ch
[
1
],
lParam
,
result
,
arg
);
}
...
...
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