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
48441212
Commit
48441212
authored
Jul 03, 2022
by
Jacek Caban
Committed by
Alexandre Julliard
Jul 05, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
win32u: Move scroll bar proc implementation from user32.
parent
9d3058aa
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
88 additions
and
64 deletions
+88
-64
scroll.c
dlls/user32/scroll.c
+1
-64
scroll.c
dlls/win32u/scroll.c
+87
-0
No files found.
dlls/user32/scroll.c
View file @
48441212
...
...
@@ -311,42 +311,6 @@ void WINAPI USER_ScrollBarDraw( HWND hwnd, HDC hdc, INT nBar, enum SCROLL_HITTES
}
}
/***********************************************************************
* SCROLL_HandleKbdEvent
*
* Handle a keyboard event (only for SB_CTL scrollbars with focus).
*
* PARAMS
* hwnd [I] Handle of window with scrollbar(s)
* wParam [I] Variable input including enable state
* lParam [I] Variable input including input point
*/
static
void
SCROLL_HandleKbdEvent
(
HWND
hwnd
,
WPARAM
wParam
,
LPARAM
lParam
)
{
TRACE
(
"hwnd=%p wParam=%Id lParam=%Id
\n
"
,
hwnd
,
wParam
,
lParam
);
/* hide caret on first KEYDOWN to prevent flicker */
if
((
lParam
&
PFD_DOUBLEBUFFER_DONTCARE
)
==
0
)
NtUserHideCaret
(
hwnd
);
switch
(
wParam
)
{
case
VK_PRIOR
:
wParam
=
SB_PAGEUP
;
break
;
case
VK_NEXT
:
wParam
=
SB_PAGEDOWN
;
break
;
case
VK_HOME
:
wParam
=
SB_TOP
;
break
;
case
VK_END
:
wParam
=
SB_BOTTOM
;
break
;
case
VK_UP
:
wParam
=
SB_LINEUP
;
break
;
case
VK_DOWN
:
wParam
=
SB_LINEDOWN
;
break
;
case
VK_LEFT
:
wParam
=
SB_LINEUP
;
break
;
case
VK_RIGHT
:
wParam
=
SB_LINEDOWN
;
break
;
default:
return
;
}
SendMessageW
(
GetParent
(
hwnd
),
((
GetWindowLongW
(
hwnd
,
GWL_STYLE
)
&
SBS_VERT
)
?
WM_VSCROLL
:
WM_HSCROLL
),
wParam
,
(
LPARAM
)
hwnd
);
}
/*************************************************************************
* SCROLL_GetScrollPos
*
...
...
@@ -391,18 +355,10 @@ static BOOL SCROLL_GetScrollRange(HWND hwnd, INT nBar, LPINT lpMin, LPINT lpMax)
LRESULT
WINAPI
USER_ScrollBarProc
(
HWND
hwnd
,
UINT
message
,
WPARAM
wParam
,
LPARAM
lParam
,
BOOL
unicode
)
{
if
(
!
IsWindow
(
hwnd
))
return
0
;
switch
(
message
)
{
case
WM_KEYDOWN
:
SCROLL_HandleKbdEvent
(
hwnd
,
wParam
,
lParam
);
break
;
case
WM_KEYUP
:
NtUserShowCaret
(
hwnd
);
break
;
case
WM_ENABLE
:
case
WM_SETFOCUS
:
case
WM_KILLFOCUS
:
...
...
@@ -415,28 +371,11 @@ LRESULT WINAPI USER_ScrollBarProc( HWND hwnd, UINT message, WPARAM wParam, LPARA
case
SBM_GETSCROLLINFO
:
case
SBM_GETSCROLLBARINFO
:
case
SBM_SETSCROLLINFO
:
return
NtUserMessageCall
(
hwnd
,
message
,
wParam
,
lParam
,
0
,
NtUserScrollBarWndProc
,
!
unicode
);
case
WM_SETCURSOR
:
if
(
GetWindowLongW
(
hwnd
,
GWL_STYLE
)
&
SBS_SIZEGRIP
)
{
ULONG_PTR
cursor
=
(
GetWindowLongW
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_LAYOUTRTL
)
?
IDC_SIZENESW
:
IDC_SIZENWSE
;
return
(
LRESULT
)
NtUserSetCursor
(
LoadCursorA
(
0
,
(
LPSTR
)
cursor
));
}
return
DefWindowProcW
(
hwnd
,
message
,
wParam
,
lParam
);
case
SBM_SETPOS
:
return
SetScrollPos
(
hwnd
,
SB_CTL
,
wParam
,
(
BOOL
)
lParam
);
case
SBM_GETPOS
:
return
SCROLL_GetScrollPos
(
hwnd
,
SB_CTL
);
case
SBM_GETRANGE
:
return
SCROLL_GetScrollRange
(
hwnd
,
SB_CTL
,
(
LPINT
)
wParam
,
(
LPINT
)
lParam
);
case
SBM_ENABLE_ARROWS
:
return
NtUserEnableScrollBar
(
hwnd
,
SB_CTL
,
wParam
);
case
0x00e5
:
case
0x00e7
:
case
0x00e8
:
...
...
@@ -444,9 +383,7 @@ LRESULT WINAPI USER_ScrollBarProc( HWND hwnd, UINT message, WPARAM wParam, LPARA
case
0x00ed
:
case
0x00ee
:
case
0x00ef
:
ERR
(
"unknown Win32 msg %04x wp=%08Ix lp=%08Ix
\n
"
,
message
,
wParam
,
lParam
);
break
;
return
NtUserMessageCall
(
hwnd
,
message
,
wParam
,
lParam
,
0
,
NtUserScrollBarWndProc
,
!
unicode
);
default:
if
(
message
>=
WM_USER
)
...
...
dlls/win32u/scroll.c
View file @
48441212
...
...
@@ -1130,6 +1130,32 @@ static void create_scroll_bar( HWND hwnd, CREATESTRUCTW *create )
}
}
static
void
handle_kbd_event
(
HWND
hwnd
,
WPARAM
wparam
,
LPARAM
lparam
)
{
TRACE
(
"hwnd=%p wparam=%ld lparam=%ld
\n
"
,
hwnd
,
wparam
,
lparam
);
/* hide caret on first KEYDOWN to prevent flicker */
if
((
lparam
&
PFD_DOUBLEBUFFER_DONTCARE
)
==
0
)
NtUserHideCaret
(
hwnd
);
switch
(
wparam
)
{
case
VK_PRIOR
:
wparam
=
SB_PAGEUP
;
break
;
case
VK_NEXT
:
wparam
=
SB_PAGEDOWN
;
break
;
case
VK_HOME
:
wparam
=
SB_TOP
;
break
;
case
VK_END
:
wparam
=
SB_BOTTOM
;
break
;
case
VK_UP
:
wparam
=
SB_LINEUP
;
break
;
case
VK_DOWN
:
wparam
=
SB_LINEDOWN
;
break
;
case
VK_LEFT
:
wparam
=
SB_LINEUP
;
break
;
case
VK_RIGHT
:
wparam
=
SB_LINEDOWN
;
break
;
default:
return
;
}
send_message
(
get_parent
(
hwnd
),
(
get_window_long
(
hwnd
,
GWL_STYLE
)
&
SBS_VERT
)
?
WM_VSCROLL
:
WM_HSCROLL
,
wparam
,
(
LPARAM
)
hwnd
);
}
static
int
get_scroll_pos
(
HWND
hwnd
,
int
bar
)
{
struct
scroll_info
*
scroll
=
get_scroll_info_ptr
(
hwnd
,
bar
,
FALSE
);
...
...
@@ -1155,14 +1181,35 @@ static BOOL set_scroll_range( HWND hwnd, int bar, int min_val, int max_val )
return
TRUE
;
}
static
BOOL
get_scroll_range
(
HWND
hwnd
,
int
nBar
,
int
*
min
,
int
*
max
)
{
struct
scroll_info
*
info
;
if
(
!
(
info
=
get_scroll_info_ptr
(
hwnd
,
nBar
,
FALSE
)))
return
FALSE
;
if
(
min
)
*
min
=
info
?
info
->
minVal
:
0
;
if
(
max
)
*
max
=
info
?
info
->
maxVal
:
0
;
release_scroll_info_ptr
(
info
);
return
TRUE
;
}
LRESULT
scroll_bar_window_proc
(
HWND
hwnd
,
UINT
msg
,
WPARAM
wparam
,
LPARAM
lparam
,
BOOL
ansi
)
{
if
(
!
is_window
(
hwnd
))
return
0
;
switch
(
msg
)
{
case
WM_CREATE
:
create_scroll_bar
(
hwnd
,
(
CREATESTRUCTW
*
)
lparam
);
return
0
;
case
WM_KEYDOWN
:
handle_kbd_event
(
hwnd
,
wparam
,
lparam
);
return
0
;
case
WM_KEYUP
:
NtUserShowCaret
(
hwnd
);
return
0
;
case
WM_LBUTTONDBLCLK
:
case
WM_LBUTTONDOWN
:
if
(
get_window_long
(
hwnd
,
GWL_STYLE
)
&
SBS_SIZEGRIP
)
...
...
@@ -1282,7 +1329,47 @@ LRESULT scroll_bar_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpara
case
SBM_SETSCROLLINFO
:
return
set_scroll_info
(
hwnd
,
SB_CTL
,
(
SCROLLINFO
*
)
lparam
,
wparam
);
case
WM_SETCURSOR
:
if
(
get_window_long
(
hwnd
,
GWL_STYLE
)
&
SBS_SIZEGRIP
)
{
ULONG_PTR
cursor
=
(
get_window_long
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_LAYOUTRTL
)
?
IDC_SIZENESW
:
IDC_SIZENWSE
;
return
(
LRESULT
)
NtUserSetCursor
(
LoadImageW
(
0
,
(
const
WCHAR
*
)
cursor
,
IMAGE_CURSOR
,
0
,
0
,
LR_SHARED
|
LR_DEFAULTSIZE
));
}
return
default_window_proc
(
hwnd
,
msg
,
wparam
,
lparam
,
ansi
);
case
SBM_SETPOS
:
{
SCROLLINFO
info
;
info
.
cbSize
=
sizeof
(
info
);
info
.
nPos
=
wparam
;
info
.
fMask
=
SIF_POS
|
SIF_RETURNPREV
;
return
NtUserSetScrollInfo
(
hwnd
,
SB_CTL
,
&
info
,
lparam
);
}
case
SBM_GETPOS
:
return
get_scroll_pos
(
hwnd
,
SB_CTL
);
case
SBM_GETRANGE
:
return
get_scroll_range
(
hwnd
,
SB_CTL
,
(
int
*
)
wparam
,
(
int
*
)
lparam
);
case
SBM_ENABLE_ARROWS
:
return
NtUserEnableScrollBar
(
hwnd
,
SB_CTL
,
wparam
);
case
0x00e5
:
case
0x00e7
:
case
0x00e8
:
case
0x00ec
:
case
0x00ed
:
case
0x00ee
:
case
0x00ef
:
ERR
(
"unknown Win32 msg %04x wp=%08lx lp=%08lx
\n
"
,
msg
,
wparam
,
lparam
);
return
0
;
default:
if
(
msg
>=
WM_USER
)
WARN
(
"unknown msg %04x wp=%08lx lp=%08lx
\n
"
,
msg
,
wparam
,
lparam
);
return
default_window_proc
(
hwnd
,
msg
,
wparam
,
lparam
,
ansi
);
}
}
...
...
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