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
fdc60a12
Commit
fdc60a12
authored
May 26, 2006
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user: Added fast 32->16 mapping for the listbox and combobox messages.
parent
19a1dc55
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
118 additions
and
197 deletions
+118
-197
winproc.c
dlls/user/winproc.c
+118
-197
No files found.
dlls/user/winproc.c
View file @
fdc60a12
...
...
@@ -760,132 +760,6 @@ static INT WINPROC_MapMsg32ATo16( HWND hwnd, UINT msg32, WPARAM wParam32,
*
pwparam16
=
(
WPARAM16
)
LOWORD
(
wParam32
);
switch
(
msg32
)
{
case
LB_CARETOFF
:
case
LB_CARETON
:
case
LB_DELETESTRING
:
case
LB_GETANCHORINDEX
:
case
LB_GETCARETINDEX
:
case
LB_GETCOUNT
:
case
LB_GETCURSEL
:
case
LB_GETHORIZONTALEXTENT
:
case
LB_GETITEMDATA
:
case
LB_GETITEMHEIGHT
:
case
LB_GETSEL
:
case
LB_GETSELCOUNT
:
case
LB_GETTEXTLEN
:
case
LB_GETTOPINDEX
:
case
LB_RESETCONTENT
:
case
LB_SELITEMRANGE
:
case
LB_SELITEMRANGEEX
:
case
LB_SETANCHORINDEX
:
case
LB_SETCARETINDEX
:
case
LB_SETCOLUMNWIDTH
:
case
LB_SETCURSEL
:
case
LB_SETHORIZONTALEXTENT
:
case
LB_SETITEMDATA
:
case
LB_SETITEMHEIGHT
:
case
LB_SETSEL
:
case
LB_SETTOPINDEX
:
*
pmsg16
=
(
UINT16
)
msg32
+
(
LB_ADDSTRING16
-
LB_ADDSTRING
);
return
0
;
case
CB_DELETESTRING
:
case
CB_GETCOUNT
:
case
CB_GETLBTEXTLEN
:
case
CB_LIMITTEXT
:
case
CB_RESETCONTENT
:
case
CB_SETEDITSEL
:
case
CB_GETCURSEL
:
case
CB_SETCURSEL
:
case
CB_SHOWDROPDOWN
:
case
CB_SETITEMDATA
:
case
CB_SETITEMHEIGHT
:
case
CB_GETITEMHEIGHT
:
case
CB_SETEXTENDEDUI
:
case
CB_GETEXTENDEDUI
:
case
CB_GETDROPPEDSTATE
:
*
pmsg16
=
(
UINT16
)
msg32
+
(
CB_GETEDITSEL16
-
CB_GETEDITSEL
);
return
0
;
case
CB_GETEDITSEL
:
*
pmsg16
=
CB_GETEDITSEL16
;
return
1
;
case
LB_ADDSTRING
:
case
LB_FINDSTRING
:
case
LB_FINDSTRINGEXACT
:
case
LB_INSERTSTRING
:
case
LB_SELECTSTRING
:
case
LB_DIR
:
case
LB_ADDFILE
:
*
plparam
=
(
LPARAM
)
MapLS
(
(
LPSTR
)
*
plparam
);
*
pmsg16
=
(
UINT16
)
msg32
+
(
LB_ADDSTRING16
-
LB_ADDSTRING
);
return
1
;
case
CB_ADDSTRING
:
case
CB_FINDSTRING
:
case
CB_FINDSTRINGEXACT
:
case
CB_INSERTSTRING
:
case
CB_SELECTSTRING
:
case
CB_DIR
:
*
plparam
=
(
LPARAM
)
MapLS
(
(
LPSTR
)
*
plparam
);
*
pmsg16
=
(
UINT16
)
msg32
+
(
CB_GETEDITSEL16
-
CB_GETEDITSEL
);
return
1
;
case
LB_GETITEMRECT
:
{
RECT16
*
rect
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
RECT16
)
+
sizeof
(
LPARAM
)
);
if
(
!
rect
)
return
-
1
;
*
(
LPARAM
*
)(
rect
+
1
)
=
*
plparam
;
/* Store the previous lParam */
*
plparam
=
MapLS
(
rect
);
}
*
pmsg16
=
LB_GETITEMRECT16
;
return
1
;
case
LB_GETSELITEMS
:
{
LPARAM
*
items
;
/* old LPARAM first, then *pwparam16 x INT16 entries */
*
pwparam16
=
(
WPARAM16
)
min
(
wParam32
,
0x7f80
);
/* Must be < 64K */
if
(
!
(
items
=
HeapAlloc
(
GetProcessHeap
(),
0
,
*
pwparam16
*
sizeof
(
INT16
)
+
sizeof
(
LPARAM
))))
return
-
1
;
*
items
++
=
*
plparam
;
/* Store the previous lParam */
*
plparam
=
MapLS
(
items
);
}
*
pmsg16
=
LB_GETSELITEMS16
;
return
1
;
case
LB_SETTABSTOPS
:
if
(
wParam32
)
{
INT
i
;
LPINT16
stops
;
*
pwparam16
=
(
WPARAM16
)
min
(
wParam32
,
0x7f80
);
/* Must be < 64K */
if
(
!
(
stops
=
HeapAlloc
(
GetProcessHeap
(),
0
,
*
pwparam16
*
sizeof
(
INT16
)
+
sizeof
(
LPARAM
))))
return
-
1
;
for
(
i
=
0
;
i
<
*
pwparam16
;
i
++
)
stops
[
i
]
=
*
((
LPINT
)
*
plparam
+
i
);
*
plparam
=
MapLS
(
stops
);
return
1
;
}
*
pmsg16
=
LB_SETTABSTOPS16
;
return
0
;
case
CB_GETDROPPEDCONTROLRECT
:
{
RECT16
*
rect
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
RECT16
)
+
sizeof
(
LPARAM
)
);
if
(
!
rect
)
return
-
1
;
*
(
LPARAM
*
)(
rect
+
1
)
=
*
plparam
;
/* Store the previous lParam */
*
plparam
=
(
LPARAM
)
MapLS
(
rect
);
}
*
pmsg16
=
CB_GETDROPPEDCONTROLRECT16
;
return
1
;
case
LB_GETTEXT
:
*
plparam
=
(
LPARAM
)
MapLS
(
(
LPVOID
)(
*
plparam
)
);
*
pmsg16
=
LB_GETTEXT16
;
return
1
;
case
CB_GETLBTEXT
:
*
plparam
=
(
LPARAM
)
MapLS
(
(
LPVOID
)(
*
plparam
)
);
*
pmsg16
=
CB_GETLBTEXT16
;
return
1
;
case
WM_ACTIVATE
:
case
WM_CHARTOITEM
:
case
WM_COMMAND
:
...
...
@@ -958,76 +832,6 @@ static INT WINPROC_MapMsg32ATo16( HWND hwnd, UINT msg32, WPARAM wParam32,
/**********************************************************************
* WINPROC_UnmapMsg32ATo16
*
* Unmap a message that was mapped from 32-bit Ansi to 16-bit.
*/
static
void
WINPROC_UnmapMsg32ATo16
(
HWND
hwnd
,
UINT
msg
,
WPARAM
wParam
,
LPARAM
lParam
,
WPARAM16
wParam16
,
LPARAM
lParam16
,
LRESULT
*
result
)
{
switch
(
msg
)
{
case
LB_ADDFILE
:
case
LB_ADDSTRING
:
case
LB_DIR
:
case
LB_FINDSTRING
:
case
LB_FINDSTRINGEXACT
:
case
LB_INSERTSTRING
:
case
LB_SELECTSTRING
:
case
LB_GETTEXT
:
case
CB_ADDSTRING
:
case
CB_FINDSTRING
:
case
CB_FINDSTRINGEXACT
:
case
CB_INSERTSTRING
:
case
CB_SELECTSTRING
:
case
CB_DIR
:
case
CB_GETLBTEXT
:
UnMapLS
(
(
SEGPTR
)
lParam16
);
break
;
case
LB_SETTABSTOPS
:
{
void
*
ptr
=
MapSL
(
lParam16
);
UnMapLS
(
lParam16
);
HeapFree
(
GetProcessHeap
(),
0
,
ptr
);
}
break
;
case
CB_GETDROPPEDCONTROLRECT
:
case
LB_GETITEMRECT
:
{
RECT
*
r32
;
RECT16
*
rect
=
MapSL
(
lParam16
);
UnMapLS
(
lParam16
);
lParam16
=
*
(
LPARAM
*
)(
rect
+
1
);
r32
=
(
RECT
*
)
lParam16
;
r32
->
left
=
rect
->
left
;
r32
->
top
=
rect
->
top
;
r32
->
right
=
rect
->
right
;
r32
->
bottom
=
rect
->
bottom
;
HeapFree
(
GetProcessHeap
(),
0
,
rect
);
}
break
;
case
LB_GETSELITEMS
:
{
INT
i
;
LPINT16
items
=
MapSL
(
lParam16
);
UnMapLS
(
lParam16
);
lParam16
=
*
((
LPARAM
*
)
items
-
1
);
for
(
i
=
0
;
i
<
wParam16
;
i
++
)
*
((
LPINT
)
lParam16
+
i
)
=
items
[
i
];
HeapFree
(
GetProcessHeap
(),
0
,
(
LPARAM
*
)
items
-
1
);
}
break
;
case
CB_GETEDITSEL
:
if
(
wParam
)
*
((
PUINT
)(
wParam
))
=
LOWORD
(
*
result
);
if
(
lParam
)
*
((
PUINT
)(
lParam
))
=
HIWORD
(
*
result
);
/* FIXME: substract 1? */
break
;
}
}
/**********************************************************************
* WINPROC_CallProcAtoW
*
* Call a window procedure, translating args from Ansi to Unicode.
...
...
@@ -2242,6 +2046,124 @@ LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT
case
EM_SETSEL
:
ret
=
callback
(
HWND_16
(
hwnd
),
EM_SETSEL16
,
0
,
MAKELPARAM
(
wParam
,
lParam
),
result
,
arg
);
break
;
case
LB_CARETOFF
:
case
LB_CARETON
:
case
LB_DELETESTRING
:
case
LB_GETANCHORINDEX
:
case
LB_GETCARETINDEX
:
case
LB_GETCOUNT
:
case
LB_GETCURSEL
:
case
LB_GETHORIZONTALEXTENT
:
case
LB_GETITEMDATA
:
case
LB_GETITEMHEIGHT
:
case
LB_GETSEL
:
case
LB_GETSELCOUNT
:
case
LB_GETTEXTLEN
:
case
LB_GETTOPINDEX
:
case
LB_RESETCONTENT
:
case
LB_SELITEMRANGE
:
case
LB_SELITEMRANGEEX
:
case
LB_SETANCHORINDEX
:
case
LB_SETCARETINDEX
:
case
LB_SETCOLUMNWIDTH
:
case
LB_SETCURSEL
:
case
LB_SETHORIZONTALEXTENT
:
case
LB_SETITEMDATA
:
case
LB_SETITEMHEIGHT
:
case
LB_SETSEL
:
case
LB_SETTOPINDEX
:
ret
=
callback
(
HWND_16
(
hwnd
),
msg
+
LB_ADDSTRING16
-
LB_ADDSTRING
,
wParam
,
lParam
,
result
,
arg
);
break
;
case
LB_ADDSTRING
:
case
LB_FINDSTRING
:
case
LB_FINDSTRINGEXACT
:
case
LB_INSERTSTRING
:
case
LB_SELECTSTRING
:
case
LB_GETTEXT
:
case
LB_DIR
:
case
LB_ADDFILE
:
lParam
=
MapLS
(
(
LPSTR
)
lParam
);
ret
=
callback
(
HWND_16
(
hwnd
),
msg
+
LB_ADDSTRING16
-
LB_ADDSTRING
,
wParam
,
lParam
,
result
,
arg
);
UnMapLS
(
lParam
);
break
;
case
LB_GETSELITEMS
:
{
INT
*
items32
=
(
INT
*
)
lParam
;
INT16
*
items
,
buffer
[
512
];
unsigned
int
i
;
wParam
=
min
(
wParam
,
0x7f80
);
/* Must be < 64K */
if
(
!
(
items
=
get_buffer
(
buffer
,
sizeof
(
buffer
),
wParam
*
sizeof
(
INT16
)
)))
break
;
lParam
=
MapLS
(
items
);
ret
=
callback
(
HWND_16
(
hwnd
),
LB_GETSELITEMS16
,
wParam
,
lParam
,
result
,
arg
);
UnMapLS
(
lParam
);
for
(
i
=
0
;
i
<
wParam
;
i
++
)
items32
[
i
]
=
items
[
i
];
free_buffer
(
buffer
,
items
);
}
break
;
case
LB_SETTABSTOPS
:
if
(
wParam
)
{
INT
*
stops32
=
(
INT
*
)
lParam
;
INT16
*
stops
,
buffer
[
512
];
unsigned
int
i
;
wParam
=
min
(
wParam
,
0x7f80
);
/* Must be < 64K */
if
(
!
(
stops
=
get_buffer
(
buffer
,
sizeof
(
buffer
),
wParam
*
sizeof
(
INT16
)
)))
break
;
for
(
i
=
0
;
i
<
wParam
;
i
++
)
stops
[
i
]
=
stops32
[
i
];
lParam
=
MapLS
(
stops
);
ret
=
callback
(
HWND_16
(
hwnd
),
LB_SETTABSTOPS16
,
wParam
,
lParam
,
result
,
arg
);
UnMapLS
(
lParam
);
free_buffer
(
buffer
,
stops
);
}
else
ret
=
callback
(
HWND_16
(
hwnd
),
LB_SETTABSTOPS16
,
wParam
,
lParam
,
result
,
arg
);
break
;
case
CB_DELETESTRING
:
case
CB_GETCOUNT
:
case
CB_GETLBTEXTLEN
:
case
CB_LIMITTEXT
:
case
CB_RESETCONTENT
:
case
CB_SETEDITSEL
:
case
CB_GETCURSEL
:
case
CB_SETCURSEL
:
case
CB_SHOWDROPDOWN
:
case
CB_SETITEMDATA
:
case
CB_SETITEMHEIGHT
:
case
CB_GETITEMHEIGHT
:
case
CB_SETEXTENDEDUI
:
case
CB_GETEXTENDEDUI
:
case
CB_GETDROPPEDSTATE
:
ret
=
callback
(
HWND_16
(
hwnd
),
msg
+
CB_GETEDITSEL16
-
CB_GETEDITSEL
,
wParam
,
lParam
,
result
,
arg
);
break
;
case
CB_GETEDITSEL
:
ret
=
callback
(
HWND_16
(
hwnd
),
CB_GETEDITSEL16
,
wParam
,
lParam
,
result
,
arg
);
if
(
wParam
)
*
((
PUINT
)(
wParam
))
=
LOWORD
(
*
result
);
if
(
lParam
)
*
((
PUINT
)(
lParam
))
=
HIWORD
(
*
result
);
/* FIXME: substract 1? */
break
;
case
CB_ADDSTRING
:
case
CB_FINDSTRING
:
case
CB_FINDSTRINGEXACT
:
case
CB_INSERTSTRING
:
case
CB_SELECTSTRING
:
case
CB_DIR
:
case
CB_GETLBTEXT
:
lParam
=
MapLS
(
(
LPSTR
)
lParam
);
ret
=
callback
(
HWND_16
(
hwnd
),
msg
+
CB_GETEDITSEL16
-
CB_GETEDITSEL
,
wParam
,
lParam
,
result
,
arg
);
UnMapLS
(
lParam
);
break
;
case
LB_GETITEMRECT
:
case
CB_GETDROPPEDCONTROLRECT
:
{
RECT
*
r32
=
(
RECT
*
)
lParam
;
RECT16
rect
;
lParam
=
MapLS
(
&
rect
);
ret
=
callback
(
HWND_16
(
hwnd
),
(
msg
==
LB_GETITEMRECT
)
?
LB_GETITEMRECT16
:
CB_GETDROPPEDCONTROLRECT16
,
wParam
,
lParam
,
result
,
arg
);
UnMapLS
(
lParam
);
RECT16to32
(
&
rect
,
r32
);
}
break
;
default:
{
UINT16
msg16
;
...
...
@@ -2250,7 +2172,6 @@ LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT
if
(
WINPROC_MapMsg32ATo16
(
hwnd
,
msg
,
wParam
,
&
msg16
,
&
wParam16
,
&
lParam16
)
!=
-
1
)
{
ret
=
callback
(
HWND_16
(
hwnd
),
msg16
,
wParam16
,
lParam16
,
result
,
arg
);
WINPROC_UnmapMsg32ATo16
(
hwnd
,
msg
,
wParam
,
lParam
,
wParam16
,
lParam16
,
result
);
}
}
break
;
...
...
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