Dan Kegel : user32: Implement return value for DdeClientTransaction for XTYP_EXECUTE.
Alexandre Julliard
julliard at winehq.org
Tue Nov 13 08:34:38 CST 2007
Module: wine
Branch: master
Commit: aaa93200ad4f4880456fad0f4582e2e57695861f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aaa93200ad4f4880456fad0f4582e2e57695861f
Author: Dan Kegel <dank at 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;
More information about the wine-cvs
mailing list