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
April 2020
----- 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
2 participants
1016 discussions
Start a n
N
ew thread
Dmitry Timoshkov : mshtml: Add support for DIID_HTMLDocumentEvents2 connection point sink.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: 499b8465c894bb5ee444289bbd8feb282035db06 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=499b8465c894bb5ee444289b…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Wed Jun 19 22:54:17 2019 +0800 mshtml: Add support for DIID_HTMLDocumentEvents2 connection point sink. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit ec29d40e4e863c9b73dcc33ee0af789a6d8476ea) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/mshtml/htmldoc.c | 3 ++- dlls/mshtml/htmlevent.c | 2 ++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/events.c | 58 +++++++++++++++++++++++++++++++++++++------- 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index fc22fa5080..5e8f5e0db6 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -4828,12 +4828,13 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) } static cp_static_data_t HTMLDocumentEvents_data = { HTMLDocumentEvents_tid, HTMLDocument_on_advise }; +static cp_static_data_t HTMLDocumentEvents2_data = { HTMLDocumentEvents2_tid, HTMLDocument_on_advise, TRUE }; static const cpc_entry_t HTMLDocument_cpc[] = { {&IID_IDispatch, &HTMLDocumentEvents_data}, {&IID_IPropertyNotifySink}, {&DIID_HTMLDocumentEvents, &HTMLDocumentEvents_data}, - {&DIID_HTMLDocumentEvents2}, + {&DIID_HTMLDocumentEvents2, &HTMLDocumentEvents2_data}, {NULL} }; diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index f2c24a41d5..7bf0c88e7e 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -2252,6 +2252,8 @@ static HRESULT call_cp_func(IDispatch *disp, DISPID dispid, IHTMLEventObj *event ULONG argerr; EXCEPINFO ei; + TRACE("%p,%d,%p,%p\n", disp, dispid, event_obj, retv); + if(event_obj) { V_VT(&event_arg) = VT_DISPATCH; V_DISPATCH(&event_arg) = (IDispatch*)event_obj; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 89a56bd80e..59272c60b0 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -129,6 +129,7 @@ typedef struct EventTarget EventTarget; XDIID(DispHTMLWindow2) \ XDIID(DispHTMLXMLHttpRequest) \ XDIID(HTMLDocumentEvents) \ + XDIID(HTMLDocumentEvents2) \ XDIID(HTMLElementEvents2) \ XIID(IDOMEvent) \ XIID(IDOMKeyboardEvent) \ diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c index a2199876dc..5b456898b7 100644 --- a/dlls/mshtml/tests/events.c +++ b/dlls/mshtml/tests/events.c @@ -66,6 +66,7 @@ DEFINE_EXPECT(div_onclick_capture); DEFINE_EXPECT(div_onclick_bubble); DEFINE_EXPECT(timeout); DEFINE_EXPECT(doccp_onclick); +DEFINE_EXPECT(doccp2_onclick); DEFINE_EXPECT(doccp_onclick_cancel); DEFINE_EXPECT(div_onclick_disp); DEFINE_EXPECT(invoke_onclick); @@ -1440,14 +1441,28 @@ EVENT_HANDLER_FUNC_OBJ(nocall); }; \ static IDispatchEx cpname ## _obj = { &cpname ## Vtbl } -#define test_cp_args(a,b,c,d,e,f) _test_cp_args(__LINE__,a,b,c,d,e,f) -static void _test_cp_args(unsigned line, REFIID riid, WORD flags, DISPPARAMS *dp, VARIANT *vres, EXCEPINFO *ei, UINT *argerr) +#define test_cp_args(a,b,c,d,e,f,g) _test_cp_args(__LINE__,a,b,c,d,e,f,g) +static void _test_cp_args(unsigned line, REFIID riid, WORD flags, DISPPARAMS *dp, VARIANT *vres, EXCEPINFO *ei, UINT *argerr, BOOL use_events2) { ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid)); ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags); ok_(__FILE__,line)(dp != NULL, "dp == NULL\n"); - ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs); - ok_(__FILE__,line)(!dp->rgvarg, "dp->rgvarg = %p\n", dp->rgvarg); + if (use_events2) + { + IHTMLEventObj *event; + HRESULT hr; + ok_(__FILE__,line)(dp->cArgs == 1, "dp->cArgs = %d\n", dp->cArgs); + ok_(__FILE__,line)(dp->rgvarg != NULL, "dp->rgvarg = %p\n", dp->rgvarg); + ok_(__FILE__,line)(V_VT(&dp->rgvarg[0]) == VT_DISPATCH, "vt = %d\n", V_VT(&dp->rgvarg[0])); + hr = IDispatch_QueryInterface(V_DISPATCH(&dp->rgvarg[0]), &IID_IHTMLEventObj, (void **)&event); + ok_(__FILE__,line)(hr == S_OK, "Could not get IHTMLEventObj iface: %08x\n", hr); + IHTMLEventObj_Release(event); + } + else + { + ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs); + ok_(__FILE__,line)(!dp->rgvarg, "dp->rgvarg = %p\n", dp->rgvarg); + } ok_(__FILE__,line)(!dp->cNamedArgs, "dp->cNamedArgs = %d\n", dp->cNamedArgs); ok_(__FILE__,line)(!dp->rgdispidNamedArgs, "dp->rgdispidNamedArgs = %p\n", dp->rgdispidNamedArgs); ok_(__FILE__,line)(vres != NULL, "vres == NULL\n"); @@ -1489,7 +1504,7 @@ static HRESULT WINAPI doccp(IDispatchEx *iface, DISPID dispIdMember, switch(dispIdMember) { case DISPID_HTMLDOCUMENTEVENTS_ONCLICK: CHECK_EXPECT(doccp_onclick); - test_cp_args(riid, wFlags, pdp, pVarResult, pei, puArgErr); + test_cp_args(riid, wFlags, pdp, pVarResult, pei, puArgErr, FALSE); break; default: ok(0, "unexpected call %d\n", dispIdMember); @@ -1501,13 +1516,32 @@ static HRESULT WINAPI doccp(IDispatchEx *iface, DISPID dispIdMember, CONNECTION_POINT_OBJ(doccp, DIID_HTMLDocumentEvents); +static HRESULT WINAPI doccp2(IDispatchEx *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pdp, + VARIANT *pVarResult, EXCEPINFO *pei, UINT *puArgErr) +{ + switch(dispIdMember) { + case DISPID_HTMLDOCUMENTEVENTS_ONCLICK: + CHECK_EXPECT(doccp2_onclick); + test_cp_args(riid, wFlags, pdp, pVarResult, pei, puArgErr, TRUE); + break; + default: + ok(0, "unexpected call %d\n", dispIdMember); + return E_NOTIMPL; + } + + return S_OK; +} + +CONNECTION_POINT_OBJ(doccp2, DIID_HTMLDocumentEvents2); + static HRESULT WINAPI doccp_onclick_cancel(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pdp, VARIANT *pVarResult, EXCEPINFO *pei, UINT *puArgErr) { switch(dispIdMember) { case DISPID_HTMLDOCUMENTEVENTS_ONCLICK: CHECK_EXPECT(doccp_onclick_cancel); - test_cp_args(riid, wFlags, pdp, pVarResult, pei, puArgErr); + test_cp_args(riid, wFlags, pdp, pVarResult, pei, puArgErr, FALSE); V_VT(pVarResult) = VT_BOOL; V_BOOL(pVarResult) = VARIANT_FALSE; break; @@ -1788,7 +1822,7 @@ static void set_body_html(IHTMLDocument2 *doc, const char *html) static void test_onclick(IHTMLDocument2 *doc) { - DWORD cp_cookie, elem2_cp_cookie; + DWORD events_cp_cookie, events2_cp_cookie, elem2_cp_cookie; IHTMLElement *div, *body; VARIANT v; HRESULT hres; @@ -1936,7 +1970,8 @@ static void test_onclick(IHTMLDocument2 *doc) CHECK_CALLED(document_onclick); CHECK_CALLED(invoke_onclick); - cp_cookie = register_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, (IUnknown*)&doccp_obj); + events_cp_cookie = register_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, (IUnknown*)&doccp_obj); + events2_cp_cookie = register_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents2, (IUnknown*)&doccp2_obj); elem_attach_event((IUnknown*)div, "onclick", (IDispatch*)&div_onclick_disp); doc_attach_event(doc, "onclick", (IDispatch*)&doc_onclick_attached_obj); @@ -1951,6 +1986,7 @@ static void test_onclick(IHTMLDocument2 *doc) SET_EXPECT(document_onclick); SET_EXPECT(doc_onclick_attached); SET_EXPECT(doccp_onclick); + SET_EXPECT(doccp2_onclick); SET_EXPECT(invoke_onclick); hres = IHTMLElement_click(div); @@ -1967,6 +2003,7 @@ static void test_onclick(IHTMLDocument2 *doc) CHECK_CALLED(document_onclick); CHECK_CALLED(doc_onclick_attached); CHECK_CALLED(doccp_onclick); + CHECK_CALLED(doccp2_onclick); CHECK_CALLED(invoke_onclick); elem2_cp_cookie = register_cp((IUnknown*)div, &DIID_HTMLElementEvents2, (IUnknown*)&elem2_cp_obj); @@ -1983,6 +2020,7 @@ static void test_onclick(IHTMLDocument2 *doc) SET_EXPECT(document_onclick); SET_EXPECT(doc_onclick_attached); SET_EXPECT(doccp_onclick); + SET_EXPECT(doccp2_onclick); SET_EXPECT(invoke_onclick); trace("click >>>\n"); @@ -2002,10 +2040,12 @@ static void test_onclick(IHTMLDocument2 *doc) CHECK_CALLED(document_onclick); CHECK_CALLED(doc_onclick_attached); CHECK_CALLED(doccp_onclick); + CHECK_CALLED(doccp2_onclick); CHECK_CALLED(invoke_onclick); unregister_cp((IUnknown*)div, &DIID_HTMLElementEvents2, elem2_cp_cookie); - unregister_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, cp_cookie); + unregister_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, events_cp_cookie); + unregister_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents2, events2_cp_cookie); V_VT(&v) = VT_NULL; hres = IHTMLElement_put_onclick(div, v);
1
0
0
0
Alexandre Julliard : configure: Disable gssapi also when linking with kerberos doesn't work.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: 08bededc307dcd91f32006f96dac1193c948f8b4 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=08bededc307dcd91f32006f9…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Dec 19 15:24:01 2019 +0100 configure: Disable gssapi also when linking with kerberos doesn't work. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=48314
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 382df5d14db2d101e89b36574bf343bef32750c4) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- configure | 3 +-- configure.ac | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 0ea311c109..0d00b17219 100755 --- a/configure +++ b/configure @@ -14464,8 +14464,6 @@ CPPFLAGS=$ac_save_CPPFLAGS test -z "$KRB5_CFLAGS" || KRB5_CFLAGS=`echo " $KRB5_CFLAGS" | sed 's/ -I\([^/]\)/ -I\$(top_builddir)\/\1/g'` test -z "$KRB5_LIBS" || KRB5_LIBS=`echo " $KRB5_LIBS" | sed 's/ -L\([^/]\)/ -L\$(top_builddir)\/\1/g'` -else - with_gssapi=${with_gssapi:-no} fi if test "x$ac_cv_lib_soname_krb5" = "x"; then : case "x$with_krb5" in @@ -14476,6 +14474,7 @@ This is an error since --with-krb5 was requested." "$LINENO" 5 ;; esac fi +test "x$ac_cv_lib_soname_krb5" != "x" || with_gssapi=${with_gssapi:-no} if test "x$with_gssapi" != "xno" then diff --git a/configure.ac b/configure.ac index 8493778066..9b2b4fd9d5 100644 --- a/configure.ac +++ b/configure.ac @@ -1702,11 +1702,10 @@ then else KRB5_CFLAGS="" fi]) -else - with_gssapi=${with_gssapi:-no} fi WINE_NOTICE_WITH(krb5,[test "x$ac_cv_lib_soname_krb5" = "x"], [libkrb5 ${notice_platform}development files not found (or too old), Kerberos won't be supported.]) +test "x$ac_cv_lib_soname_krb5" != "x" || with_gssapi=${with_gssapi:-no} dnl **** Check for gssapi **** if test "x$with_gssapi" != "xno"
1
0
0
0
Alexandre Julliard : winex11: Use the default color table for window surfaces on 8bpp displays.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: a21082bf0471f17dab2d2ab75def37088c04ac0b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=a21082bf0471f17dab2d2ab7…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Dec 19 17:48:24 2019 +0100 winex11: Use the default color table for window surfaces on 8bpp displays. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=48088
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 458e0ad5133c9a449e22688a89183f3a6ab286e4) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/winex11.drv/bitblt.c | 7 +-- dlls/winex11.drv/palette.c | 106 +++++++++++++++++++++++++++++++++++++++++++++ dlls/winex11.drv/x11drv.h | 1 + 3 files changed, 109 insertions(+), 5 deletions(-) Diff:
https://source.winehq.org/git/wine.git/?a=commitdiff;h=a21082bf0471f17dab2d…
1
0
0
0
Piotr Caban : msi: Fix component Action for shared components in CostFinalize.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: 03ba98305e708153d4238d113f3879a2bb206090 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=03ba98305e708153d4238d11…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Aug 12 16:24:26 2019 +0200 msi: Fix component Action for shared components in CostFinalize. Fixes regression in wow .NET4.6.2 installation. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit d95bffdadbf18b91c1bb15cc7132ae3b9f505f98) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msi/action.c | 14 +++++++++++--- dlls/msi/tests/install.c | 27 +++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 9407d36520..bba5936815 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -2023,13 +2023,21 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package) component->ActionRequest = INSTALLSTATE_UNKNOWN; } - TRACE("component %s (installed %d request %d action %d)\n", - debugstr_w(component->Component), component->Installed, component->ActionRequest, component->Action); - if (component->Action == INSTALLSTATE_LOCAL || component->Action == INSTALLSTATE_SOURCE) component->num_clients++; else if (component->Action == INSTALLSTATE_ABSENT) + { component->num_clients--; + + if (component->num_clients > 0) + { + TRACE("multiple clients uses %s - disallowing uninstallation\n", debugstr_w(component->Component)); + component->Action = INSTALLSTATE_UNKNOWN; + } + } + + TRACE("component %s (installed %d request %d action %d)\n", + debugstr_w(component->Component), component->Installed, component->ActionRequest, component->Action); } return ERROR_SUCCESS; diff --git a/dlls/msi/tests/install.c b/dlls/msi/tests/install.c index 9c8652b353..d3d8f91306 100644 --- a/dlls/msi/tests/install.c +++ b/dlls/msi/tests/install.c @@ -1209,7 +1209,9 @@ static const char shc_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" "s72\ti2\tS64\tS0\tS255\n" "CustomAction\tAction\n" - "TestComponentAction\t19\t\twrong component action on install\t\n"; + "TestComponentAction\t19\t\twrong component action on install\t\n" + "TestDisallowedAction\t19\t\twrong component action on disallowed remove\t\n" + "TestRemoveAction\t19\t\twrong component action on remove\t\n"; static const char shc_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" @@ -1219,6 +1221,27 @@ static const char shc_install_exec_seq_dat[] = "CostInitialize\t\t200\n" "FileCost\t\t300\n" "CostFinalize\t\t600\n" + "TestDisallowedAction\tREMOVE AND ($sharedcomponent <> -1)\t700\n" + "InstallValidate\t\t900\n" + "InstallInitialize\t\t1200\n" + "ProcessComponents\t\t1300\n" + "RemoveFiles\t\t1400\n" + "InstallFiles\t\t1500\n" + "TestComponentAction\tNOT REMOVE AND ($sharedcomponent <> 3)\t1600\n" + "RegisterProduct\t\t1700\n" + "PublishFeatures\t\t1800\n" + "PublishProduct\t\t1900\n" + "InstallFinalize\t\t2000\n"; + +static const char shc2_install_exec_seq_dat[] = + "Action\tCondition\tSequence\n" + "s72\tS255\tI2\n" + "InstallExecuteSequence\tAction\n" + "LaunchConditions\t\t100\n" + "CostInitialize\t\t200\n" + "FileCost\t\t300\n" + "CostFinalize\t\t600\n" + "TestRemoveAction\tREMOVE AND ($sharedcomponent <> 2)\t700\n" "InstallValidate\t\t900\n" "InstallInitialize\t\t1200\n" "ProcessComponents\t\t1300\n" @@ -1974,7 +1997,7 @@ static const msi_table shc2_tables[] = ADD_TABLE(shc_feature), ADD_TABLE(shc_feature_comp), ADD_TABLE(shc_custom_action), - ADD_TABLE(shc_install_exec_seq), + ADD_TABLE(shc2_install_exec_seq), ADD_TABLE(shc2_property) };
1
0
0
0
Damjan Jovanovic : gdiplus: GdipGraphicsClear() should overwrite pixels, not alpha blend.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: b4e12ea07f033e64a3e236d5f0f796a9e7e40c14 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=b4e12ea07f033e64a3e236d5…
Author: Damjan Jovanovic <damjan.jov(a)gmail.com> Date: Fri Dec 13 05:17:54 2019 +0200 gdiplus: GdipGraphicsClear() should overwrite pixels, not alpha blend. All sample code in the Python Pyglet library suffers from terrible text corruption, caused by the inability to erase the background between rendering sequential font glyphs, resulting in leftovers from previous letters mixing with the image of new letters. This is because it attempts to erase the background by calling GdipGraphicsClear() with ARGB color 0x00000000 (completely transparent black), and in our gdiplus alpha blending that into the background has no effect. It should be using CompositeModeSourceCopy to overwrite the background with that brush instead. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=30506
Signed-off-by: Damjan Jovanovic <damjan.jov(a)gmail.com> Signed-off-by: Vincent Povirk <vincent(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 3c8784bf9c1a897de021587437c5ec4f648c84a1) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/gdiplus/graphics.c | 4 ++++ dlls/gdiplus/tests/image.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 3216a3ea43..9ba0b15c77 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -4942,6 +4942,7 @@ GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics *graphics, ARGB color) GpSolidFill *brush; GpStatus stat; GpRectF wnd_rect; + CompositingMode prev_comp_mode; TRACE("(%p, %x)\n", graphics, color); @@ -4962,8 +4963,11 @@ GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics *graphics, ARGB color) return stat; } + GdipGetCompositingMode(graphics, &prev_comp_mode); + GdipSetCompositingMode(graphics, CompositingModeSourceCopy); GdipFillRectangle(graphics, (GpBrush*)brush, wnd_rect.X, wnd_rect.Y, wnd_rect.Width, wnd_rect.Height); + GdipSetCompositingMode(graphics, prev_comp_mode); GdipDeleteBrush((GpBrush*)brush); diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 5aec1c283a..414ef19253 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -5484,6 +5484,48 @@ todo_wine GdipDisposeImage((GpImage *)bitmap); } +static void test_graphics_clear(void) +{ + BYTE argb[8] = { 0x11,0x22,0x33,0x80, 0xff,0xff,0xff,0 }; + BYTE cleared[8] = { 0,0,0,0, 0,0,0,0 }; + BYTE *bits; + GpBitmap *bitmap; + GpGraphics *graphics; + BitmapData data; + GpStatus status; + int match; + + status = GdipCreateBitmapFromScan0(2, 1, 8, PixelFormat32bppARGB, argb, &bitmap); + expect(Ok, status); + + status = GdipGetImageGraphicsContext((GpImage*)bitmap, &graphics); + expect(Ok, status); + + status = GdipGraphicsClear(graphics, 0x00000000); + expect(Ok, status); + + status = GdipBitmapLockBits(bitmap, NULL, ImageLockModeRead, PixelFormat32bppARGB, &data); + expect(Ok, status); + ok(data.Width == 2, "expected 2, got %d\n", data.Width); + ok(data.Height == 1, "expected 1, got %d\n", data.Height); + ok(data.Stride == 8, "expected 8, got %d\n", data.Stride); + ok(data.PixelFormat == PixelFormat32bppARGB, "expected PixelFormat32bppARGB, got %d\n", data.PixelFormat); + match = !memcmp(data.Scan0, cleared, sizeof(cleared)); + ok(match, "bits don't match\n"); + if (!match) + { + bits = data.Scan0; + trace("format %#x, bits %02x,%02x,%02x,%02x %02x,%02x,%02x,%02x\n", PixelFormat32bppPARGB, + bits[0], bits[1], bits[2], bits[3], bits[4], bits[5], bits[6], bits[7]); + } + status = GdipBitmapUnlockBits(bitmap, &data); + expect(Ok, status); + + status = GdipDeleteGraphics(graphics); + expect(Ok, status); + GdipDisposeImage((GpImage *)bitmap); +} + START_TEST(image) { HMODULE mod = GetModuleHandleA("gdiplus.dll"); @@ -5559,6 +5601,7 @@ START_TEST(image) test_histogram(); test_imageabort(); test_GdipLoadImageFromStream(); + test_graphics_clear(); GdiplusShutdown(gdiplusToken); }
1
0
0
0
Dmitry Timoshkov : gdiplus/tests: Add some tests for GdipInitializePalette.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: aad05a928f7e76d605a1001421a5004d5b2e63db URL:
https://source.winehq.org/git/wine.git/?a=commit;h=aad05a928f7e76d605a10014…
Author: Dmitry Timoshkov <dmitry(a)baikal.ru> Date: Thu Jan 31 09:56:07 2019 +0800 gdiplus/tests: Add some tests for GdipInitializePalette. Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Vincent Povirk <vincent(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit b7aa42c0086dea2d1bb1ecaff6d1be011cc66c31) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/gdiplus/tests/image.c | 146 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 72a984a2ea..5aec1c283a 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -34,6 +34,8 @@ static GpStatus (WINAPI *pGdipBitmapGetHistogramSize)(HistogramFormat,UINT*); static GpStatus (WINAPI *pGdipBitmapGetHistogram)(GpBitmap*,HistogramFormat,UINT,UINT*,UINT*,UINT*,UINT*); static GpStatus (WINAPI *pGdipImageSetAbort)(GpImage*,GdiplusAbort*); +static GpStatus (WINGDIPAPI *pGdipInitializePalette)(ColorPalette*,PaletteType,INT,BOOL,GpBitmap*); + #define expect(expected, got) ok((got) == (expected), "Expected %d, got %d\n", (UINT)(expected), (UINT)(got)) #define expectf(expected, got) ok(fabs((expected) - (got)) < 0.0001, "Expected %f, got %f\n", (expected), (got)) @@ -5339,6 +5341,149 @@ static void test_GdipLoadImageFromStream(void) IStream_Release(stream); } +static BYTE *init_bitmap(UINT *width, UINT *height, UINT *stride) +{ + BYTE *src; + UINT i, j, scale; + + *width = 256; + *height = 256; + *stride = (*width * 3 + 3) & ~3; + trace("width %d, height %d, stride %d\n", *width, *height, *stride); + + src = HeapAlloc(GetProcessHeap(), 0, *stride * *height); + + scale = 256 / *width; + if (!scale) scale = 1; + + for (i = 0; i < *height; i++) + { + for (j = 0; j < *width; j++) + { + src[i * *stride + j*3 + 0] = scale * i; + src[i * *stride + j*3 + 1] = scale * (255 - (i+j)/2); + src[i * *stride + j*3 + 2] = scale * j; + } + } + + return src; +} + +static void test_GdipInitializePalette(void) +{ + GpStatus status; + BYTE *data; + GpBitmap *bitmap; + ColorPalette *palette; + UINT width, height, stride; + + pGdipInitializePalette = (void *)GetProcAddress(GetModuleHandleA("gdiplus.dll"), "GdipInitializePalette"); + if (!pGdipInitializePalette) + { + win_skip("GdipInitializePalette is not supported on this platform\n"); + return; + } + + data = init_bitmap(&width, &height, &stride); + + status = GdipCreateBitmapFromScan0(width, height, stride, PixelFormat24bppRGB, data, &bitmap); + expect(Ok, status); + + palette = GdipAlloc(sizeof(*palette) + sizeof(ARGB) * 255); + + palette->Flags = 0; + palette->Count = 15; + status = pGdipInitializePalette(palette, PaletteTypeOptimal, 16, FALSE, bitmap); + expect(GenericError, status); + + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeOptimal, 16, FALSE, NULL); + expect(InvalidParameter, status); + + memset(palette->Entries, 0x11, sizeof(ARGB) * 256); + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeCustom, 16, FALSE, NULL); + expect(Ok, status); + expect(0, palette->Flags); + expect(256, palette->Count); + expect(0x11111111, palette->Entries[0]); + expect(0x11111111, palette->Entries[128]); + expect(0x11111111, palette->Entries[255]); + + memset(palette->Entries, 0x11, sizeof(ARGB) * 256); + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeFixedBW, 0, FALSE, bitmap); + expect(Ok, status); +todo_wine + expect(0x200, palette->Flags); + expect(2, palette->Count); + expect(0xff000000, palette->Entries[0]); + expect(0xffffffff, palette->Entries[1]); + + memset(palette->Entries, 0x11, sizeof(ARGB) * 256); + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone8, 1, FALSE, NULL); + expect(Ok, status); +todo_wine + expect(0x300, palette->Flags); + expect(16, palette->Count); + expect(0xff000000, palette->Entries[0]); + expect(0xffc0c0c0, palette->Entries[8]); + expect(0xff008080, palette->Entries[15]); + + memset(palette->Entries, 0x11, sizeof(ARGB) * 256); + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone8, 1, FALSE, bitmap); + expect(Ok, status); +todo_wine + expect(0x300, palette->Flags); + expect(16, palette->Count); + expect(0xff000000, palette->Entries[0]); + expect(0xffc0c0c0, palette->Entries[8]); + expect(0xff008080, palette->Entries[15]); + + memset(palette->Entries, 0x11, sizeof(ARGB) * 256); + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeFixedHalftone252, 1, FALSE, bitmap); + expect(Ok, status); +todo_wine + expect(0x800, palette->Flags); + expect(252, palette->Count); + expect(0xff000000, palette->Entries[0]); + expect(0xff990066, palette->Entries[128]); + expect(0xffffffff, palette->Entries[251]); + + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeOptimal, 1, FALSE, bitmap); + expect(InvalidParameter, status); + + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeOptimal, 2, FALSE, bitmap); + expect(Ok, status); + expect(0, palette->Flags); + expect(2, palette->Count); + + palette->Flags = 0; + palette->Count = 256; + status = pGdipInitializePalette(palette, PaletteTypeOptimal, 16, FALSE, bitmap); + expect(Ok, status); + expect(0, palette->Flags); + expect(16, palette->Count); + + /* passing invalid enumeration palette type crashes under most Windows versions */ + + GdipFree(palette); + GdipDisposeImage((GpImage *)bitmap); +} + START_TEST(image) { HMODULE mod = GetModuleHandleA("gdiplus.dll"); @@ -5363,6 +5508,7 @@ START_TEST(image) pGdipBitmapGetHistogram = (void*)GetProcAddress(mod, "GdipBitmapGetHistogram"); pGdipImageSetAbort = (void*)GetProcAddress(mod, "GdipImageSetAbort"); + test_GdipInitializePalette(); test_png_color_formats(); test_supported_encoders(); test_CloneBitmapArea();
1
0
0
0
Damjan Jovanovic : msxml3: All string passed to IXMLDOMDocument_load() need to be URL-unescaped.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: 2a3f639372b8a1b938c54adf3c48e07b00248084 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2a3f639372b8a1b938c54adf…
Author: Damjan Jovanovic <damjan.jov(a)gmail.com> Date: Sun Dec 8 19:48:50 2019 +0200 msxml3: All string passed to IXMLDOMDocument_load() need to be URL-unescaped. msxml3 allows URL escape sequences even for C:\ style paths. eg. C:\Program%20Files\... Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=48242
Signed-off-by: Damjan Jovanovic <damjan.jov(a)gmail.com> Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit e2f2ad0e81b854b5b18d029d309708d8ea7dd7bb) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msxml3/bsc.c | 10 +++++++--- dlls/msxml3/tests/domdoc.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/dlls/msxml3/bsc.c b/dlls/msxml3/bsc.c index df4cf37346..0b9e679bda 100644 --- a/dlls/msxml3/bsc.c +++ b/dlls/msxml3/bsc.c @@ -253,15 +253,19 @@ HRESULT create_uri(const WCHAR *url, IUri **uri) WCHAR fullpath[MAX_PATH]; DWORD needed = ARRAY_SIZE(fileUrl); - if (!PathSearchAndQualifyW(url, fullpath, ARRAY_SIZE(fullpath))) + lstrcpynW(fileUrl, url, ARRAY_SIZE(fileUrl)); + UrlUnescapeW(fileUrl, NULL, NULL, URL_UNESCAPE_INPLACE); + + if (!PathSearchAndQualifyW(fileUrl, fullpath, ARRAY_SIZE(fullpath))) { WARN("can't find path\n"); return E_FAIL; } - if (FAILED(UrlCreateFromPathW(fullpath, fileUrl, &needed, 0))) + if (FAILED(UrlApplySchemeW(fullpath, fileUrl, &needed, URL_APPLY_GUESSSCHEME | URL_APPLY_GUESSFILE | + URL_APPLY_DEFAULT))) { - ERR("can't create url from path\n"); + ERR("Failed to apply url scheme.\n"); return E_FAIL; } url = fileUrl; diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index c4337ab191..aa4c7a2832 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -10219,6 +10219,7 @@ static void test_load(void) VARIANT src; HRESULT hr; void* ptr; + int n; GetTempPathA(MAX_PATH, path); strcat(path, "winetest.xml"); @@ -10268,6 +10269,22 @@ static void test_load(void) ok(hr == S_OK, "got 0x%08x\n", hr); SysFreeString(bstr1); + /* Regular local path with some URL encoded characters. */ + strcpy(path2, path); + n = strlen(path2); + strcpy(&path2[n-1], "%6C"); /* C:\path\to\winetest.xm%6C */ + test_doc_load_from_path(doc, path2); + + /* Both spaces and %20s work. */ + GetTempPathA(MAX_PATH, path2); + strcat(path2, "wine test.xml"); + write_to_file(path2, win1252xml); + test_doc_load_from_path(doc, path2); + GetTempPathA(MAX_PATH, path2); + strcat(path2, "wine%20test.xml"); + test_doc_load_from_path(doc, path2); + DeleteFileA(path2); + DeleteFileA(path); /* load from existing path, no xml content */
1
0
0
0
Gijs Vermeulen : shell32: Implement PathResolve.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: 2d6f58159576073ea58045d2e3c39a6f71285d5e URL:
https://source.winehq.org/git/wine.git/?a=commit;h=2d6f58159576073ea58045d2…
Author: Gijs Vermeulen <gijsvrm(a)codeweavers.com> Date: Wed Dec 11 11:16:17 2019 +0100 shell32: Implement PathResolve. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=48082
Signed-off-by: Gijs Vermeulen <gijsvrm(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit a5a2749cfe5fe6c73fa344ddc2f564bd6cb85356) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/shell32/shellpath.c | 69 +++++++++++++++++++++++++++++++++++++++++------- include/shlobj.h | 3 +-- 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index f08474b363..8dcdcd0dff 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -684,27 +684,78 @@ BOOL WINAPI PathQualifyAW(LPCVOID pszPath) return PathQualifyA(pszPath); } -static BOOL PathResolveA(LPSTR path, LPCSTR *paths, DWORD flags) +BOOL WINAPI PathFindOnPathExA(LPSTR,LPCSTR *,DWORD); +BOOL WINAPI PathFindOnPathExW(LPWSTR,LPCWSTR *,DWORD); +BOOL WINAPI PathFileExistsDefExtA(LPSTR,DWORD); +BOOL WINAPI PathFileExistsDefExtW(LPWSTR,DWORD); + +static BOOL PathResolveA(char *path, const char **dirs, DWORD flags) { - FIXME("(%s,%p,0x%08x),stub!\n", debugstr_a(path), paths, flags); - return FALSE; + BOOL is_file_spec = PathIsFileSpecA(path); + DWORD dwWhich = flags & PRF_DONTFINDLNK ? 0xf : 0xff; + + TRACE("(%s,%p,0x%08x)\n", debugstr_a(path), dirs, flags); + + if (flags & PRF_VERIFYEXISTS && !PathFileExistsA(path)) + { + if (PathFindOnPathExA(path, dirs, dwWhich)) + return TRUE; + if (PathFileExistsDefExtA(path, dwWhich)) + return TRUE; + if (!is_file_spec) GetFullPathNameA(path, MAX_PATH, path, NULL); + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + if (is_file_spec) + { + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + GetFullPathNameA(path, MAX_PATH, path, NULL); + + return TRUE; } -static BOOL PathResolveW(LPWSTR path, LPCWSTR *paths, DWORD flags) +static BOOL PathResolveW(WCHAR *path, const WCHAR **dirs, DWORD flags) { - FIXME("(%s,%p,0x%08x),stub!\n", debugstr_w(path), paths, flags); - return FALSE; + BOOL is_file_spec = PathIsFileSpecW(path); + DWORD dwWhich = flags & PRF_DONTFINDLNK ? 0xf : 0xff; + + TRACE("(%s,%p,0x%08x)\n", debugstr_w(path), dirs, flags); + + if (flags & PRF_VERIFYEXISTS && !PathFileExistsW(path)) + { + if (PathFindOnPathExW(path, dirs, dwWhich)) + return TRUE; + if (PathFileExistsDefExtW(path, dwWhich)) + return TRUE; + if (!is_file_spec) GetFullPathNameW(path, MAX_PATH, path, NULL); + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + if (is_file_spec) + { + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + GetFullPathNameW(path, MAX_PATH, path, NULL); + + return TRUE; } /************************************************************************* * PathResolve [SHELL32.51] */ -BOOL WINAPI PathResolveAW(LPVOID path, LPCVOID *paths, DWORD flags) +BOOL WINAPI PathResolveAW(void *path, const void **paths, DWORD flags) { if (SHELL_OsIsUnicode()) - return PathResolveW(path, (LPCWSTR*)paths, flags); + return PathResolveW(path, (const WCHAR **)paths, flags); else - return PathResolveA(path, (LPCSTR*)paths, flags); + return PathResolveA(path, (const char **)paths, flags); } /************************************************************************* diff --git a/include/shlobj.h b/include/shlobj.h index e963578d6c..f61dfa7d66 100644 --- a/include/shlobj.h +++ b/include/shlobj.h @@ -1717,10 +1717,9 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *); /* PathResolve flags */ #define PRF_VERIFYEXISTS 0x01 -#define PRF_EXECUTABLE 0x02 #define PRF_TRYPROGRAMEXTENSIONS 0x03 #define PRF_FIRSTDIRDEF 0x04 -#define PRF_DONTFINDLINK 0x08 +#define PRF_DONTFINDLNK 0x08 #define PRF_REQUIREABSOLUTE 0x10 VOID WINAPI PathGetShortPath(LPWSTR pszPath);
1
0
0
0
Paul Gofman : ntdll: Add DECLSPEC_HOTPATCH to NtProtectVirtualMemory().
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: bc846f4b8d70c42bdd70779f43ab5e3ca6ac29f0 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=bc846f4b8d70c42bdd70779f…
Author: Paul Gofman <gofmanp(a)gmail.com> Date: Wed Dec 4 14:02:12 2019 +0300 ntdll: Add DECLSPEC_HOTPATCH to NtProtectVirtualMemory(). Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=48077
Signed-off-by: Paul Gofman <gofmanp(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 923e62eb553596718df9e19b2a7b6482cc7deb15) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/ntdll/virtual.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index 90f5773787..8317ff29af 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -2677,8 +2677,8 @@ NTSTATUS WINAPI NtFreeVirtualMemory( HANDLE process, PVOID *addr_ptr, SIZE_T *si * NtProtectVirtualMemory (NTDLL.@) * ZwProtectVirtualMemory (NTDLL.@) */ -NTSTATUS WINAPI NtProtectVirtualMemory( HANDLE process, PVOID *addr_ptr, SIZE_T *size_ptr, - ULONG new_prot, ULONG *old_prot ) +NTSTATUS WINAPI DECLSPEC_HOTPATCH NtProtectVirtualMemory( HANDLE process, PVOID *addr_ptr, SIZE_T *size_ptr, + ULONG new_prot, ULONG *old_prot ) { struct file_view *view; sigset_t sigset;
1
0
0
0
Nikolay Sivov : user32/listbox: Update caret index on LB_SETSEL.
by Alexandre Julliard
20 Apr '20
20 Apr '20
Module: wine Branch: oldstable Commit: 8fa08b849080573a3cd15540652cdaed4729c26b URL:
https://source.winehq.org/git/wine.git/?a=commit;h=8fa08b849080573a3cd15540…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Wed Dec 11 15:17:50 2019 +0300 user32/listbox: Update caret index on LB_SETSEL. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=47459
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 832b748b06290d6c6fa0e1fcc7b332019a4cb80d) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/user32/listbox.c | 4 ++++ dlls/user32/tests/listbox.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/dlls/user32/listbox.c b/dlls/user32/listbox.c index e5b5059284..056839d459 100644 --- a/dlls/user32/listbox.c +++ b/dlls/user32/listbox.c @@ -2901,7 +2901,11 @@ LRESULT ListBoxWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam case LB_SETSEL: ret = LISTBOX_SetSelection( descr, lParam, wParam, FALSE ); if (ret != LB_ERR && wParam) + { descr->anchor_item = lParam; + if (lParam != -1) + LISTBOX_SetCaretIndex( descr, lParam, TRUE ); + } return ret; case LB_SETCURSEL: diff --git a/dlls/user32/tests/listbox.c b/dlls/user32/tests/listbox.c index a3d3ae611a..e2c8778b52 100644 --- a/dlls/user32/tests/listbox.c +++ b/dlls/user32/tests/listbox.c @@ -583,21 +583,29 @@ static void test_LB_SETSEL(void) ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == -1, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 0, "Unexpected caret index %d.\n", ret); ret = SendMessageA(list, LB_SETSEL, TRUE, 0); ok(ret == 0, "Unexpected return value %d.\n", ret); ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == 0, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 0, "Unexpected caret index %d.\n", ret); ret = SendMessageA(list, LB_SETSEL, TRUE, 1); ok(ret == 0, "Unexpected return value %d.\n", ret); ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == 1, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 1, "Unexpected caret index %d.\n", ret); ret = SendMessageA(list, LB_SETSEL, FALSE, 1); ok(ret == 0, "Unexpected return value %d.\n", ret); ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == 1, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 1, "Unexpected caret index %d.\n", ret); DestroyWindow(list); @@ -607,21 +615,29 @@ static void test_LB_SETSEL(void) ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == -1, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 0, "Unexpected caret index %d.\n", ret); ret = SendMessageA(list, LB_SETSEL, TRUE, 0); ok(ret == 0, "Unexpected return value %d.\n", ret); ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == 0, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 0, "Unexpected caret index %d.\n", ret); ret = SendMessageA(list, LB_SETSEL, TRUE, 1); ok(ret == 0, "Unexpected return value %d.\n", ret); ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == 1, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 1, "Unexpected caret index %d.\n", ret); ret = SendMessageA(list, LB_SETSEL, FALSE, 1); ok(ret == 0, "Unexpected return value %d.\n", ret); ret = SendMessageA(list, LB_GETANCHORINDEX, 0, 0); ok(ret == 1, "Unexpected anchor index %d.\n", ret); + ret = SendMessageA(list, LB_GETCARETINDEX, 0, 0); + ok(ret == 1, "Unexpected caret index %d.\n", ret); DestroyWindow(list); }
1
0
0
0
← Newer
1
...
39
40
41
42
43
44
45
...
102
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Results per page:
10
25
50
100
200