Resend - Split Ole Win16/32
Steven Edwards
steven_ed4153 at yahoo.com
Sun Jun 8 20:10:59 CDT 2003
I didnt want this one to get lost in the vacation =)
Thanks
Steven
Changelog: Separate Win16 and Win32 support in Ole32
--- /dev/null Tue May 20 08:59:31 2003
+++ ole2_16.c Sun May 18 18:30:34 2003
@@ -0,0 +1,233 @@
+
+/*
+ * OLE2 library - 16 bit Interfaces
+ *
+ * Copyright 1995 Martin von Loewis
+ * Copyright 1999 Francis Beaudet
+ * Copyright 1999 Noel Borthwick
+ *
+ * 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 "config.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+#include "commctrl.h"
+#include "ole2.h"
+#include "ole2ver.h"
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "winuser.h"
+#include "winreg.h"
+#include "wownt32.h"
+
+#include "wine/winbase16.h"
+#include "wine/wingdi16.h"
+#include "wine/winuser16.h"
+#include "ole32_main.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+WINE_DECLARE_DEBUG_CHANNEL(accel);
+
+#define HICON_16(h32) (LOWORD(h32))
+#define HICON_32(h16) ((HICON)(ULONG_PTR)(h16))
+#define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16))
+
+/******************************************************************************
+ * These are static/global variables and internal data structures that the
+ * OLE module uses to maintain it's state.
+ */
+typedef struct tagDropTargetNode
+{
+ HWND hwndTarget;
+ IDropTarget* dropTarget;
+ struct tagDropTargetNode* prevDropTarget;
+ struct tagDropTargetNode* nextDropTarget;
+} DropTargetNode;
+
+typedef struct tagTrackerWindowInfo
+{
+ IDataObject* dataObject;
+ IDropSource* dropSource;
+ DWORD dwOKEffect;
+ DWORD* pdwEffect;
+ BOOL trackingDone;
+ HRESULT returnValue;
+
+ BOOL escPressed;
+ HWND curTargetHWND; /* window the mouse is hovering over */
+ HWND curDragTargetHWND; /* might be a ancestor of curTargetHWND */
+ IDropTarget* curDragTarget;
+} TrackerWindowInfo;
+
+typedef struct tagOleMenuDescriptor /* OleMenuDescriptor */
+{
+ HWND hwndFrame; /* The containers frame window */
+ HWND hwndActiveObject; /* The active objects window */
+ OLEMENUGROUPWIDTHS mgw; /* OLE menu group widths for the shared menu */
+ HMENU hmenuCombined; /* The combined menu */
+ BOOL bIsServerItem; /* True if the currently open popup belongs to the server
*/
+} OleMenuDescriptor;
+
+typedef struct tagOleMenuHookItem /* OleMenu hook item in per thread hook list */
+{
+ DWORD tid; /* Thread Id */
+ HANDLE hHeap; /* Heap this is allocated from */
+ HHOOK GetMsg_hHook; /* message hook for WH_GETMESSAGE */
+ HHOOK CallWndProc_hHook; /* message hook for WH_CALLWNDPROC */
+ struct tagOleMenuHookItem *next;
+} OleMenuHookItem;
+
+/*
+ * Name of our registered window class.
+ */
+static const char OLEDD_DRAGTRACKERCLASS[] = "WineDragDropTracker32";
+
+/******************************************************************************
+ * These are the prototypes of the utility methods used to manage a shared menu
+ */
+BOOL OLEMenu_InstallHooks( DWORD tid );
+BOOL OLEMenu_UnInstallHooks( DWORD tid );
+OleMenuHookItem * OLEMenu_IsHookInstalled( DWORD tid );
+static BOOL OLEMenu_FindMainMenuIndex( HMENU hMainMenu, HMENU hPopupMenu, UINT *pnPos );
+BOOL OLEMenu_SetIsServerMenu( HMENU hmenu, OleMenuDescriptor *pOleMenuDescriptor );
+LRESULT CALLBACK OLEMenu_CallWndProc(INT code, WPARAM wParam, LPARAM lParam);
+LRESULT CALLBACK OLEMenu_GetMsgProc(INT code, WPARAM wParam, LPARAM lParam);
+
+/******************************************************************************
+ * These are the prototypes of the OLE Clipboard initialization methods (in clipboard.c)
+ */
+void OLEClipbrd_UnInitialize();
+void OLEClipbrd_Initialize();
+
+/***********************************************************************
+ * RegisterDragDrop (OLE2.35)
+ */
+HRESULT WINAPI RegisterDragDrop16(
+ HWND16 hwnd,
+ LPDROPTARGET pDropTarget
+) {
+ FIXME("(0x%04x,%p),stub!\n",hwnd,pDropTarget);
+ return S_OK;
+}
+
+/***********************************************************************
+ * RevokeDragDrop (OLE2.36)
+ */
+HRESULT WINAPI RevokeDragDrop16(
+ HWND16 hwnd
+) {
+ FIXME("(0x%04x),stub!\n",hwnd);
+ return S_OK;
+}
+
+/**************************************************************************
+ * Internal methods to manage the shared OLE menu in response to the
+ * OLE***MenuDescriptor API
+ */
+
+/***********************************************************************
+ * OLEMenu_FindMainMenuIndex
+ *
+ * Used by OLEMenu API to find the top level group a menu item belongs to.
+ * On success pnPos contains the index of the item in the top level menu group
+ *
+ * RETURNS: TRUE if the ID was found, FALSE on failure
+ */
+static BOOL OLEMenu_FindMainMenuIndex( HMENU hMainMenu, HMENU hPopupMenu, UINT *pnPos )
+{
+ UINT i, nItems;
+
+ nItems = GetMenuItemCount( hMainMenu );
+
+ for (i = 0; i < nItems; i++)
+ {
+ HMENU hsubmenu;
+
+ /* Is the current item a submenu? */
+ if ( (hsubmenu = GetSubMenu(hMainMenu, i)) )
+ {
+ /* If the handle is the same we're done */
+ if ( hsubmenu == hPopupMenu )
+ {
+ if (pnPos)
+ *pnPos = i;
+ return TRUE;
+ }
+ /* Recursively search without updating pnPos */
+ else if ( OLEMenu_FindMainMenuIndex( hsubmenu, hPopupMenu, NULL ) )
+ {
+ if (pnPos)
+ *pnPos = i;
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+/******************************************************************************
+ * OleMetaFilePictFromIconAndLabel (OLE2.56)
+ *
+ * Returns a global memory handle to a metafile which contains the icon and
+ * label given.
+ * I guess the result of that should look somehow like desktop icons.
+ * If no hIcon is given, we load the icon via lpszSourceFile and iIconIndex.
+ * This code might be wrong at some places.
+ */
+HGLOBAL16 WINAPI OleMetaFilePictFromIconAndLabel16(
+ HICON16 hIcon,
+ LPCOLESTR16 lpszLabel,
+ LPCOLESTR16 lpszSourceFile,
+ UINT16 iIconIndex
+) {
+ METAFILEPICT16 *mf;
+ HGLOBAL16 hmf;
+ HDC hdc;
+
+ FIXME("(%04x, '%s', '%s', %d): incorrect metrics, please try to correct them !\n\n\n", hIcon,
lpszLabel, lpszSourceFile, iIconIndex);
+
+ if (!hIcon) {
+ if (lpszSourceFile) {
+ HINSTANCE16 hInstance = LoadLibrary16(lpszSourceFile);
+
+ /* load the icon at index from lpszSourceFile */
+ hIcon = HICON_16(LoadIconA(HINSTANCE_32(hInstance), (LPCSTR)(DWORD)iIconIndex));
+ FreeLibrary16(hInstance);
+ } else
+ return 0;
+ }
+
+ hdc = CreateMetaFileA(NULL);
+ DrawIcon(hdc, 0, 0, HICON_32(hIcon)); /* FIXME */
+ TextOutA(hdc, 0, 0, lpszLabel, 1); /* FIXME */
+ hmf = GlobalAlloc16(0, sizeof(METAFILEPICT16));
+ mf = (METAFILEPICT16 *)GlobalLock16(hmf);
+ mf->mm = MM_ANISOTROPIC;
+ mf->xExt = 20; /* FIXME: bogus */
+ mf->yExt = 20; /* dito */
+ mf->hMF = CloseMetaFile16(HDC_16(hdc));
+ return hmf;
+}
Index: ole2.c
===================================================================
RCS file: /home/wine/wine/dlls/ole32/ole2.c,v
retrieving revision 1.42
diff -u -r1.42 ole2.c
--- ole2.c 28 Jan 2003 01:06:20 -0000 1.42
+++ ole2.c 20 May 2003 12:58:43 -0000
@@ -1,6 +1,6 @@
/*
- * OLE2 library
+ * OLE2 library - 32 bit Interfaces
*
* Copyright 1995 Martin von Loewis
* Copyright 1999 Francis Beaudet
@@ -319,17 +319,6 @@
}
/***********************************************************************
- * RegisterDragDrop (OLE2.35)
- */
-HRESULT WINAPI RegisterDragDrop16(
- HWND16 hwnd,
- LPDROPTARGET pDropTarget
-) {
- FIXME("(0x%04x,%p),stub!\n",hwnd,pDropTarget);
- return S_OK;
-}
-
-/***********************************************************************
* RegisterDragDrop (OLE32.139)
*/
HRESULT WINAPI RegisterDragDrop(
@@ -373,16 +362,6 @@
}
/***********************************************************************
- * RevokeDragDrop (OLE2.36)
- */
-HRESULT WINAPI RevokeDragDrop16(
- HWND16 hwnd
-) {
- FIXME("(0x%04x),stub!\n",hwnd);
- return S_OK;
-}
-
-/***********************************************************************
* RevokeDragDrop (OLE32.141)
*/
HRESULT WINAPI RevokeDragDrop(
@@ -2212,50 +2191,6 @@
break;
}
}
-}
-
-/******************************************************************************
- * OleMetaFilePictFromIconAndLabel (OLE2.56)
- *
- * Returns a global memory handle to a metafile which contains the icon and
- * label given.
- * I guess the result of that should look somehow like desktop icons.
- * If no hIcon is given, we load the icon via lpszSourceFile and iIconIndex.
- * This code might be wrong at some places.
- */
-HGLOBAL16 WINAPI OleMetaFilePictFromIconAndLabel16(
- HICON16 hIcon,
- LPCOLESTR16 lpszLabel,
- LPCOLESTR16 lpszSourceFile,
- UINT16 iIconIndex
-) {
- METAFILEPICT16 *mf;
- HGLOBAL16 hmf;
- HDC hdc;
-
- FIXME("(%04x, '%s', '%s', %d): incorrect metrics, please try to correct them !\n\n\n", hIcon,
lpszLabel, lpszSourceFile, iIconIndex);
-
- if (!hIcon) {
- if (lpszSourceFile) {
- HINSTANCE16 hInstance = LoadLibrary16(lpszSourceFile);
-
- /* load the icon at index from lpszSourceFile */
- hIcon = HICON_16(LoadIconA(HINSTANCE_32(hInstance), (LPCSTR)(DWORD)iIconIndex));
- FreeLibrary16(hInstance);
- } else
- return 0;
- }
-
- hdc = CreateMetaFileA(NULL);
- DrawIcon(hdc, 0, 0, HICON_32(hIcon)); /* FIXME */
- TextOutA(hdc, 0, 0, lpszLabel, 1); /* FIXME */
- hmf = GlobalAlloc16(0, sizeof(METAFILEPICT16));
- mf = (METAFILEPICT16 *)GlobalLock16(hmf);
- mf->mm = MM_ANISOTROPIC;
- mf->xExt = 20; /* FIXME: bogus */
- mf->yExt = 20; /* dito */
- mf->hMF = CloseMetaFile16(HDC_16(hdc));
- return hmf;
}
/******************************************************************************
Index: ole16.c
===================================================================
RCS file: /home/wine/wine/dlls/ole32/ole16.c,v
retrieving revision 1.4
diff -u -r1.4 ole16.c
--- ole16.c 12 Apr 2003 00:09:14 -0000 1.4
+++ ole16.c 20 May 2003 12:59:07 -0000
@@ -384,37 +384,6 @@
return ret;
}
-/******************************************************************************
- * CLSIDFromProgID [COMPOBJ.61]
- * Converts a program id into the respective GUID. (By using a registry lookup)
- * RETURNS
- * riid associated with the progid
- */
-HRESULT WINAPI CLSIDFromProgID16(
- LPCOLESTR16 progid, /* [in] program id as found in registry */
- LPCLSID riid /* [out] associated CLSID */
-) {
- char *buf,buf2[80];
- DWORD buf2len;
- HRESULT err;
- HKEY xhkey;
-
- buf = HeapAlloc(GetProcessHeap(),0,strlen(progid)+8);
- sprintf(buf,"%s\\CLSID",progid);
- if ((err=RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&xhkey))) {
- HeapFree(GetProcessHeap(),0,buf);
- return CO_E_CLASSSTRING;
- }
- HeapFree(GetProcessHeap(),0,buf);
- buf2len = sizeof(buf2);
- if ((err=RegQueryValueA(xhkey,NULL,buf2,&buf2len))) {
- RegCloseKey(xhkey);
- return CO_E_CLASSSTRING;
- }
- RegCloseKey(xhkey);
- return __CLSIDFromStringA(buf2,riid);
-}
-
/***********************************************************************
* LookupETask (COMPOBJ.94)
*/
Index: storage32.c
===================================================================
RCS file: /home/wine/wine/dlls/ole32/storage32.c,v
retrieving revision 1.39
diff -u -r1.39 storage32.c
--- storage32.c 13 May 2003 00:41:58 -0000 1.39
+++ storage32.c 9 Jun 2003 01:06:20 -0000
@@ -6823,6 +6823,36 @@
return r;
}
+/******************************************************************************
+ * CLSIDFromProgID [COMPOBJ.61]
+ * Converts a program id into the respective GUID. (By using a registry lookup)
+ * RETURNS
+ * riid associated with the progid
+ */
+HRESULT WINAPI CLSIDFromProgID16(
+ LPCOLESTR16 progid, /* [in] program id as found in registry */
+ LPCLSID riid /* [out] associated CLSID */
+) {
+ char *buf,buf2[80];
+ DWORD buf2len;
+ HRESULT err;
+ HKEY xhkey;
+
+ buf = HeapAlloc(GetProcessHeap(),0,strlen(progid)+8);
+ sprintf(buf,"%s\\CLSID",progid);
+ if ((err=RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&xhkey))) {
+ HeapFree(GetProcessHeap(),0,buf);
+ return CO_E_CLASSSTRING;
+ }
+ HeapFree(GetProcessHeap(),0,buf);
+ buf2len = sizeof(buf2);
+ if ((err=RegQueryValueA(xhkey,NULL,buf2,&buf2len))) {
+ RegCloseKey(xhkey);
+ return CO_E_CLASSSTRING;
+ }
+ RegCloseKey(xhkey);
+ return __CLSIDFromStringA(buf2,riid);
+}
/*************************************************************************
* OLECONVERT_CreateCompObjStream [Internal]
Index: Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/ole32/Makefile.in,v
retrieving revision 1.30
diff -u -r1.30 Makefile.in
--- Makefile.in 15 May 2003 22:55:37 -0000 1.30
+++ Makefile.in 21 May 2003 00:27:03 -0000
@@ -31,7 +31,6 @@
marshal.c \
memlockbytes.c \
moniker.c \
- ole16.c \
ole2.c \
ole2stubs.c \
ole2impl.c \
@@ -42,12 +41,14 @@
rpc.c \
stg_bigblockfile.c \
stg_stream.c \
- storage.c \
storage32.c
C_SRCS16 = \
memlockbytes16.c \
- ole2nls.c
+ ole16.c \
+ ole2_16.c \
+ ole2nls.c \
+ storage.c
RC_SRCS = ole32res.rc version.rc
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
More information about the wine-patches
mailing list