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