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