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
May 2006
----- 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
3 participants
863 discussions
Start a n
N
ew thread
Robert Shearman : ole32: Add tests for item moniker.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: 68fceb0a7056bde15696597d16e228205f91c78e URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=68fceb0a7056bde15696597…
Author: Robert Shearman <rob(a)codeweavers.com> Date: Mon May 8 12:35:26 2006 +0100 ole32: Add tests for item moniker. --- dlls/ole32/tests/moniker.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 66 insertions(+), 0 deletions(-) diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index 1ba564a..22dd90b 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -193,6 +193,32 @@ static const BYTE expected_class_moniker 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, }; +static const BYTE expected_item_moniker_comparison_data[] = +{ + 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x21,0x00,0x54,0x00,0x45,0x00,0x53,0x00, + 0x54,0x00,0x00,0x00, +}; + +static const BYTE expected_item_moniker_saved_data[] = +{ + 0x02,0x00,0x00,0x00,0x21,0x00,0x05,0x00, + 0x00,0x00,0x54,0x65,0x73,0x74,0x00, +}; + +static const BYTE expected_item_moniker_marshal_data[] = +{ + 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, + 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x21,0x00,0x05,0x00, + 0x00,0x00,0x54,0x65,0x73,0x74,0x00, +}; + static void test_moniker( const char *testname, IMoniker *moniker, const BYTE *expected_moniker_marshal_data, size_t sizeof_expected_moniker_marshal_data, @@ -443,6 +469,45 @@ static void test_file_monikers(void) } } +static void test_item_moniker() +{ + HRESULT hr; + IMoniker *moniker; + DWORD moniker_type; + DWORD hash; + static const WCHAR wszDelimeter[] = {'!',0}; + static const WCHAR wszObjectName[] = {'T','e','s','t',0}; + + hr = CreateItemMoniker(wszDelimeter, wszObjectName, &moniker); + ok_ole_success(hr, CreateItemMoniker); + + test_moniker("item moniker", moniker, + expected_item_moniker_marshal_data, sizeof(expected_item_moniker_marshal_data), + expected_item_moniker_saved_data, sizeof(expected_item_moniker_saved_data), + expected_item_moniker_comparison_data, sizeof(expected_item_moniker_comparison_data)); + + /* Hashing */ + + hr = IMoniker_Hash(moniker, &hash); + ok_ole_success(hr, IMoniker_Hash); + + todo_wine + ok(hash == 0x73c, + "Hash value != 0x73c, instead was 0x%08lx\n", + hash); + + /* IsSystemMoniker test */ + + hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); + ok_ole_success(hr, IMoniker_IsSystemMoniker); + + ok(moniker_type == MKSYS_ITEMMONIKER, + "dwMkSys != MKSYS_ITEMMONIKER, instead was 0x%08lx", + moniker_type); + + IMoniker_Release(moniker); +} + START_TEST(moniker) { CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); @@ -450,6 +515,7 @@ START_TEST(moniker) test_MkParseDisplayName(); test_class_moniker(); test_file_monikers(); + test_item_moniker(); /* FIXME: test moniker creation funcs and parsing other moniker formats */
1
0
0
0
Robert Shearman : ole32: Make class moniker test more generic and test more properties.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: 26a3ff33d0a0609085fef5e5ad6c6cf5aee190b5 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=26a3ff33d0a0609085fef5e…
Author: Robert Shearman <rob(a)codeweavers.com> Date: Mon May 8 12:35:15 2006 +0100 ole32: Make class moniker test more generic and test more properties. --- dlls/ole32/tests/moniker.c | 194 ++++++++++++++++++++++++++++++++++++++------ 1 files changed, 166 insertions(+), 28 deletions(-) diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index a6aa906..1ba564a 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -163,39 +163,97 @@ static void test_MkParseDisplayName(void IBindCtx_Release(pbc); } -static const BYTE expected_moniker_data[] = +static const LARGE_INTEGER llZero; + +static const BYTE expected_class_moniker_marshal_data[] = { - 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, - 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x1a,0x03,0x00,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00, - 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, - 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, - 0x00,0x00,0x00,0x00, + 0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00, + 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x1a,0x03,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00, + 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x00,0x00,0x00,0x00, }; -static const LARGE_INTEGER llZero; +static const BYTE expected_class_moniker_saved_data[] = +{ + 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x00,0x00,0x00,0x00, +}; -static void test_class_moniker(void) +static const BYTE expected_class_moniker_comparison_data[] = +{ + 0x1a,0x03,0x00,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, + 0x05,0xe0,0x02,0x00,0x00,0x00,0x00,0x00, + 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, +}; + +static void test_moniker( + const char *testname, IMoniker *moniker, + const BYTE *expected_moniker_marshal_data, size_t sizeof_expected_moniker_marshal_data, + const BYTE *expected_moniker_saved_data, size_t sizeof_expected_moniker_saved_data, + const BYTE *expected_moniker_comparison_data, size_t sizeof_expected_moniker_comparison_data) { IStream * stream; - IMoniker * moniker; + IROTData * rotdata; HRESULT hr; HGLOBAL hglobal; LPBYTE moniker_data; DWORD moniker_size; DWORD i; BOOL same = TRUE; + BYTE buffer[128]; - hr = CreateClassMoniker(&CLSID_StdComponentCategoriesMgr, &moniker); - todo_wine { ok_ole_success(hr, CreateClassMoniker); } + /* IROTData::GetComparisonData test */ + + hr = IMoniker_QueryInterface(moniker, &IID_IROTData, (void **)&rotdata); + ok_ole_success(hr, IMoniker_QueryInterface(IID_IROTData)); + hr = IROTData_GetComparisonData(rotdata, buffer, sizeof(buffer), &moniker_size); + ok_ole_success(hr, IROTData_GetComparisonData); + + if (hr != S_OK) moniker_size = 0; + + /* first check we have the right amount of data */ + ok(moniker_size == sizeof_expected_moniker_comparison_data, + "%s: Size of comparison data differs (expected %d, actual %ld)\n", + testname, sizeof_expected_moniker_comparison_data, moniker_size); + + /* then do a byte-by-byte comparison */ + for (i = 0; i < min(moniker_size, sizeof_expected_moniker_comparison_data); i++) + { + if (expected_moniker_comparison_data[i] != buffer[i]) + { + same = FALSE; + break; + } + } + + ok(same, "%s: Comparison data differs\n", testname); + if (!same) + { + for (i = 0; i < moniker_size; i++) + { + if (i % 8 == 0) trace(" "); + trace("0x%02x,", buffer[i]); + if (i % 8 == 7) trace("\n"); + } + trace("\n"); + } + + IROTData_Release(rotdata); + hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); + + /* Saving */ - hr = CoMarshalInterface(stream, &IID_IMoniker, (IUnknown *)moniker, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); - todo_wine { ok_ole_success(hr, CoMarshalInterface); } + hr = IMoniker_Save(moniker, stream, TRUE); + ok_ole_success(hr, IMoniker_Save); hr = GetHGlobalFromStream(stream, &hglobal); ok_ole_success(hr, GetHGlobalFromStream); @@ -205,42 +263,122 @@ static void test_class_moniker(void) moniker_data = GlobalLock(hglobal); /* first check we have the right amount of data */ - todo_wine { - ok(moniker_size == sizeof(expected_moniker_data), - "Size of marshaled data differs (expected %d, actual %ld)\n", - sizeof(expected_moniker_data), moniker_size); - } + ok(moniker_size == sizeof_expected_moniker_saved_data, + "%s: Size of saved data differs (expected %d, actual %ld)\n", + testname, sizeof_expected_moniker_saved_data, moniker_size); /* then do a byte-by-byte comparison */ - for (i = 0; i < min(moniker_size, sizeof(expected_moniker_data)); i++) + for (i = 0; i < min(moniker_size, sizeof_expected_moniker_saved_data); i++) { - if (expected_moniker_data[i] != moniker_data[i]) + if (expected_moniker_saved_data[i] != moniker_data[i]) { same = FALSE; break; } } - ok(same, "Marshaled data differs\n"); + ok(same, "%s: Saved data differs\n", testname); if (!same) { - trace("Dumping marshaled moniker data:\n"); for (i = 0; i < moniker_size; i++) { + if (i % 8 == 0) trace(" "); trace("0x%02x,", moniker_data[i]); if (i % 8 == 7) trace("\n"); + } + trace("\n"); + } + + GlobalUnlock(hglobal); + + IStream_Release(stream); + + /* Marshaling tests */ + + hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); + ok_ole_success(hr, CreateStreamOnHGlobal); + + hr = CoMarshalInterface(stream, &IID_IMoniker, (IUnknown *)moniker, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); + ok_ole_success(hr, CoMarshalInterface); + + hr = GetHGlobalFromStream(stream, &hglobal); + ok_ole_success(hr, GetHGlobalFromStream); + + moniker_size = GlobalSize(hglobal); + + moniker_data = GlobalLock(hglobal); + + /* first check we have the right amount of data */ + ok(moniker_size == sizeof_expected_moniker_marshal_data, + "%s: Size of marshaled data differs (expected %d, actual %ld)\n", + testname, sizeof_expected_moniker_marshal_data, moniker_size); + + /* then do a byte-by-byte comparison */ + for (i = 0; i < min(moniker_size, sizeof_expected_moniker_marshal_data); i++) + { + if (expected_moniker_marshal_data[i] != moniker_data[i]) + { + same = FALSE; + break; + } + } + + ok(same, "%s: Marshaled data differs\n", testname); + if (!same) + { + for (i = 0; i < moniker_size; i++) + { if (i % 8 == 0) trace(" "); + trace("0x%02x,", moniker_data[i]); + if (i % 8 == 7) trace("\n"); } + trace("\n"); } GlobalUnlock(hglobal); IStream_Seek(stream, llZero, STREAM_SEEK_SET, NULL); hr = CoReleaseMarshalData(stream); - todo_wine { ok_ole_success(hr, CoReleaseMarshalData); } + ok_ole_success(hr, CoReleaseMarshalData); IStream_Release(stream); - if (moniker) IMoniker_Release(moniker); +} + +static void test_class_moniker(void) +{ + HRESULT hr; + IMoniker *moniker; + DWORD moniker_type; + DWORD hash; + + hr = CreateClassMoniker(&CLSID_StdComponentCategoriesMgr, &moniker); + todo_wine ok_ole_success(hr, CreateClassMoniker); + if (!moniker) return; + + test_moniker("class moniker", moniker, + expected_class_moniker_marshal_data, sizeof(expected_class_moniker_marshal_data), + expected_class_moniker_saved_data, sizeof(expected_class_moniker_saved_data), + expected_class_moniker_comparison_data, sizeof(expected_class_moniker_comparison_data)); + + /* Hashing */ + + hr = IMoniker_Hash(moniker, &hash); + ok_ole_success(hr, IMoniker_Hash); + + ok(hash == CLSID_StdComponentCategoriesMgr.Data1, + "Hash value != Data1 field of clsid, instead was 0x%08lx\n", + hash); + + /* IsSystemMoniker test */ + + hr = IMoniker_IsSystemMoniker(moniker, &moniker_type); + ok_ole_success(hr, IMoniker_IsSystemMoniker); + + ok(moniker_type == MKSYS_CLASSMONIKER, + "dwMkSys != MKSYS_CLASSMONIKER, instead was 0x%08lx", + moniker_type); + + IMoniker_Release(moniker); } static void test_file_moniker(WCHAR* path)
1
0
0
0
Robert Shearman : rpcrt4: Automatically resolve the endpoint.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: f7fa650d1bc228eed3716a6891f401502e8cc43d URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=f7fa650d1bc228eed3716a6…
Author: Robert Shearman <rob(a)codeweavers.com> Date: Mon May 8 12:35:02 2006 +0100 rpcrt4: Automatically resolve the endpoint. --- dlls/rpcrt4/rpc_message.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/dlls/rpcrt4/rpc_message.c b/dlls/rpcrt4/rpc_message.c index c0bff41..7646f98 100644 --- a/dlls/rpcrt4/rpc_message.c +++ b/dlls/rpcrt4/rpc_message.c @@ -470,6 +470,14 @@ RPC_STATUS WINAPI I_RpcSend(PRPC_MESSAGE } else { cif = pMsg->RpcInterfaceInformation; if (!cif) return RPC_S_INTERFACE_NOT_FOUND; /* ? */ + + if (!bind->Endpoint || !bind->Endpoint[0]) + { + TRACE("automatically resolving partially bound binding\n"); + status = RpcEpResolveBinding(bind, cif); + if (status != RPC_S_OK) return status; + } + status = RPCRT4_OpenBinding(bind, &conn, &cif->TransferSyntax, &cif->InterfaceId); } @@ -533,6 +541,14 @@ RPC_STATUS WINAPI I_RpcReceive(PRPC_MESS } else { cif = pMsg->RpcInterfaceInformation; if (!cif) return RPC_S_INTERFACE_NOT_FOUND; /* ? */ + + if (!bind->Endpoint || !bind->Endpoint[0]) + { + TRACE("automatically resolving partially bound binding\n"); + status = RpcEpResolveBinding(bind, cif); + if (status != RPC_S_OK) return status; + } + status = RPCRT4_OpenBinding(bind, &conn, &cif->TransferSyntax, &cif->InterfaceId); }
1
0
0
0
Marcus Meissner : wined3d: Fix possible buffer overflow.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: 80dc1f9cb3c417210ce9b32c2d1501100a4f6304 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=80dc1f9cb3c417210ce9b32…
Author: Marcus Meissner <marcus(a)jet.franken.de> Date: Sat May 6 23:25:18 2006 +0200 wined3d: Fix possible buffer overflow. Increase size of passed buffer to print into. --- dlls/wined3d/pixelshader.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c index e4397e8..a45bdb9 100644 --- a/dlls/wined3d/pixelshader.c +++ b/dlls/wined3d/pixelshader.c @@ -1225,8 +1225,8 @@ #endif break; case D3DSIO_TEX: { - char reg_dest[20]; - char reg_coord[20]; + char reg_dest[40]; + char reg_coord[40]; char reg_coord_swz[20] = ""; DWORD reg_dest_code; DWORD reg_sampler_code;
1
0
0
0
Jeff Latimer : usp10: Add ScriptTextOut functionality and restructure tests .
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: af67bc864e6940caf618fb742df47146b2305755 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=af67bc864e6940caf618fb7…
Author: Jeff Latimer <lats(a)yless4u.com.au> Date: Sun Apr 30 23:44:30 2006 +1000 usp10: Add ScriptTextOut functionality and restructure tests. --- dlls/usp10/tests/usp10.c | 382 +++++++++++++++++++++++++++++++++------------- dlls/usp10/usp10.c | 47 +++++- 2 files changed, 315 insertions(+), 114 deletions(-) Diff:
http://source.winehq.org/git/?p=wine.git;a=commitdiff;h=af67bc864e6940caf61…
1
0
0
0
Jason Green : wined3d: Eliminate duplicate function: vshader_program_dump_param().
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: 66ab4571964248c6b51650f4fe0298c740276ee1 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=66ab4571964248c6b51650f…
Author: Jason Green <jave27(a)gmail.com> Date: Fri Apr 28 12:21:59 2006 -0400 wined3d: Eliminate duplicate function: vshader_program_dump_param(). --- dlls/wined3d/vertexshader.c | 73 +------------------------------------------ 1 files changed, 1 insertions(+), 72 deletions(-) diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c index d211ea7..6ba9038 100644 --- a/dlls/wined3d/vertexshader.c +++ b/dlls/wined3d/vertexshader.c @@ -569,77 +569,6 @@ inline static const SHADER_OPCODE* vshad return NULL; } -inline static void vshader_program_dump_param(const DWORD param, int input) { - static const char* rastout_reg_names[] = { "oPos", "oFog", "oPts" }; - static const char swizzle_reg_chars[] = "xyzw"; - - DWORD reg = param & D3DSP_REGNUM_MASK; - DWORD regtype = shader_get_regtype(param); - - if ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) TRACE("-"); - - switch (regtype) { - case D3DSPR_TEMP: - TRACE("R[%lu]", reg); - break; - case D3DSPR_INPUT: - TRACE("v%lu", reg); - break; - case D3DSPR_CONST: - TRACE("C[%s%lu]", (param & D3DVS_ADDRMODE_RELATIVE) ? "a0.x + " : "", reg); - break; - case D3DSPR_ADDR: /*case D3DSPR_TEXTURE:*/ - TRACE("a[%lu]", reg); - break; - case D3DSPR_RASTOUT: - TRACE("%s", rastout_reg_names[reg]); - break; - case D3DSPR_ATTROUT: - TRACE("oD[%lu]", reg); - break; - case D3DSPR_TEXCRDOUT: - TRACE("oT[%lu]", reg); - break; - default: - FIXME("Unknown %lu %u reg %lu\n",regtype, D3DSPR_ATTROUT, reg); - break; - } - - if (!input) { - /** operand output */ - if ((param & D3DSP_WRITEMASK_ALL) != D3DSP_WRITEMASK_ALL) { - if (param & D3DSP_WRITEMASK_0) TRACE(".x"); - if (param & D3DSP_WRITEMASK_1) TRACE(".y"); - if (param & D3DSP_WRITEMASK_2) TRACE(".z"); - if (param & D3DSP_WRITEMASK_3) TRACE(".w"); - } - } else { - /** operand input */ - DWORD swizzle = (param & D3DVS_SWIZZLE_MASK) >> D3DVS_SWIZZLE_SHIFT; - DWORD swizzle_x = swizzle & 0x03; - DWORD swizzle_y = (swizzle >> 2) & 0x03; - DWORD swizzle_z = (swizzle >> 4) & 0x03; - DWORD swizzle_w = (swizzle >> 6) & 0x03; - /** - * swizzle bits fields: - * WWZZYYXX - */ - if ((D3DVS_NOSWIZZLE >> D3DVS_SWIZZLE_SHIFT) != swizzle) { /* ! D3DVS_NOSWIZZLE == 0xE4 << D3DVS_SWIZZLE_SHIFT */ - if (swizzle_x == swizzle_y && - swizzle_x == swizzle_z && - swizzle_x == swizzle_w) { - TRACE(".%c", swizzle_reg_chars[swizzle_x]); - } else { - TRACE(".%c%c%c%c", - swizzle_reg_chars[swizzle_x], - swizzle_reg_chars[swizzle_y], - swizzle_reg_chars[swizzle_z], - swizzle_reg_chars[swizzle_w]); - } - } - } -} - inline static void vshader_program_dump_vs_param(const DWORD param, int input) { static const char* rastout_reg_names[] = { "oPos", "oFog", "oPts" }; static const char swizzle_reg_chars[] = "xyzw"; @@ -1680,7 +1609,7 @@ #endif FIXME("unrecognized opcode: pos=%d token=%08lX\n", (pToken - 1) - This->baseShader.function, *(pToken - 1)); } FIXME("unrecognized opcode param: pos=%d token=%08lX what=", pToken - This->baseShader.function, *pToken); - vshader_program_dump_param(*pToken, i); + vshader_program_dump_vs_param(*pToken, i); TRACE("\n"); ++i; ++pToken;
1
0
0
0
Ivan Gyurdiev : wined3d: Share get_register_code().
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: 4b3079438b193e60d0b6af1479560b15a4cacaf0 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=4b3079438b193e60d0b6af1…
Author: Ivan Gyurdiev <ivg2(a)cornell.edu> Date: Fri Apr 28 05:20:48 2006 -0400 wined3d: Share get_register_code(). --- dlls/wined3d/pixelshader.c | 16 ++++------------ dlls/wined3d/vertexshader.c | 25 ++++++++++--------------- dlls/wined3d/wined3d_private.h | 5 +++++ 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c index 323fdf2..e4397e8 100644 --- a/dlls/wined3d/pixelshader.c +++ b/dlls/wined3d/pixelshader.c @@ -752,7 +752,7 @@ inline static void get_register_name(con static const char* rastout_reg_names[] = { "oC0", "oC1", "oC2", "oC3", "oDepth" }; DWORD reg = param & D3DSP_REGNUM_MASK; - DWORD regtype = ((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT); + DWORD regtype = shader_get_regtype(param); switch (regtype) { case D3DSPR_TEMP: @@ -978,7 +978,7 @@ inline static void pshader_program_get_r int i; for (i = 0; i < curOpcode->num_params; ++i) { - DWORD regtype = (((*pToken) & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT); + DWORD regtype = shader_get_regtype(*pToken); DWORD reg = (*pToken) & D3DSP_REGNUM_MASK; if (D3DSPR_TEXTURE == regtype) *texUsed |= (1 << reg); @@ -1614,14 +1614,8 @@ inline static void pshader_program_dump_ static const char* rastout_reg_names[] = { "oC0", "oC1", "oC2", "oC3", "oDepth" }; static const char swizzle_reg_chars[] = "rgba"; - /* the unknown mask is for bits not yet accounted for by any other mask... */ -#define UNKNOWN_MASK 0xC000 - - /* for registeres about 7 we have to add on bits 11 and 12 to get the correct register */ -#define EXTENDED_REG 0x1800 - DWORD reg = param & D3DSP_REGNUM_MASK; - DWORD regtype = ((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | ((param & EXTENDED_REG) >> 8); + DWORD regtype = shader_get_regtype(param); if (input) { if ( ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) || @@ -1737,9 +1731,7 @@ #define EXTENDED_REG 0x1800 inline static void pshader_program_dump_decl_usage( IWineD3DPixelShaderImpl *This, DWORD decl, DWORD param) { - DWORD regtype = ((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | - ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2); - + DWORD regtype = shader_get_regtype(param); TRACE("dcl_"); if (regtype == D3DSPR_SAMPLER) { diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c index a16532f..d211ea7 100644 --- a/dlls/wined3d/vertexshader.c +++ b/dlls/wined3d/vertexshader.c @@ -569,17 +569,12 @@ inline static const SHADER_OPCODE* vshad return NULL; } -inline static int vshader_program_get_regtype(const DWORD param) { - return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | - ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2)); -} - inline static void vshader_program_dump_param(const DWORD param, int input) { static const char* rastout_reg_names[] = { "oPos", "oFog", "oPts" }; static const char swizzle_reg_chars[] = "xyzw"; DWORD reg = param & D3DSP_REGNUM_MASK; - DWORD regtype = vshader_program_get_regtype(param); + DWORD regtype = shader_get_regtype(param); if ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) TRACE("-"); @@ -650,11 +645,11 @@ inline static void vshader_program_dump_ static const char swizzle_reg_chars[] = "xyzw"; DWORD reg = param & D3DSP_REGNUM_MASK; - DWORD regtype = vshader_program_get_regtype(param); + DWORD regtype = shader_get_regtype(param); if ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) TRACE("-"); - switch (regtype /*<< D3DSP_REGTYPE_SHIFT*/) { + switch (regtype) { case D3DSPR_TEMP: TRACE("r%lu", reg); break; @@ -733,7 +728,7 @@ inline static void vshader_program_dump_ inline static void vshader_program_dump_decl_usage( IWineD3DVertexShaderImpl *This, DWORD decl, DWORD param) { - DWORD regtype = vshader_program_get_regtype(param); + DWORD regtype = shader_get_regtype(param); TRACE("dcl_"); @@ -879,7 +874,7 @@ inline static void vshader_program_add_p static const char* hwrastout_reg_names[] = { "result.position", "result.fogcoord", "result.pointsize" }; DWORD reg = param & D3DSP_REGNUM_MASK; - DWORD regtype = vshader_program_get_regtype(param); + DWORD regtype = shader_get_regtype(param); char tmpReg[255]; BOOL is_color = FALSE; @@ -1218,7 +1213,7 @@ #define PNSTRCAT(_pgmStr, _tmpLine) { \ } else { /* Check to see if and tmp or addressing redisters are used */ if (curOpcode->num_params > 0) { - regtype = vshader_program_get_regtype(*pToken); + regtype = shader_get_regtype(*pToken); reg = ((*pToken) & D3DSP_REGNUM_MASK); if (D3DSPR_ADDR == regtype && nUseAddressRegister <= reg) nUseAddressRegister = reg + 1; if (D3DSPR_TEMP == regtype){ @@ -1227,7 +1222,7 @@ #define PNSTRCAT(_pgmStr, _tmpLine) { \ } ++pToken; for (i = 1; i < curOpcode->num_params; ++i) { - regtype = vshader_program_get_regtype(*pToken); + regtype = shader_get_regtype(*pToken); reg = ((*pToken) & D3DSP_REGNUM_MASK); if (D3DSPR_ADDR == regtype && nUseAddressRegister <= reg) nUseAddressRegister = reg + 1; if (D3DSPR_TEMP == regtype){ @@ -1501,7 +1496,7 @@ #endif continue; case D3DSIO_MOV: /* Address registers must be loaded with the ARL instruction */ - if (vshader_program_get_regtype(*pToken) == D3DSPR_ADDR) { + if (shader_get_regtype(*pToken) == D3DSPR_ADDR) { if (((*pToken) & D3DSP_REGNUM_MASK) < nUseAddressRegister) { strcpy(tmpLine, "ARL"); break; @@ -1696,9 +1691,9 @@ #endif /* TRACE(">> execting opcode: pos=%d opcode_name=%s token=%08lX\n", pToken - vshader->function, curOpcode->name, *pToken); */ for (i = 0; i < curOpcode->num_params; ++i) { DWORD reg = pToken[i] & D3DSP_REGNUM_MASK; - DWORD regtype = vshader_program_get_regtype(pToken[i]); + DWORD regtype = shader_get_regtype(pToken[i]); - switch (regtype /*<< D3DSP_REGTYPE_SHIFT*/) { + switch (regtype) { case D3DSPR_TEMP: /* TRACE("p[%d]=R[%d]\n", i, reg); */ p[i] = &R[reg]; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 72c30c2..0150820 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1203,6 +1203,11 @@ typedef struct IWineD3DBaseShaderImpl { IWineD3DBaseShaderClass baseShader; } IWineD3DBaseShaderImpl; +inline static int shader_get_regtype(const DWORD param) { + return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | + ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2)); +} + /***************************************************************************** * IDirect3DVertexShader implementation structure */
1
0
0
0
Thomas Kho : user: Fix behavior when selecting disabled menu items.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: b8338605794c357eb7c1d319f3eec62a2efff3ea URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=b8338605794c357eb7c1d31…
Author: Thomas Kho <tkho(a)ucla.edu> Date: Wed Apr 26 17:44:56 2006 -0700 user: Fix behavior when selecting disabled menu items. --- dlls/user/menu.c | 16 +++++++++++----- dlls/user/tests/menu.c | 6 +++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/dlls/user/menu.c b/dlls/user/menu.c index 11a02d8..8c6c315 100644 --- a/dlls/user/menu.c +++ b/dlls/user/menu.c @@ -2407,7 +2407,7 @@ static HMENU MENU_PtMenu( HMENU hMenu, P * * Execute a menu item (for instance when user pressed Enter). * Return the wID of the executed item. Otherwise, -1 indicating - * that no menu item was executed; + * that no menu item was executed, -2 if a popup is shown; * Have to receive the flags for the TrackPopupMenu options to avoid * sending unwanted message. * @@ -2444,7 +2444,10 @@ static INT MENU_ExecFocusedItem( MTRACKE } } else + { pmt->hCurrentMenu = MENU_ShowSubPopup(pmt->hOwnerWnd, hMenu, TRUE, wFlags); + return -2; + } return -1; } @@ -2538,7 +2541,10 @@ static INT MENU_ButtonUp( MTRACKER* pmt, if( item && (ptmenu->FocusedItem == id )) { if( !(item->fType & MF_POPUP) ) - return MENU_ExecFocusedItem( pmt, hPtMenu, wFlags); + { + INT executedMenuId = MENU_ExecFocusedItem( pmt, hPtMenu, wFlags); + return (executedMenuId < 0) ? -1 : executedMenuId; + } /* If we are dealing with the top-level menu */ /* and this is a click on an already "popped" item: */ @@ -3113,7 +3119,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, if (msg.wParam == '\r' || msg.wParam == ' ') { executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags); - fEndMenu = (executedMenuId != -1); + fEndMenu = (executedMenuId != -2); break; } @@ -3131,7 +3137,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, MENU_SelectItem( mt.hOwnerWnd, mt.hCurrentMenu, pos, TRUE, 0 ); executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags); - fEndMenu = (executedMenuId != -1); + fEndMenu = (executedMenuId != -2); } } break; @@ -3182,7 +3188,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, /* The return value is only used by TrackPopupMenu */ if (!(wFlags & TPM_RETURNCMD)) return TRUE; - if (executedMenuId == -1) executedMenuId = 0; + if (executedMenuId < 0) executedMenuId = 0; return executedMenuId; } diff --git a/dlls/user/tests/menu.c b/dlls/user/tests/menu.c index faa5892..07ad324 100644 --- a/dlls/user/tests/menu.c +++ b/dlls/user/tests/menu.c @@ -1509,7 +1509,7 @@ static struct menu_mouse_tests_s { { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */ { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, @@ -1517,11 +1517,11 @@ static struct menu_mouse_tests_s { { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },
1
0
0
0
Thomas Kho : user: Allow menu WndProc to recognize VK_[LR]MENU.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: 76104e1ccc2875dbb14331764913c07e75f3d0b7 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=76104e1ccc2875dbb143317…
Author: Thomas Kho <tkho(a)ucla.edu> Date: Wed Apr 26 17:44:28 2006 -0700 user: Allow menu WndProc to recognize VK_[LR]MENU. --- dlls/user/defwnd.c | 7 ++++--- dlls/user/tests/menu.c | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/dlls/user/defwnd.c b/dlls/user/defwnd.c index 5ea3ee4..cba8e76 100644 --- a/dlls/user/defwnd.c +++ b/dlls/user/defwnd.c @@ -527,7 +527,8 @@ static LRESULT DEFWND_DefWinProc( HWND h if( HIWORD(lParam) & KEYDATA_ALT ) { /* if( HIWORD(lParam) & ~KEYDATA_PREVSTATE ) */ - if( wParam == VK_MENU && !iMenuSysKey ) + if ( (wParam == VK_MENU || wParam == VK_LMENU + || wParam == VK_RMENU) && !iMenuSysKey ) iMenuSysKey = 1; else iMenuSysKey = 0; @@ -550,8 +551,8 @@ static LRESULT DEFWND_DefWinProc( HWND h case WM_KEYUP: case WM_SYSKEYUP: /* Press and release F10 or ALT */ - if (((wParam == VK_MENU) && iMenuSysKey) || - ((wParam == VK_F10) && iF10Key)) + if (((wParam == VK_MENU || wParam == VK_LMENU || wParam == VK_RMENU) + && iMenuSysKey) || ((wParam == VK_F10) && iF10Key)) SendMessageW( GetAncestor( hwnd, GA_ROOT ), WM_SYSCOMMAND, SC_KEYMENU, 0L ); iMenuSysKey = iF10Key = 0; break; diff --git a/dlls/user/tests/menu.c b/dlls/user/tests/menu.c index 96195fd..faa5892 100644 --- a/dlls/user/tests/menu.c +++ b/dlls/user/tests/menu.c @@ -1506,23 +1506,23 @@ static struct menu_mouse_tests_s { BOOL _todo_wine; } menu_tests[] = { /* for each test, send keys or clicks and check for menu visibility */ - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, TRUE }, /* test 0 */ + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */ { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, TRUE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, TRUE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, TRUE }, - { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_MOUSE, {{1, 2}, {0}}, {0}, TRUE, TRUE }, /* test 18 */
1
0
0
0
Thomas Kho : user: Extend menu conformance test.
by Alexandre Julliard
08 May '06
08 May '06
Module: wine Branch: refs/heads/master Commit: bde9ca2b63a5e2d04bcd6a1c94d7bf04f4922d02 URL:
http://source.winehq.org/git/?p=wine.git;a=commit;h=bde9ca2b63a5e2d04bcd6a1…
Author: Thomas Kho <tkho(a)ucla.edu> Date: Fri Apr 28 11:27:51 2006 -0700 user: Extend menu conformance test. --- dlls/user/tests/menu.c | 207 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 207 insertions(+), 0 deletions(-) diff --git a/dlls/user/tests/menu.c b/dlls/user/tests/menu.c index c2fd8f3..96195fd 100644 --- a/dlls/user/tests/menu.c +++ b/dlls/user/tests/menu.c @@ -52,8 +52,24 @@ static LRESULT WINAPI menu_check_wnd_pro return DefWindowProc(hwnd, msg, wparam, lparam); } +/* The MSVC headers ignore our NONAMELESSUNION requests so we have to define + * our own type */ +typedef struct +{ + DWORD type; + union + { + MOUSEINPUT mi; + KEYBDINPUT ki; + HARDWAREINPUT hi; + } u; +} TEST_INPUT; + /* globals to communicate between test and wndproc */ +static BOOL bMenuVisible; +static HMENU hMenus[4]; + #define MOD_SIZE 10 #define MOD_NRMENUS 8 @@ -1475,6 +1491,196 @@ void test_menu_search_bycommand( void ) DestroyMenu(hmenuSub); } +struct menu_item_pair_s { + UINT uMenu; /* 1 - top level menu, [0-Menu 1-Enabled 2-Disabled] + * 2 - 2nd level menu, [0-Popup 1-Enabled 2-Disabled] + * 3 - 3rd level menu, [0-Enabled 1-Disabled] */ + UINT uItem; +}; + +static struct menu_mouse_tests_s { + DWORD type; + struct menu_item_pair_s menu_item_pairs[5]; /* for mousing */ + WORD wVk[5]; /* keys */ + BOOL bMenuVisible; + BOOL _todo_wine; +} menu_tests[] = { + /* for each test, send keys or clicks and check for menu visibility */ + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, TRUE }, /* test 0 */ + { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, VK_ESCAPE, 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, TRUE }, + { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, + + { INPUT_MOUSE, {{1, 2}, {0}}, {0}, TRUE, TRUE }, /* test 18 */ + { INPUT_MOUSE, {{1, 1}, {0}}, {0}, FALSE, FALSE }, + { INPUT_MOUSE, {{1, 0}, {0}}, {0}, TRUE, TRUE }, + { INPUT_MOUSE, {{1, 1}, {0}}, {0}, FALSE, FALSE }, + { INPUT_MOUSE, {{1, 0}, {2, 2}, {0}}, {0}, TRUE, TRUE }, + { INPUT_MOUSE, {{2, 1}, {0}}, {0}, FALSE, FALSE }, + { INPUT_MOUSE, {{1, 0}, {2, 0}, {0}}, {0}, TRUE, TRUE }, + { INPUT_MOUSE, {{3, 0}, {0}}, {0}, FALSE, FALSE }, + { INPUT_MOUSE, {{1, 0}, {2, 0}, {0}}, {0}, TRUE, TRUE }, + { INPUT_MOUSE, {{3, 1}, {0}}, {0}, TRUE, TRUE }, + { INPUT_MOUSE, {{1, 1}, {0}}, {0}, FALSE, FALSE }, + { -1 } +}; + +static void send_key(WORD wVk) +{ + TEST_INPUT i[2]; + memset(&i, 0, 2*sizeof(INPUT)); + i[0].type = i[1].type = INPUT_KEYBOARD; + i[0].u.ki.wVk = i[1].u.ki.wVk = wVk; + i[1].u.ki.dwFlags = KEYEVENTF_KEYUP; + SendInput(2, (INPUT *) i, sizeof(INPUT)); +} + +static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi) +{ + HMENU hMenu = hMenus[mi->uMenu]; + TEST_INPUT i[3]; + MSG msg; + RECT r; + int screen_w = GetSystemMetrics(SM_CXSCREEN); + int screen_h = GetSystemMetrics(SM_CYSCREEN); + + GetMenuItemRect(mi->uMenu > 2 ? NULL : hWnd, hMenu, mi->uItem, &r); + + memset(&i, 0, 3*sizeof(INPUT)); + i[0].type = i[1].type = i[2].type = INPUT_MOUSE; + i[0].u.mi.dx = i[1].u.mi.dx = i[2].u.mi.dx + = ((r.left + 5) * 65535) / screen_w; + i[0].u.mi.dy = i[1].u.mi.dy = i[2].u.mi.dy + = ((r.top + 5) * 65535) / screen_h; + i[0].u.mi.dwFlags = i[1].u.mi.dwFlags = i[2].u.mi.dwFlags + = MOUSEEVENTF_ABSOLUTE; + i[0].u.mi.dwFlags |= MOUSEEVENTF_MOVE; + i[1].u.mi.dwFlags |= MOUSEEVENTF_LEFTDOWN; + i[2].u.mi.dwFlags |= MOUSEEVENTF_LEFTUP; + SendInput(3, (INPUT *) i, sizeof(INPUT)); + + /* hack to prevent mouse message buildup in Wine */ + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg ); +} + +static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter) +{ + int i, j; + HANDLE hWnd = lpParameter; + + Sleep(500); + /* mixed keyboard/mouse test */ + for (i = 0; menu_tests[i].type != -1; i++) + { + int elapsed = 0; + + if (menu_tests[i].type == INPUT_KEYBOARD) + for (j = 0; menu_tests[i].wVk[j] != 0; j++) + send_key(menu_tests[i].wVk[j]); + else + for (j = 0; menu_tests[i].menu_item_pairs[j].uMenu != 0; j++) + click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]); + + while (menu_tests[i].bMenuVisible != bMenuVisible) + { + if (elapsed > 200) + break; + elapsed += 20; + Sleep(20); + } + + if (menu_tests[i]._todo_wine) + { + todo_wine { + ok(menu_tests[i].bMenuVisible == bMenuVisible, "test %d\n", i); + } + } + else + ok(menu_tests[i].bMenuVisible == bMenuVisible, "test %d\n", i); + } + return 0; +} + +static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, + LPARAM lParam) +{ + switch (msg) { + case WM_ENTERMENULOOP: + bMenuVisible = TRUE; + break; + case WM_EXITMENULOOP: + bMenuVisible = FALSE; + break; + default: + return( DefWindowProcA( hWnd, msg, wParam, lParam ) ); + } + return 0; +} + +static void test_menu_input(void) { + MSG msg; + WNDCLASSA wclass; + HINSTANCE hInstance = GetModuleHandleA( NULL ); + HANDLE hThread, hWnd; + + wclass.lpszClassName = "MenuTestClass"; + wclass.style = CS_HREDRAW | CS_VREDRAW; + wclass.lpfnWndProc = WndProc; + wclass.hInstance = hInstance; + wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION ); + wclass.hCursor = LoadCursorA( NULL, (LPSTR)IDC_ARROW); + wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1); + wclass.lpszMenuName = 0; + wclass.cbClsExtra = 0; + wclass.cbWndExtra = 0; + assert (RegisterClassA( &wclass )); + assert (hWnd = CreateWindowA( wclass.lpszClassName, "MenuTest", + WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, + 400, 200, NULL, NULL, hInstance, NULL) ); + + /* fixed menus */ + hMenus[3] = CreatePopupMenu(); + AppendMenu(hMenus[3], MF_STRING, 0, "&Enabled"); + AppendMenu(hMenus[3], MF_STRING|MF_DISABLED, 0, "&Disabled"); + + hMenus[2] = CreatePopupMenu(); + AppendMenu(hMenus[2], MF_STRING|MF_POPUP, (UINT_PTR) hMenus[3], "&Popup"); + AppendMenu(hMenus[2], MF_STRING, 0, "&Enabled"); + AppendMenu(hMenus[2], MF_STRING|MF_DISABLED, 0, "&Disabled"); + + hMenus[1] = CreateMenu(); + AppendMenu(hMenus[1], MF_STRING|MF_POPUP, (UINT_PTR) hMenus[2], "&Menu"); + AppendMenu(hMenus[1], MF_STRING, 0, "&Enabled"); + AppendMenu(hMenus[1], MF_STRING|MF_DISABLED, 0, "&Disabled"); + + SetMenu(hWnd, hMenus[1]); + ShowWindow(hWnd, SW_SHOW); + UpdateWindow(hWnd); + + hThread = CreateThread(NULL, 0, test_menu_input_thread, hWnd, 0, NULL); + while(1) + { + if (WAIT_TIMEOUT != WaitForSingleObject(hThread, 50)) + break; + while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessageA(&msg); + } + DestroyWindow(hWnd); +} + START_TEST(menu) { pSetMenuInfo = @@ -1490,4 +1696,5 @@ START_TEST(menu) test_menu_iteminfo(); test_menu_search_bycommand(); test_menu_bmp_and_string(); + test_menu_input(); }
1
0
0
0
← Newer
1
...
69
70
71
72
73
74
75
...
87
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
Results per page:
10
25
50
100
200