[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: Re: shell32 - ShellDDEInit
From: Robert Shearman <rob () codeweavers ! com>
Date: 2005-04-28 9:04:49
Message-ID: 4270A731.9090107 () codeweavers ! com
[Download RAW message or body]
Steven Edwards wrote:
>The ReactOS guys are tired of seeing the fixme message.
>
>
But they forgot to include a FIXME for the unimplemented callback.
The attached untested patch is probably better.
Rob
["shelldde.diff" (text/x-patch)]
? dlls/shell32/dde.c
? dlls/shell32/version.res
Index: dlls/shell32/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/shell32/Makefile.in,v
retrieving revision 1.89
diff -u -p -r1.89 Makefile.in
--- dlls/shell32/Makefile.in 11 Apr 2005 13:04:41 -0000 1.89
+++ dlls/shell32/Makefile.in 28 Apr 2005 09:00:21 -0000
@@ -17,6 +17,7 @@ C_SRCS = \
clipboard.c \
control.c \
cpanelfolder.c \
+ dde.c \
dataobject.c \
debughlp.c \
dialogs.c \
Index: dlls/shell32/shell32_main.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_main.c,v
retrieving revision 1.148
diff -u -p -r1.148 shell32_main.c
--- dlls/shell32/shell32_main.c 11 Apr 2005 13:04:41 -0000 1.148
+++ dlls/shell32/shell32_main.c 28 Apr 2005 09:00:21 -0000
@@ -981,14 +981,6 @@ void WINAPI FreeIconList( DWORD dw )
}
-/*************************************************************************
- * ShellDDEInit (SHELL32.@)
- */
-void WINAPI ShellDDEInit(BOOL start)
-{
- FIXME("stub: %d\n", start);
-}
-
/***********************************************************************
* DllGetVersion [SHELL32.@]
*
--- /dev/null 2005-04-28 10:22:32.349471640 +0100
+++ dlls/shell32/dde.c 2005-04-28 09:54:11.863491387 +0100
@@ -0,0 +1,177 @@
+/*
+ * Shell DDE Handling
+ *
+ * Copyright 2004 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "ddeml.h"
+#include "shellapi.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(shell);
+
+/* String handles */
+static HSZ hszProgmanTopic;
+static HSZ hszProgmanService;
+static HSZ hszAsterisk;
+static HSZ hszShell;
+static HSZ hszAppProperties;
+static HSZ hszFolders;
+/* DDE Instance ID */
+static DWORD dwDDEInst;
+
+
+static inline BOOL Dde_OnConnect(HSZ hszTopic, HSZ hszService)
+{
+ if ((hszTopic == hszProgmanTopic) && (hszService == hszProgmanService))
+ return TRUE;
+ if ((hszTopic == hszProgmanTopic) && (hszService == hszAppProperties))
+ return TRUE;
+ if ((hszTopic == hszShell) && (hszService == hszFolders))
+ return TRUE;
+ if ((hszTopic == hszShell) && (hszService == hszAppProperties))
+ return TRUE;
+ return FALSE;
+}
+
+static inline void Dde_OnConnectConfirm(HCONV hconv, HSZ hszTopic, HSZ hszService)
+{
+ FIXME("stub\n");
+}
+
+static inline BOOL Dde_OnWildConnect(HSZ hszTopic, HSZ hszService)
+{
+ FIXME("stub\n");
+ return FALSE;
+}
+
+static inline HDDEDATA Dde_OnRequest(UINT uFmt, HCONV hconv, HSZ hszTopic,
+ HSZ hszItem)
+{
+ FIXME("stub\n");
+ return NULL;
+}
+
+static inline DWORD Dde_OnExecute(HCONV hconv, HSZ hszTopic, HDDEDATA hdata)
+{
+ char * pszCommand;
+
+ pszCommand = DdeAccessData(hdata, NULL);
+ if (!pszCommand)
+ return DDE_FNOTPROCESSED;
+
+ FIXME("stub: %s\n", pszCommand);
+
+ DdeUnaccessData(hdata);
+
+ return DDE_FNOTPROCESSED;
+}
+
+static inline void Dde_OnDisconnect(HCONV hconv)
+{
+ FIXME("stub\n");
+}
+
+static HDDEDATA CALLBACK DdeCallback(
+ UINT uType,
+ UINT uFmt,
+ HCONV hconv,
+ HSZ hsz1,
+ HSZ hsz2,
+ HDDEDATA hdata,
+ ULONG_PTR dwData1,
+ ULONG_PTR dwData2)
+{
+ switch (uType)
+ {
+ case XTYP_CONNECT:
+ return (HDDEDATA)Dde_OnConnect(hsz1, hsz2);
+ case XTYP_CONNECT_CONFIRM:
+ Dde_OnConnectConfirm(hconv, hsz1, hsz2);
+ return NULL;
+ case XTYP_WILDCONNECT:
+ return (HDDEDATA)Dde_OnWildConnect(hsz1, hsz2);
+ case XTYP_REQUEST:
+ return (HDDEDATA)Dde_OnRequest(uFmt, hconv, hsz1, hsz2);
+ case XTYP_EXECUTE:
+ return (HDDEDATA)Dde_OnExecute(hconv, hsz1, hdata);
+ case XTYP_DISCONNECT:
+ Dde_OnDisconnect(hconv);
+ return NULL;
+ default:
+ return NULL;
+ }
+}
+
+/*************************************************************************
+ * ShellDDEInit (SHELL32.@)
+ *
+ * Registers the Shell DDE services with the system so that applications
+ * can use them.
+ *
+ * PARAMS
+ * bInit [I] TRUE to initialize the services, FALSE to uninitalize.
+ *
+ * RETURNS
+ * Nothing.
+ */
+void WINAPI ShellDDEInit(BOOL bInit)
+{
+ TRACE("bInit = %s\n", bInit ? "TRUE" : "FALSE");
+
+ if (bInit)
+ {
+ static const WCHAR wszProgman[] = {'P','r','o','g','m','a','n',0};
+ static const WCHAR wszAsterisk[] = {'*',0};
+ static const WCHAR wszShell[] = {'S','h','e','l','l',0};
+ static const WCHAR wszAppProperties[] =
+ {'A','p','p','P','r','o','p','e','r','t','i','e','s',0};
+ static const WCHAR wszFolders[] = {'F','o','l','d','e','r','s',0};
+
+ DdeInitializeW(&dwDDEInst, DdeCallback, CBF_FAIL_ADVISES | CBF_FAIL_POKES, 0);
+
+ hszProgmanTopic = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE);
+ hszProgmanService = DdeCreateStringHandleW(dwDDEInst, wszProgman, CP_WINUNICODE);
+ hszAsterisk = DdeCreateStringHandleW(dwDDEInst, wszAsterisk, CP_WINUNICODE);
+ hszShell = DdeCreateStringHandleW(dwDDEInst, wszShell, CP_WINUNICODE);
+ hszAppProperties = DdeCreateStringHandleW(dwDDEInst, wszAppProperties, CP_WINUNICODE);
+ hszFolders = DdeCreateStringHandleW(dwDDEInst, wszFolders, CP_WINUNICODE);
+
+ DdeNameService(dwDDEInst, hszFolders, 0, DNS_REGISTER);
+ DdeNameService(dwDDEInst, hszProgmanService, 0, DNS_REGISTER);
+ DdeNameService(dwDDEInst, hszShell, 0, DNS_REGISTER);
+ }
+ else
+ {
+ /* unregister all services */
+ DdeNameService(dwDDEInst, 0, 0, DNS_UNREGISTER);
+
+ DdeFreeStringHandle(dwDDEInst, hszFolders);
+ DdeFreeStringHandle(dwDDEInst, hszAppProperties);
+ DdeFreeStringHandle(dwDDEInst, hszShell);
+ DdeFreeStringHandle(dwDDEInst, hszAsterisk);
+ DdeFreeStringHandle(dwDDEInst, hszProgmanService);
+ DdeFreeStringHandle(dwDDEInst, hszProgmanTopic);
+
+ DdeUninitialize(dwDDEInst);
+ }
+}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic