winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
July 2022
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
1 participants
639 discussions
Start a n
N
ew thread
Yoshiji Emoto : ntdll: Add SJIS charset.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: b19b3701e8e94bcdac0d4189fec362acd318d483 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b19b3701e8e94bcdac0d4189…
Author: Yoshiji Emoto <alumina.from.ceramix(a)gmail.com> Date: Sat Jun 25 06:50:14 2022 +0900 ntdll: Add SJIS charset. Signed-off-by: Yoshiji Emoto <alumina.from.ceramix(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/unix/env.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c index 161367e354f..17450b5ab4c 100644 --- a/dlls/ntdll/unix/env.c +++ b/dlls/ntdll/unix/env.c @@ -270,6 +270,7 @@ static const struct { const char *name; UINT cp; } charset_names[] = { "ISO88599", 28599 }, { "KOI8R", 20866 }, { "KOI8U", 21866 }, + { "SJIS", 932 }, { "TIS620", 28601 }, { "UTF8", CP_UTF8 } };
1
0
0
0
Dmitry Timoshkov : combase: Execute local server for correct architecture in a WoW64 setup.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 3c9720f4a6b2ffd873c886da53f045709fe98b67 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=3c9720f4a6b2ffd873c886da…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Mon Jun 27 12:49:11 2022 +0300 combase: Execute local server for correct architecture in a WoW64 setup. Based on implementation of create_surrogate_server(). This patch makes 64-bit application work with its own shipped 32-bit COM server. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/combase/rpc.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/dlls/combase/rpc.c b/dlls/combase/rpc.c index 3a171dbb324..c51b59de4bf 100644 --- a/dlls/combase/rpc.c +++ b/dlls/combase/rpc.c @@ -477,6 +477,9 @@ static HRESULT create_server(REFCLSID rclsid, HANDLE *process) { static const WCHAR embeddingW[] = L" -Embedding"; HKEY key; + int arch = (sizeof(void *) > sizeof(int)) ? 64 : 32; + REGSAM opposite = (arch == 64) ? KEY_WOW64_32KEY : KEY_WOW64_64KEY; + BOOL is_wow64 = FALSE, is_opposite = FALSE; HRESULT hr; WCHAR command[MAX_PATH + ARRAY_SIZE(embeddingW)]; DWORD size = (MAX_PATH+1) * sizeof(WCHAR); @@ -484,7 +487,14 @@ static HRESULT create_server(REFCLSID rclsid, HANDLE *process) PROCESS_INFORMATION pinfo; LONG ret; + TRACE("Attempting to start server for %s\n", debugstr_guid(rclsid)); + hr = open_key_for_clsid(rclsid, L"LocalServer32", KEY_READ, &key); + if (FAILED(hr) && (arch == 64 || (IsWow64Process(GetCurrentProcess(), &is_wow64) && is_wow64))) + { + hr = open_key_for_clsid(rclsid, L"LocalServer32", opposite | KEY_READ, &key); + is_opposite = TRUE; + } if (FAILED(hr)) { ERR("class %s not registered\n", debugstr_guid(rclsid)); @@ -510,7 +520,19 @@ static HRESULT create_server(REFCLSID rclsid, HANDLE *process) /* FIXME: Win2003 supports a ServerExecutable value that is passed into * CreateProcess */ - if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) + if (is_opposite) + { + void *cookie; + Wow64DisableWow64FsRedirection(&cookie); + if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) + { + WARN("failed to run local server %s\n", debugstr_w(command)); + hr = HRESULT_FROM_WIN32(GetLastError()); + } + Wow64RevertWow64FsRedirection(cookie); + if (FAILED(hr)) return hr; + } + else if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) { WARN("failed to run local server %s\n", debugstr_w(command)); return HRESULT_FROM_WIN32(GetLastError());
1
0
0
0
Dmitry Timoshkov : combase: Use file system redirection path only for an opposite architecture in a WoW64 setup.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 9ba69dce369a1c81ea6939e02e885f3117db81b3 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=9ba69dce369a1c81ea6939e0…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Mon Jun 27 12:49:07 2022 +0300 combase: Use file system redirection path only for an opposite architecture in a WoW64 setup. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/combase/rpc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/combase/rpc.c b/dlls/combase/rpc.c index bed7518358c..3a171dbb324 100644 --- a/dlls/combase/rpc.c +++ b/dlls/combase/rpc.c @@ -527,7 +527,7 @@ static HRESULT create_surrogate_server(REFCLSID rclsid, HANDLE *process) HKEY key; int arch = (sizeof(void *) > sizeof(int)) ? 64 : 32; REGSAM opposite = (arch == 64) ? KEY_WOW64_32KEY : KEY_WOW64_64KEY; - BOOL is_wow64 = FALSE; + BOOL is_wow64 = FALSE, is_opposite = FALSE; HRESULT hr; WCHAR command[MAX_PATH + ARRAY_SIZE(processidW) + CHARS_IN_GUID]; DWORD size; @@ -548,6 +548,7 @@ static HRESULT create_surrogate_server(REFCLSID rclsid, HANDLE *process) { hr = open_appidkey_from_clsid(rclsid, opposite | KEY_READ, &key); if (FAILED(hr)) return hr; + is_opposite = TRUE; } size = (MAX_PATH + 1) * sizeof(WCHAR); @@ -574,7 +575,7 @@ static HRESULT create_surrogate_server(REFCLSID rclsid, HANDLE *process) TRACE("Activating surrogate local server %s\n", debugstr_w(command)); - if (is_wow64 && arch == 64) + if (is_opposite) { void *cookie; Wow64DisableWow64FsRedirection(&cookie);
1
0
0
0
Roman Pišl : wpcap: Translate device identifier in pcap_create.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: be94570d441c68cc1fd13a11b363fe25ce12f34b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=be94570d441c68cc1fd13a11…
Author: Roman Pišl <rpisl(a)seznam.cz> Date: Sat Jul 2 13:18:25 2022 +0200 wpcap: Translate device identifier in pcap_create. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=53104
Signed-off-by: Roman Pišl <rpisl(a)seznam.cz> Signed-off-by: André Zwing <nerv(a)dawncrow.de> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/wpcap/wpcap.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/dlls/wpcap/wpcap.c b/dlls/wpcap/wpcap.c index b140deeb3d2..a295819f7fe 100644 --- a/dlls/wpcap/wpcap.c +++ b/dlls/wpcap/wpcap.c @@ -68,15 +68,6 @@ int CDECL pcap_compile( struct pcap *pcap, void *program, const char *buf, int o return PCAP_CALL( compile, ¶ms ); } -struct pcap * CDECL pcap_create( const char *src, char *errbuf ) -{ - struct pcap *ret; - struct create_params params = { src, errbuf, &ret }; - TRACE( "%s, %p\n", src, errbuf ); - PCAP_CALL( create, ¶ms ); - return ret; -} - int CDECL pcap_datalink( struct pcap *pcap ) { TRACE( "%p\n", pcap ); @@ -579,6 +570,26 @@ static char *map_win32_device_name( const char *dev ) return ret; } +struct pcap * CDECL pcap_create( const char *source, char *errbuf ) +{ + char *unix_dev; + struct pcap *ret; + TRACE( "%s, %p\n", source, errbuf ); + + if (!(unix_dev = map_win32_device_name( source ))) + { + if (errbuf) sprintf( errbuf, "Unable to open the adapter." ); + return NULL; + } + else + { + struct create_params params = { unix_dev, errbuf, &ret }; + PCAP_CALL( create, ¶ms ); + } + free( unix_dev ); + return ret; +} + static struct pcap *open_live( const char *source, int snaplen, int promisc, int timeout, char *errbuf ) { char *unix_dev;
1
0
0
0
Jinoh Kang : loader: Fix return type of get_auxiliary().
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 38dfa2f4551626d05d5c23824a8e0277374e63ce URL:
https://source.winehq.org/git/wine.git/?a=commit;h=38dfa2f4551626d05d5c2382…
Author: Jinoh Kang <jinoh.kang.kr(a)gmail.com> Date: Sat Jan 1 05:34:54 2022 +0900 loader: Fix return type of get_auxiliary(). This is required for fetching pointer-valued vectors (e.g. AT_SYSINFO_EHDR). Signed-off-by: Jinoh Kang <jinoh.kang.kr(a)gmail.com> --- loader/preloader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loader/preloader.c b/loader/preloader.c index 585be50624f..d88964e9c4b 100644 --- a/loader/preloader.c +++ b/loader/preloader.c @@ -868,7 +868,7 @@ static void set_auxiliary_values( struct wld_auxv *av, const struct wld_auxv *ne * * Get a field of the auxiliary structure */ -static int get_auxiliary( struct wld_auxv *av, int type, int def_val ) +static ElfW(Addr) get_auxiliary( struct wld_auxv *av, int type, ElfW(Addr) def_val ) { for ( ; av->a_type != AT_NULL; av++) if( av->a_type == type ) return av->a_un.a_val;
1
0
0
0
Jacek Caban : user32: Pass scroll enable flags to ScrollBarDraw.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 79910bcf83e2b42688e8c85d6d3d730eac7f34ca URL:
https://source.winehq.org/git/wine.git/?a=commit;h=79910bcf83e2b42688e8c85d…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Sun Jul 3 22:14:54 2022 +0200 user32: Pass scroll enable flags to ScrollBarDraw. --- dlls/user32/scroll.c | 30 +++++++++++------------------- dlls/user32/user_main.c | 2 +- dlls/user32/user_private.h | 4 ++-- dlls/uxtheme/scrollbar.c | 6 +++--- dlls/uxtheme/uxthemedll.h | 4 ++-- include/winuser.h | 4 ++-- 6 files changed, 21 insertions(+), 29 deletions(-) diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c index bf0a7d3350a..e368a2feb70 100644 --- a/dlls/user32/scroll.c +++ b/dlls/user32/scroll.c @@ -125,7 +125,7 @@ SCROLLBAR_INFO *SCROLL_GetInternalInfo( HWND hwnd, INT nBar, BOOL alloc ) * * Draw the scroll bar arrows. */ -static void SCROLL_DrawArrows( HDC hdc, SCROLLBAR_INFO *infoPtr, +static void SCROLL_DrawArrows( HDC hdc, UINT flags, RECT *rect, INT arrowSize, BOOL vertical, BOOL top_pressed, BOOL bottom_pressed ) { @@ -140,7 +140,7 @@ static void SCROLL_DrawArrows( HDC hdc, SCROLLBAR_INFO *infoPtr, DrawFrameControl( hdc, &r, DFC_SCROLL, (vertical ? DFCS_SCROLLUP : DFCS_SCROLLLEFT) | (top_pressed ? (DFCS_PUSHED | DFCS_FLAT) : 0 ) - | (infoPtr->flags&ESB_DISABLE_LTUP ? DFCS_INACTIVE : 0 ) ); + | (flags & ESB_DISABLE_LTUP ? DFCS_INACTIVE : 0 ) ); r = *rect; if( vertical ) @@ -151,7 +151,7 @@ static void SCROLL_DrawArrows( HDC hdc, SCROLLBAR_INFO *infoPtr, DrawFrameControl( hdc, &r, DFC_SCROLL, (vertical ? DFCS_SCROLLDOWN : DFCS_SCROLLRIGHT) | (bottom_pressed ? (DFCS_PUSHED | DFCS_FLAT) : 0 ) - | (infoPtr->flags&ESB_DISABLE_RTDN ? DFCS_INACTIVE : 0) ); + | (flags & ESB_DISABLE_RTDN ? DFCS_INACTIVE : 0) ); } /*********************************************************************** @@ -161,8 +161,7 @@ static void SCROLL_DrawArrows( HDC hdc, SCROLLBAR_INFO *infoPtr, */ static void SCROLL_DrawInterior( HWND hwnd, HDC hdc, INT nBar, RECT *rect, INT arrowSize, - INT thumbSize, INT thumbPos, - UINT flags, BOOL vertical, + INT thumbSize, INT thumbPos, BOOL vertical, BOOL top_selected, BOOL bottom_selected ) { RECT r; @@ -247,11 +246,9 @@ static void SCROLL_DrawInterior( HWND hwnd, HDC hdc, INT nBar, void WINAPI USER_ScrollBarDraw( HWND hwnd, HDC hdc, INT nBar, enum SCROLL_HITTEST hit_test, const struct SCROLL_TRACKING_INFO *tracking_info, BOOL arrows, - BOOL interior, RECT *rect, INT arrowSize, INT thumbPos, - INT thumbSize, BOOL vertical ) + BOOL interior, RECT *rect, UINT enable_flags, INT arrowSize, + INT thumbPos, INT thumbSize, BOOL vertical ) { - SCROLLBAR_INFO *infoPtr; - if (nBar == SB_CTL) { DWORD style = GetWindowLongW( hwnd, GWL_STYLE ); @@ -274,34 +271,29 @@ void WINAPI USER_ScrollBarDraw( HWND hwnd, HDC hdc, INT nBar, enum SCROLL_HITTES } } - if (!(infoPtr = SCROLL_GetInternalInfo( hwnd, nBar, TRUE ))) - return; - - /* Draw the arrows */ - + /* Draw the arrows */ if (arrows && arrowSize) { if (vertical == tracking_info->vertical && GetCapture() == hwnd) - SCROLL_DrawArrows( hdc, infoPtr, rect, arrowSize, vertical, + SCROLL_DrawArrows( hdc, enable_flags, rect, arrowSize, vertical, hit_test == tracking_info->hit_test && hit_test == SCROLL_TOP_ARROW, hit_test == tracking_info->hit_test && hit_test == SCROLL_BOTTOM_ARROW ); else - SCROLL_DrawArrows( hdc, infoPtr, rect, arrowSize, vertical, FALSE, FALSE ); + SCROLL_DrawArrows( hdc, enable_flags, rect, arrowSize, vertical, FALSE, FALSE ); } if (interior) { if (vertical == tracking_info->vertical && GetCapture() == hwnd) { - SCROLL_DrawInterior( hwnd, hdc, nBar, rect, arrowSize, thumbSize, thumbPos, - infoPtr->flags, vertical, + SCROLL_DrawInterior( hwnd, hdc, nBar, rect, arrowSize, thumbSize, thumbPos, vertical, hit_test == tracking_info->hit_test && hit_test == SCROLL_TOP_RECT, hit_test == tracking_info->hit_test && hit_test == SCROLL_BOTTOM_RECT ); } else { SCROLL_DrawInterior( hwnd, hdc, nBar, rect, arrowSize, thumbSize, thumbPos, - infoPtr->flags, vertical, FALSE, FALSE ); + vertical, FALSE, FALSE ); } } diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index b6c8f26cec6..fb9ce74736d 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -178,7 +178,7 @@ static NTSTATUS WINAPI User32DrawScrollBar( const struct draw_scroll_bar_params RECT rect = params->rect; user_api->pScrollBarDraw( params->hwnd, params->hdc, params->bar, params->hit_test, ¶ms->tracking_info, params->arrows, params->interior, - &rect, params->arrow_size, params->thumb_pos, + &rect, params->enable_flags, params->arrow_size, params->thumb_pos, params->thumb_size, params->vertical ); return 0; } diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index f34818ea258..3be5b84b41b 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -177,8 +177,8 @@ extern struct user_api_hook *user_api DECLSPEC_HIDDEN; LRESULT WINAPI USER_DefDlgProc(HWND, UINT, WPARAM, LPARAM, BOOL) DECLSPEC_HIDDEN; LRESULT WINAPI USER_ScrollBarProc(HWND, UINT, WPARAM, LPARAM, BOOL) DECLSPEC_HIDDEN; void WINAPI USER_ScrollBarDraw(HWND, HDC, INT, enum SCROLL_HITTEST, - const struct SCROLL_TRACKING_INFO *, BOOL, BOOL, RECT *, INT, INT, - INT, BOOL) DECLSPEC_HIDDEN; + const struct SCROLL_TRACKING_INFO *, BOOL, BOOL, RECT *, UINT, + INT, INT, INT, BOOL) DECLSPEC_HIDDEN; struct scroll_info *SCROLL_GetInternalInfo( HWND hwnd, INT nBar, BOOL alloc ); #endif /* __WINE_USER_PRIVATE_H */ diff --git a/dlls/uxtheme/scrollbar.c b/dlls/uxtheme/scrollbar.c index 719081ad5b8..4ae1b2a8724 100644 --- a/dlls/uxtheme/scrollbar.c +++ b/dlls/uxtheme/scrollbar.c @@ -34,8 +34,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(theme_scroll); void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTEST hit_test, const struct SCROLL_TRACKING_INFO *tracking_info, - BOOL draw_arrows, BOOL draw_interior, RECT *rect, INT arrowsize, - INT thumbpos, INT thumbsize, BOOL vertical) + BOOL draw_arrows, BOOL draw_interior, RECT *rect, UINT enable_flags, + INT arrowsize, INT thumbpos, INT thumbsize, BOOL vertical) { BOOL disabled = !IsWindowEnabled(hwnd); HTHEME theme; @@ -49,7 +49,7 @@ void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTES if (!theme) { user_api.pScrollBarDraw(hwnd, dc, bar, hit_test, tracking_info, draw_arrows, draw_interior, - rect, arrowsize, thumbpos, thumbsize, vertical); + rect, enable_flags, arrowsize, thumbpos, thumbsize, vertical); return; } diff --git a/dlls/uxtheme/uxthemedll.h b/dlls/uxtheme/uxthemedll.h index 67130774392..85b834e20e8 100644 --- a/dlls/uxtheme/uxthemedll.h +++ b/dlls/uxtheme/uxthemedll.h @@ -109,8 +109,8 @@ extern struct user_api_hook user_api DECLSPEC_HIDDEN; LRESULT WINAPI UXTHEME_DefDlgProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL unicode) DECLSPEC_HIDDEN; void WINAPI UXTHEME_ScrollBarDraw(HWND hwnd, HDC dc, INT bar, enum SCROLL_HITTEST hit_test, const struct SCROLL_TRACKING_INFO *tracking_info, - BOOL draw_arrows, BOOL draw_interior, RECT *rect, INT arrowsize, - INT thumbpos, INT thumbsize, BOOL vertical) DECLSPEC_HIDDEN; + BOOL draw_arrows, BOOL draw_interior, RECT *rect, UINT enable_flags, + INT arrowsize, INT thumbpos, INT thumbsize, BOOL vertical) DECLSPEC_HIDDEN; LRESULT WINAPI UXTHEME_ScrollbarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode) DECLSPEC_HIDDEN; diff --git a/include/winuser.h b/include/winuser.h index 4e43d6c1170..d2262b6d70a 100644 --- a/include/winuser.h +++ b/include/winuser.h @@ -4789,8 +4789,8 @@ struct user_api_hook { LRESULT (WINAPI *pDefDlgProc)(HWND, UINT, WPARAM, LPARAM, BOOL); void (WINAPI *pScrollBarDraw)(HWND, HDC, INT, enum SCROLL_HITTEST, - const struct SCROLL_TRACKING_INFO *, BOOL, BOOL, RECT *, INT, INT, - INT, BOOL); + const struct SCROLL_TRACKING_INFO *, BOOL, BOOL, RECT *, UINT, + INT, INT, INT, BOOL); LRESULT (WINAPI *pScrollBarWndProc)(HWND, UINT, WPARAM, LPARAM, BOOL); };
1
0
0
0
Jacek Caban : win32u: Move scroll tracking implementation from user32.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 419893519c0660a765ebb9898b5ccf64c273b0cf URL:
https://source.winehq.org/git/wine.git/?a=commit;h=419893519c0660a765ebb989…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Jun 30 17:12:46 2022 +0200 win32u: Move scroll tracking implementation from user32. --- dlls/user32/controls.h | 3 - dlls/user32/defwnd.c | 24 +- dlls/user32/edit.c | 4 +- dlls/user32/listbox.c | 14 +- dlls/user32/mdi.c | 4 +- dlls/user32/nonclient.c | 69 --- dlls/user32/scroll.c | 1304 +----------------------------------------- dlls/user32/user32.spec | 6 +- dlls/user32/user_main.c | 12 +- dlls/user32/win.c | 14 - dlls/user32/win.h | 1 - dlls/win32u/defwnd.c | 77 ++- dlls/win32u/gdiobj.c | 3 + dlls/win32u/ntuser_private.h | 1 - dlls/win32u/scroll.c | 1032 ++++++++++++++++++++++++++++++++- dlls/win32u/win32u.spec | 6 +- dlls/win32u/win32u_private.h | 8 + dlls/win32u/window.c | 11 +- dlls/win32u/wrappers.c | 18 + include/ntuser.h | 36 +- 20 files changed, 1219 insertions(+), 1428 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=419893519c0660a765eb…
1
0
0
0
Jacek Caban : win32u: Move scroll bar WM_SETFOCUS and WM_KILLFOCUS implementation from user32.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 13727e42e965a7a105c0081fbfc775aad22ffbab URL:
https://source.winehq.org/git/wine.git/?a=commit;h=13727e42e965a7a105c0081f…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Jun 28 21:26:37 2022 +0200 win32u: Move scroll bar WM_SETFOCUS and WM_KILLFOCUS implementation from user32. --- dlls/user32/scroll.c | 39 ----------- dlls/win32u/ntgdi_private.h | 1 - dlls/win32u/scroll.c | 158 +++++++++++++++++++++++++++++++++++++++++++ dlls/win32u/win32u_private.h | 1 + 4 files changed, 159 insertions(+), 40 deletions(-) diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c index cc847b48ec6..01f7f3b88ae 100644 --- a/dlls/user32/scroll.c +++ b/dlls/user32/scroll.c @@ -1385,46 +1385,7 @@ LRESULT WINAPI USER_ScrollBarProc( HWND hwnd, UINT message, WPARAM wParam, LPARA break; case WM_SETFOCUS: - { - /* Create a caret when a ScrollBar get focus */ - RECT rect; - int arrowSize, thumbSize, thumbPos, vertical; - vertical = SCROLL_GetScrollBarRect( hwnd, SB_CTL, &rect, - &arrowSize, &thumbSize, &thumbPos ); - if (!vertical) - { - NtUserCreateCaret( hwnd, (HBITMAP)1, thumbSize - 2, rect.bottom - rect.top - 2 ); - SetCaretPos(thumbPos+1, rect.top+1); - } - else - { - NtUserCreateCaret( hwnd, (HBITMAP)1, rect.right - rect.left - 2, thumbSize - 2); - SetCaretPos(rect.top+1, thumbPos+1); - } - NtUserShowCaret( hwnd ); - } - break; - case WM_KILLFOCUS: - { - RECT rect; - int arrowSize, thumbSize, thumbPos, vertical; - vertical = SCROLL_GetScrollBarRect( hwnd, SB_CTL, &rect,&arrowSize, &thumbSize, &thumbPos ); - if (!vertical){ - rect.left=thumbPos+1; - rect.right=rect.left+thumbSize; - } - else - { - rect.top=thumbPos+1; - rect.bottom=rect.top+thumbSize; - } - NtUserHideCaret( hwnd ); - NtUserInvalidateRect( hwnd, &rect, 0 ); - DestroyCaret(); - } - break; - case WM_CREATE: case WM_ERASEBKGND: case WM_GETDLGCODE: diff --git a/dlls/win32u/ntgdi_private.h b/dlls/win32u/ntgdi_private.h index ac552897769..0397138b109 100644 --- a/dlls/win32u/ntgdi_private.h +++ b/dlls/win32u/ntgdi_private.h @@ -391,7 +391,6 @@ extern void lp_to_dp( DC *dc, POINT *points, INT count ) DECLSPEC_HIDDEN; extern BOOL set_map_mode( DC *dc, int mode ) DECLSPEC_HIDDEN; extern void combine_transform( XFORM *result, const XFORM *xform1, const XFORM *xform2 ) DECLSPEC_HIDDEN; -extern int muldiv( int a, int b, int c ) DECLSPEC_HIDDEN; /* driver.c */ extern BOOL is_display_device( LPCWSTR name ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/scroll.c b/dlls/win32u/scroll.c index a15c8bfd36d..14bec1e3b83 100644 --- a/dlls/win32u/scroll.c +++ b/dlls/win32u/scroll.c @@ -32,6 +32,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(scroll); #define SCROLLBAR_MAGIC 0x5c6011ba +/* Minimum size of the rectangle between the arrows */ +#define SCROLL_MIN_RECT 4 + +/* Minimum size of the thumb in pixels */ +#define SCROLL_MIN_THUMB 8 + +/* Overlap between arrows and thumb */ +#define SCROLL_ARROW_THUMB_OVERLAP 0 + static struct scroll_info *get_scroll_info_ptr( HWND hwnd, int bar, BOOL alloc ) { struct scroll_info *ret = NULL; @@ -84,6 +93,113 @@ static BOOL show_scroll_bar( HWND hwnd, int bar, BOOL show_horz, BOOL show_vert return FALSE; /* no frame changes */ } +/*********************************************************************** + * get_scroll_bar_rect + * + * Compute the scroll bar rectangle, in drawing coordinates (i.e. client + * coords for SB_CTL, window coords for SB_VERT and SB_HORZ). + * 'arrow_size' returns the width or height of an arrow (depending on + * the orientation of the scrollbar), 'thumb_size' returns the size of + * the thumb, and 'thumb_pos' returns the position of the thumb + * relative to the left or to the top. + * Return TRUE if the scrollbar is vertical, FALSE if horizontal. + */ +static BOOL get_scroll_bar_rect( HWND hwnd, int bar, RECT *rect, int *arrow_size, + int *thumb_size, int *thumb_pos ) +{ + int pixels, min_thumb_size; + BOOL vertical; + WND *win = get_win_ptr( hwnd ); + + if (!win || win == WND_OTHER_PROCESS || win == WND_DESKTOP) return FALSE; + + switch(bar) + { + case SB_HORZ: + get_window_rects( hwnd, COORDS_WINDOW, NULL, rect, get_thread_dpi() ); + rect->top = rect->bottom; + rect->bottom += get_system_metrics( SM_CYHSCROLL ); + if (win->dwStyle & WS_VSCROLL) rect->right++; + vertical = FALSE; + break; + + case SB_VERT: + get_window_rects( hwnd, COORDS_WINDOW, NULL, rect, get_thread_dpi() ); + if (win->dwExStyle & WS_EX_LEFTSCROLLBAR) + { + rect->right = rect->left; + rect->left -= get_system_metrics( SM_CXVSCROLL ); + } + else + { + rect->left = rect->right; + rect->right += get_system_metrics( SM_CXVSCROLL ); + } + if (win->dwStyle & WS_HSCROLL) rect->bottom++; + vertical = TRUE; + break; + + case SB_CTL: + get_client_rect( hwnd, rect ); + vertical = (win->dwStyle & SBS_VERT) != 0; + break; + + default: + release_win_ptr( win ); + return FALSE; + } + + if (vertical) pixels = rect->bottom - rect->top; + else pixels = rect->right - rect->left; + + if (pixels <= 2 * get_system_metrics( SM_CXVSCROLL ) + SCROLL_MIN_RECT) + { + if (pixels > SCROLL_MIN_RECT) + *arrow_size = (pixels - SCROLL_MIN_RECT) / 2; + else + *arrow_size = 0; + *thumb_pos = *thumb_size = 0; + } + else + { + struct scroll_info *info = get_scroll_info_ptr( hwnd, bar, TRUE ); + if (!info) + { + WARN( "called for missing scroll bar\n" ); + release_win_ptr( win ); + return FALSE; + } + *arrow_size = get_system_metrics( SM_CXVSCROLL ); + pixels -= 2 * (get_system_metrics( SM_CXVSCROLL ) - SCROLL_ARROW_THUMB_OVERLAP); + + if (info->page) + { + *thumb_size = muldiv( pixels,info->page, info->maxVal - info->minVal + 1 ); + min_thumb_size = muldiv( SCROLL_MIN_THUMB, get_dpi_for_window( hwnd ), 96 ); + if (*thumb_size < min_thumb_size) *thumb_size = min_thumb_size; + } + else *thumb_size = get_system_metrics( SM_CXVSCROLL ); + + if ((pixels -= *thumb_size ) < 0 || (info->flags & ESB_DISABLE_BOTH) == ESB_DISABLE_BOTH) + { + /* Rectangle too small or scrollbar disabled -> no thumb */ + *thumb_pos = *thumb_size = 0; + } + else + { + int max = info->maxVal - max( info->page-1, 0 ); + if (info->minVal >= max) + *thumb_pos = *arrow_size - SCROLL_ARROW_THUMB_OVERLAP; + else + *thumb_pos = *arrow_size - SCROLL_ARROW_THUMB_OVERLAP + + muldiv( pixels, info->curVal - info->minVal, max - info->minVal ); + } + release_scroll_info_ptr( info ); + } + release_win_ptr( win ); + return vertical; +} + static void create_scroll_bar( HWND hwnd, CREATESTRUCTW *create ) { struct scroll_info *info = NULL; @@ -148,6 +264,48 @@ LRESULT scroll_bar_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpara create_scroll_bar( hwnd, (CREATESTRUCTW *)lparam ); return 0; + case WM_SETFOCUS: + { + /* Create a caret when a ScrollBar get focus */ + RECT rect; + int arrow_size, thumb_size, thumb_pos, vertical; + vertical = get_scroll_bar_rect( hwnd, SB_CTL, &rect, &arrow_size, + &thumb_size, &thumb_pos ); + if (!vertical) + { + NtUserCreateCaret( hwnd, (HBITMAP)1, thumb_size - 2, rect.bottom - rect.top - 2 ); + set_caret_pos( thumb_pos + 1, rect.top + 1 ); + } + else + { + NtUserCreateCaret( hwnd, (HBITMAP)1, rect.right - rect.left - 2, thumb_size - 2 ); + set_caret_pos( rect.top + 1, thumb_pos + 1 ); + } + NtUserShowCaret( hwnd ); + } + return 0; + + case WM_KILLFOCUS: + { + int arrow_size, thumb_size, thumb_pos, vertical; + RECT rect; + vertical = get_scroll_bar_rect( hwnd, SB_CTL, &rect,&arrow_size, &thumb_size, &thumb_pos ); + if (!vertical) + { + rect.left = thumb_pos + 1; + rect.right = rect.left + thumb_size; + } + else + { + rect.top = thumb_pos + 1; + rect.bottom = rect.top + thumb_size; + } + NtUserHideCaret( hwnd ); + NtUserInvalidateRect( hwnd, &rect, 0 ); + destroy_caret(); + } + return 0; + case WM_ERASEBKGND: return 1; diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 684a5e59c5b..49c81ea3bef 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -535,6 +535,7 @@ extern NTSTATUS gdi_init(void) DECLSPEC_HIDDEN; extern NTSTATUS callbacks_init( void *args ) DECLSPEC_HIDDEN; extern void winstation_init(void) DECLSPEC_HIDDEN; extern void sysparams_init(void) DECLSPEC_HIDDEN; +extern int muldiv( int a, int b, int c ) DECLSPEC_HIDDEN; extern HKEY reg_create_key( HKEY root, const WCHAR *name, ULONG name_len, DWORD options, DWORD *disposition ) DECLSPEC_HIDDEN;
1
0
0
0
Jacek Caban : win32u: Move scroll bar WM_CREATE implementation from user32.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: 6452e67ebabf553944e16544364658a6c23c6110 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=6452e67ebabf553944e16544…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Jun 28 21:10:50 2022 +0200 win32u: Move scroll bar WM_CREATE implementation from user32. --- dlls/user32/scroll.c | 81 ++------------------------------------------ dlls/win32u/ntuser_private.h | 6 ++++ dlls/win32u/scroll.c | 62 +++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 79 deletions(-) diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c index 9cb07af0706..cc847b48ec6 100644 --- a/dlls/user32/scroll.c +++ b/dlls/user32/scroll.c @@ -32,6 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(scroll); typedef struct scroll_info SCROLLBAR_INFO, *LPSCROLLBAR_INFO; +typedef struct scroll_bar_win_data SCROLLBAR_WNDDATA; /* data for window that has (one or two) scroll bars */ typedef struct @@ -40,12 +41,6 @@ typedef struct SCROLLBAR_INFO vert; } WINSCROLLBAR_INFO, *LPWINSCROLLBAR_INFO; -typedef struct -{ - DWORD magic; - SCROLLBAR_INFO info; -} SCROLLBAR_WNDDATA; - #define SCROLLBAR_MAGIC 0x5c6011ba /* Minimum size of the rectangle between the arrows */ @@ -1127,75 +1122,6 @@ void SCROLL_TrackScrollBar( HWND hwnd, INT scrollbar, POINT pt ) } -/*********************************************************************** - * SCROLL_CreateScrollBar - * - * Create a scroll bar - * - * PARAMS - * hwnd [I] Handle of window with scrollbar(s) - * lpCreate [I] The style and place of the scroll bar - */ -static void SCROLL_CreateScrollBar(HWND hwnd, LPCREATESTRUCTW lpCreate) -{ - LPSCROLLBAR_INFO info = NULL; - WND *win; - - TRACE("hwnd=%p lpCreate=%p\n", hwnd, lpCreate); - - win = WIN_GetPtr(hwnd); - if (win->cbWndExtra >= sizeof(SCROLLBAR_WNDDATA)) - { - SCROLLBAR_WNDDATA *data = (SCROLLBAR_WNDDATA*)win->wExtra; - data->magic = SCROLLBAR_MAGIC; - info = &data->info; - } - else WARN("Not enough extra data\n"); - WIN_ReleasePtr(win); - if (!info) return; - - if (lpCreate->style & WS_DISABLED) - { - info->flags = ESB_DISABLE_BOTH; - TRACE("Created WS_DISABLED scrollbar\n"); - } - - if (lpCreate->style & (SBS_SIZEGRIP | SBS_SIZEBOX)) - { - if (lpCreate->style & SBS_SIZEBOXTOPLEFTALIGN) - NtUserMoveWindow( hwnd, lpCreate->x, lpCreate->y, GetSystemMetrics(SM_CXVSCROLL)+1, - GetSystemMetrics(SM_CYHSCROLL)+1, FALSE ); - else if(lpCreate->style & SBS_SIZEBOXBOTTOMRIGHTALIGN) - NtUserMoveWindow( hwnd, lpCreate->x+lpCreate->cx-GetSystemMetrics(SM_CXVSCROLL)-1, - lpCreate->y+lpCreate->cy-GetSystemMetrics(SM_CYHSCROLL)-1, - GetSystemMetrics(SM_CXVSCROLL)+1, - GetSystemMetrics(SM_CYHSCROLL)+1, FALSE ); - } - else if (lpCreate->style & SBS_VERT) - { - if (lpCreate->style & SBS_LEFTALIGN) - NtUserMoveWindow( hwnd, lpCreate->x, lpCreate->y, - GetSystemMetrics(SM_CXVSCROLL)+1, lpCreate->cy, FALSE ); - else if (lpCreate->style & SBS_RIGHTALIGN) - NtUserMoveWindow( hwnd, - lpCreate->x+lpCreate->cx-GetSystemMetrics(SM_CXVSCROLL)-1, - lpCreate->y, - GetSystemMetrics(SM_CXVSCROLL)+1, lpCreate->cy, FALSE ); - } - else /* SBS_HORZ */ - { - if (lpCreate->style & SBS_TOPALIGN) - NtUserMoveWindow( hwnd, lpCreate->x, lpCreate->y, - lpCreate->cx, GetSystemMetrics(SM_CYHSCROLL)+1, FALSE ); - else if (lpCreate->style & SBS_BOTTOMALIGN) - NtUserMoveWindow( hwnd, - lpCreate->x, - lpCreate->y+lpCreate->cy-GetSystemMetrics(SM_CYHSCROLL)-1, - lpCreate->cx, GetSystemMetrics(SM_CYHSCROLL)+1, FALSE ); - } -} - - /************************************************************************* * SCROLL_GetScrollInfo * @@ -1409,10 +1335,6 @@ LRESULT WINAPI USER_ScrollBarProc( HWND hwnd, UINT message, WPARAM wParam, LPARA switch(message) { - case WM_CREATE: - SCROLL_CreateScrollBar(hwnd, (LPCREATESTRUCTW)lParam); - break; - case WM_ENABLE: { SCROLLBAR_INFO *infoPtr; @@ -1503,6 +1425,7 @@ LRESULT WINAPI USER_ScrollBarProc( HWND hwnd, UINT message, WPARAM wParam, LPARA } break; + case WM_CREATE: case WM_ERASEBKGND: case WM_GETDLGCODE: return NtUserMessageCall( hwnd, message, wParam, lParam, 0, NtUserScrollBarWndProc, !unicode ); diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 609f7018b07..36c11a49c4e 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -216,6 +216,12 @@ struct scroll_info BOOL painted; /* Whether the scroll bar is painted by DefWinProc() */ }; +struct scroll_bar_win_data +{ + DWORD magic; + struct scroll_info info; +}; + /* FIXME: make it private to class.c */ typedef struct tagWINDOWPROC { diff --git a/dlls/win32u/scroll.c b/dlls/win32u/scroll.c index d6c21fc6992..a15c8bfd36d 100644 --- a/dlls/win32u/scroll.c +++ b/dlls/win32u/scroll.c @@ -30,6 +30,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(scroll); +#define SCROLLBAR_MAGIC 0x5c6011ba + static struct scroll_info *get_scroll_info_ptr( HWND hwnd, int bar, BOOL alloc ) { struct scroll_info *ret = NULL; @@ -82,10 +84,70 @@ static BOOL show_scroll_bar( HWND hwnd, int bar, BOOL show_horz, BOOL show_vert return FALSE; /* no frame changes */ } +static void create_scroll_bar( HWND hwnd, CREATESTRUCTW *create ) +{ + struct scroll_info *info = NULL; + WND *win; + + TRACE( "hwnd=%p create=%p\n", hwnd, create ); + + win = get_win_ptr( hwnd ); + if (win->cbWndExtra >= sizeof(struct scroll_bar_win_data)) + { + struct scroll_bar_win_data *data = (struct scroll_bar_win_data *)win->wExtra; + data->magic = SCROLLBAR_MAGIC; + info = &data->info; + } + else WARN( "Not enough extra data\n" ); + release_win_ptr( win ); + if (!info) return; + + if (create->style & WS_DISABLED) + { + info->flags = ESB_DISABLE_BOTH; + TRACE( "Created WS_DISABLED scrollbar\n" ); + } + + if (create->style & (SBS_SIZEGRIP | SBS_SIZEBOX)) + { + if (create->style & SBS_SIZEBOXTOPLEFTALIGN) + NtUserMoveWindow( hwnd, create->x, create->y, get_system_metrics( SM_CXVSCROLL ) + 1, + get_system_metrics( SM_CYHSCROLL ) + 1, FALSE ); + else if(create->style & SBS_SIZEBOXBOTTOMRIGHTALIGN) + NtUserMoveWindow( hwnd, create->x + create->cx - get_system_metrics( SM_CXVSCROLL ) - 1, + create->y + create->cy-get_system_metrics( SM_CYHSCROLL ) - 1, + get_system_metrics( SM_CXVSCROLL ) + 1, + get_system_metrics( SM_CYHSCROLL ) + 1, FALSE ); + } + else if (create->style & SBS_VERT) + { + if (create->style & SBS_LEFTALIGN) + NtUserMoveWindow( hwnd, create->x, create->y, get_system_metrics( SM_CXVSCROLL ) + 1, + create->cy, FALSE ); + else if (create->style & SBS_RIGHTALIGN) + NtUserMoveWindow( hwnd, create->x + create->cx - get_system_metrics( SM_CXVSCROLL ) - 1, + create->y, get_system_metrics( SM_CXVSCROLL ) + 1, create->cy, FALSE ); + } + else /* SBS_HORZ */ + { + if (create->style & SBS_TOPALIGN) + NtUserMoveWindow( hwnd, create->x, create->y, create->cx, + get_system_metrics( SM_CYHSCROLL ) + 1, FALSE ); + else if (create->style & SBS_BOTTOMALIGN) + NtUserMoveWindow( hwnd, create->x, + create->y + create->cy - get_system_metrics( SM_CYHSCROLL ) - 1, + create->cx, get_system_metrics( SM_CYHSCROLL ) + 1, FALSE ); + } +} + LRESULT scroll_bar_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) { switch (msg) { + case WM_CREATE: + create_scroll_bar( hwnd, (CREATESTRUCTW *)lparam ); + return 0; + case WM_ERASEBKGND: return 1;
1
0
0
0
Jacek Caban : win32u: Move set_standard_scroll_painted implementation from user32.
by Alexandre Julliard
04 Jul '22
04 Jul '22
Module: wine Branch: master Commit: a7ff88c9a28d097b3479c1d6c554af5d83171435 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a7ff88c9a28d097b3479c1d6…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Jun 28 21:03:24 2022 +0200 win32u: Move set_standard_scroll_painted implementation from user32. --- dlls/user32/scroll.c | 13 ++----------- dlls/user32/user_main.c | 2 +- dlls/user32/user_private.h | 2 +- dlls/win32u/dce.c | 6 +++--- dlls/win32u/ntuser_private.h | 15 ++++++++++++++- dlls/win32u/scroll.c | 28 ++++++++++++++++++++++++++++ dlls/win32u/win32u_private.h | 1 + 7 files changed, 50 insertions(+), 17 deletions(-) diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c index d9bc69895aa..9cb07af0706 100644 --- a/dlls/user32/scroll.c +++ b/dlls/user32/scroll.c @@ -31,16 +31,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(scroll); -/* data for a single scroll bar */ -typedef struct -{ - INT curVal; /* Current scroll-bar value */ - INT minVal; /* Minimum scroll-bar value */ - INT maxVal; /* Maximum scroll-bar value */ - INT page; /* Page size of scroll bar (Win32) */ - UINT flags; /* EnableScrollBar flags */ - BOOL painted; /* Whether the scroll bar is painted by DefWinProc() */ -} SCROLLBAR_INFO, *LPSCROLLBAR_INFO; +typedef struct scroll_info SCROLLBAR_INFO, *LPSCROLLBAR_INFO; /* data for window that has (one or two) scroll bars */ typedef struct @@ -127,7 +118,7 @@ static inline BOOL SCROLL_ScrollInfoValid( LPCSCROLLINFO info ) * or NULL if failed (f.i. scroll bar does not exist yet) * If alloc is TRUE and the struct does not exist yet, create it. */ -static SCROLLBAR_INFO *SCROLL_GetInternalInfo( HWND hwnd, INT nBar, BOOL alloc ) +SCROLLBAR_INFO *SCROLL_GetInternalInfo( HWND hwnd, INT nBar, BOOL alloc ) { SCROLLBAR_INFO *infoPtr = NULL; WND *wndPtr = WIN_GetPtr( hwnd ); diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index 2391131e4a5..7a85a86d786 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -159,9 +159,9 @@ static const struct user_callbacks user_funcs = NtWaitForMultipleObjects, SCROLL_DrawNCScrollBar, free_win_ptr, + SCROLL_GetInternalInfo, notify_ime, post_dde_message, - SCROLL_SetStandardScrollPainted, unpack_dde_message, register_imm, unregister_imm, diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index a646f9a234d..f34818ea258 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -179,6 +179,6 @@ LRESULT WINAPI USER_ScrollBarProc(HWND, UINT, WPARAM, LPARAM, BOOL) DECLSPEC_HID void WINAPI USER_ScrollBarDraw(HWND, HDC, INT, enum SCROLL_HITTEST, const struct SCROLL_TRACKING_INFO *, BOOL, BOOL, RECT *, INT, INT, INT, BOOL) DECLSPEC_HIDDEN; -void WINAPI SCROLL_SetStandardScrollPainted(HWND hwnd, INT bar, BOOL visible); +struct scroll_info *SCROLL_GetInternalInfo( HWND hwnd, INT nBar, BOOL alloc ); #endif /* __WINE_USER_PRIVATE_H */ diff --git a/dlls/win32u/dce.c b/dlls/win32u/dce.c index 67590e80fa3..9041b5bbaaf 100644 --- a/dlls/win32u/dce.c +++ b/dlls/win32u/dce.c @@ -1188,14 +1188,14 @@ static HRGN send_ncpaint( HWND hwnd, HWND *child, UINT *flags ) if (whole_rgn) /* NOTE: WM_NCPAINT allows wParam to be 1 */ { - if ((*flags & UPDATE_NONCLIENT) && user_callbacks) + if (*flags & UPDATE_NONCLIENT) { /* Mark standard scroll bars as not painted before sending WM_NCPAINT */ style = get_window_long( hwnd, GWL_STYLE ); if (style & WS_HSCROLL) - user_callbacks->set_standard_scroll_painted( hwnd, SB_HORZ, FALSE ); + set_standard_scroll_painted( hwnd, SB_HORZ, FALSE ); if (style & WS_VSCROLL) - user_callbacks->set_standard_scroll_painted( hwnd, SB_VERT, FALSE ); + set_standard_scroll_painted( hwnd, SB_VERT, FALSE ); send_message( hwnd, WM_NCPAINT, (WPARAM)whole_rgn, 0 ); } diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 82d70ec93bb..609f7018b07 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -37,10 +37,10 @@ struct user_callbacks NTSTATUS (WINAPI *pNtWaitForMultipleObjects)(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*); void (CDECL *draw_nc_scrollbar)( HWND hwnd, HDC hdc, BOOL draw_horizontal, BOOL draw_vertical ); void (CDECL *free_win_ptr)( struct tagWND *win ); + struct scroll_info *(CDECL *get_scroll_info)( HWND hwnd, INT nBar, BOOL alloc ); void (CDECL *notify_ime)( HWND hwnd, UINT param ); BOOL (CDECL *post_dde_message)( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, DWORD dest_tid, DWORD type ); - void (WINAPI *set_standard_scroll_painted)( HWND hwnd, INT bar, BOOL visible ); BOOL (CDECL *unpack_dde_message)( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, void **buffer, size_t size ); BOOL (WINAPI *register_imm)( HWND hwnd ); @@ -203,6 +203,19 @@ enum builtin_winprocs NB_BUILTIN_AW_WINPROCS = WINPROC_DESKTOP }; +/* FIXME: make it private to scroll.c */ + +/* data for a single scroll bar */ +struct scroll_info +{ + INT curVal; /* Current scroll-bar value */ + INT minVal; /* Minimum scroll-bar value */ + INT maxVal; /* Maximum scroll-bar value */ + INT page; /* Page size of scroll bar (Win32) */ + UINT flags; /* EnableScrollBar flags */ + BOOL painted; /* Whether the scroll bar is painted by DefWinProc() */ +}; + /* FIXME: make it private to class.c */ typedef struct tagWINDOWPROC { diff --git a/dlls/win32u/scroll.c b/dlls/win32u/scroll.c index ff60ec5c4ce..d6c21fc6992 100644 --- a/dlls/win32u/scroll.c +++ b/dlls/win32u/scroll.c @@ -30,6 +30,20 @@ WINE_DEFAULT_DEBUG_CHANNEL(scroll); +static struct scroll_info *get_scroll_info_ptr( HWND hwnd, int bar, BOOL alloc ) +{ + struct scroll_info *ret = NULL; + user_lock(); + if (user_callbacks) ret = user_callbacks->get_scroll_info( hwnd, bar, alloc ); + if (!ret) user_unlock(); + return ret; +} + +static void release_scroll_info_ptr( struct scroll_info *info ) +{ + user_unlock(); +} + static BOOL show_scroll_bar( HWND hwnd, int bar, BOOL show_horz, BOOL show_vert ) { ULONG old_style, set_bits = 0, clear_bits = 0; @@ -83,6 +97,20 @@ LRESULT scroll_bar_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpara } } +void set_standard_scroll_painted( HWND hwnd, int bar, BOOL painted ) +{ + struct scroll_info *info; + + if (bar != SB_HORZ && bar != SB_VERT) + return; + + if ((info = get_scroll_info_ptr( hwnd, bar, FALSE ))) + { + info->painted = painted; + release_scroll_info_ptr( info ); + } +} + /************************************************************************* * NtUserShowScrollBar (win32u.@) */ diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 90ca0e9b143..684a5e59c5b 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -443,6 +443,7 @@ extern BOOL rawinput_device_get_usages( HANDLE handle, USHORT *usage_page, USHOR /* scroll.c */ extern LRESULT scroll_bar_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) DECLSPEC_HIDDEN; +extern void set_standard_scroll_painted( HWND hwnd, int bar, BOOL painted ) DECLSPEC_HIDDEN; /* sysparams.c */ extern BOOL enable_thunk_lock DECLSPEC_HIDDEN;
1
0
0
0
← Newer
1
...
57
58
59
60
61
62
63
64
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Results per page:
10
25
50
100
200