Huw Davies : ole32: Now that the consumer side of the clipboard separated from the main clipboard object , simplify the initialization code.

Alexandre Julliard julliard at winehq.org
Thu Apr 16 14:34:51 CDT 2009


Module: wine
Branch: master
Commit: d2156f3894f5a5bfa31191c6241ebdbf60692eb0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d2156f3894f5a5bfa31191c6241ebdbf60692eb0

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Apr 16 12:16:17 2009 +0100

ole32: Now that the consumer side of the clipboard separated from the main clipboard object, simplify the initialization code.

---

 dlls/ole32/clipboard.c |  117 +++++++++++++++++++++---------------------------
 1 files changed, 51 insertions(+), 66 deletions(-)

diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c
index a93ff85..b7527e9 100644
--- a/dlls/ole32/clipboard.c
+++ b/dlls/ole32/clipboard.c
@@ -813,31 +813,6 @@ static ULONG WINAPI snapshot_AddRef(IDataObject *iface)
     return InterlockedIncrement(&This->ref);
 }
 
-/***********************************************************************
- *                 destroy_clipbrd_window
- * Destroy the clipboard window and unregister its class
- */
-static void destroy_clipbrd_window(HWND hwnd)
-{
-    static const WCHAR ole32W[] = {'o','l','e','3','2',0};
-    HINSTANCE hinst = GetModuleHandleW(ole32W);
-
-    DestroyWindow(hwnd);
-    UnregisterClassW( clipbrd_wndclass, hinst );
-}
-
-static void OLEClipbrd_Destroy(ole_clipbrd* This)
-{
-    TRACE("()\n");
-
-    if (!This) return;
-
-    if ( This->window ) destroy_clipbrd_window(This->window);
-
-    IStream_Release(This->marshal_data);
-    HeapFree(GetProcessHeap(), 0, This);
-}
-
 /************************************************************************
  *      snapshot_Release
  */
@@ -1160,35 +1135,8 @@ static snapshot *snapshot_construct(DWORD seq_no)
 }
 
 /*********************************************************
- * Construct the OLEClipbrd class.
+ *               register_clipboard_formats
  */
-static ole_clipbrd* OLEClipbrd_Construct(void)
-{
-    ole_clipbrd* This;
-    HGLOBAL h;
-
-    This = HeapAlloc( GetProcessHeap(), 0, sizeof(*This) );
-    if (!This) return NULL;
-
-    This->latest_snapshot = NULL;
-    This->window = NULL;
-    This->src_data = NULL;
-    This->cached_enum = NULL;
-
-    h = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 0);
-    if(!h) goto error;
-
-    if(FAILED(CreateStreamOnHGlobal(h, TRUE, &This->marshal_data)))
-        goto error;
-
-    return This;
-
-error:
-    if(h) GlobalFree(h);
-    HeapFree(GetProcessHeap(), 0, This);
-    return NULL;
-}
-
 static void register_clipboard_formats(void)
 {
     static const WCHAR DataObjectW[] = { 'D','a','t','a','O','b','j','e','c','t',0 };
@@ -1209,15 +1157,40 @@ static void register_clipboard_formats(void)
  */
 void OLEClipbrd_Initialize(void)
 {
-  register_clipboard_formats();
+    register_clipboard_formats();
 
-  if ( !theOleClipboard )
-  {
-    TRACE("()\n");
-    theOleClipboard = OLEClipbrd_Construct();
-  }
-}
+    if ( !theOleClipboard )
+    {
+        ole_clipbrd* clipbrd;
+        HGLOBAL h;
+
+        TRACE("()\n");
+
+        clipbrd = HeapAlloc( GetProcessHeap(), 0, sizeof(*clipbrd) );
+        if (!clipbrd) return;
 
+        clipbrd->latest_snapshot = NULL;
+        clipbrd->window = NULL;
+        clipbrd->src_data = NULL;
+        clipbrd->cached_enum = NULL;
+
+        h = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 0);
+        if(!h)
+        {
+            HeapFree(GetProcessHeap(), 0, clipbrd);
+            return;
+        }
+
+        if(FAILED(CreateStreamOnHGlobal(h, TRUE, &clipbrd->marshal_data)))
+        {
+            GlobalFree(h);
+            HeapFree(GetProcessHeap(), 0, clipbrd);
+            return;
+        }
+
+        theOleClipboard = clipbrd;
+    }
+}
 
 /***********************************************************************
  * OLEClipbrd_UnInitialize()
@@ -1225,13 +1198,25 @@ void OLEClipbrd_Initialize(void)
  */
 void OLEClipbrd_UnInitialize(void)
 {
-  TRACE("()\n");
+    ole_clipbrd *clipbrd = theOleClipboard;
 
-  if ( theOleClipboard )
-  {
-    OLEClipbrd_Destroy( theOleClipboard );
-    theOleClipboard = NULL;
-  }
+    TRACE("()\n");
+
+    if ( clipbrd )
+    {
+        static const WCHAR ole32W[] = {'o','l','e','3','2',0};
+        HINSTANCE hinst = GetModuleHandleW(ole32W);
+
+        if ( clipbrd->window )
+        {
+            DestroyWindow(clipbrd->window);
+            UnregisterClassW( clipbrd_wndclass, hinst );
+        }
+
+        IStream_Release(clipbrd->marshal_data);
+        HeapFree(GetProcessHeap(), 0, clipbrd);
+        theOleClipboard = NULL;
+    }
 }
 
 /*********************************************************************




More information about the wine-cvs mailing list