Module: wine Branch: master Commit: aaa93200ad4f4880456fad0f4582e2e57695861f URL: http://source.winehq.org/git/wine.git/?a=commit;h=aaa93200ad4f4880456fad0f45...
Author: Dan Kegel dank@kegel.com Date: Fri Nov 9 06:45:51 2007 -0800
user32: Implement return value for DdeClientTransaction for XTYP_EXECUTE.
---
dlls/user32/dde_client.c | 9 +++++++++ dlls/user32/tests/dde.c | 7 ++----- 2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/dde_client.c b/dlls/user32/dde_client.c index 3bf7175..1c766ab 100644 --- a/dlls/user32/dde_client.c +++ b/dlls/user32/dde_client.c @@ -985,6 +985,15 @@ static WDML_QUEUE_STATE WDML_HandleReply(WDML_CONV* pConv, MSG* msg, HDDEDATA* h case WM_DDE_TERMINATE: qs = WDML_HandleIncomingTerminate(pConv, msg, hdd); break; + case WM_DDE_ACK: + /* This happens at end of DdeClientTransaction XTYP_EXECUTE + * Without this assignment, DdeClientTransaction's return value is undefined + * See also http://support.microsoft.com/kb/102574 + */ + *hdd = (HDDEDATA)TRUE; + if (ack) + *ack = DDE_FACK; + break; } break; case WDML_QS_BLOCK: diff --git a/dlls/user32/tests/dde.c b/dlls/user32/tests/dde.c index 044e003..e90d8c9 100644 --- a/dlls/user32/tests/dde.c +++ b/dlls/user32/tests/dde.c @@ -414,11 +414,8 @@ static void test_ddeml_client(void) op = DdeClientTransaction((LPBYTE)hdata, -1, conversation, NULL, 0, XTYP_EXECUTE, default_timeout, &res); ret = DdeGetLastError(client_pid); ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret); - todo_wine - { - ok(op == (HDDEDATA)TRUE, "Expected TRUE, got %p\n", op); - ok(res == DDE_FACK, "Expected DDE_FACK, got %d\n", res); - } + ok(op == (HDDEDATA)TRUE, "Expected TRUE, got %p\n", op); + ok(res == DDE_FACK, "Expected DDE_FACK, got %d\n", res);
/* XTYP_EXECUTE, no data */ res = 0xdeadbeef;