[WIN32SS]
[reactos.git] / reactos / win32ss / user / ntuser / clipboard.c
index e238e54..30ab59c 100644 (file)
@@ -58,7 +58,7 @@ IntFreeElementData(PCLIP pElement)
         !IS_DATA_SYNTHESIZED(pElement))
     {
         if (pElement->fGlobalHandle)
-            UserDeleteObject(pElement->hData, otClipBoardData);
+            UserDeleteObject(pElement->hData, TYPE_CLIPDATA);
         else if (pElement->fmt == CF_BITMAP || pElement->fmt == CF_PALETTE ||
                  pElement->fmt == CF_DSPBITMAP)
         {
@@ -184,7 +184,7 @@ IntSynthesizeDib(
                                                       NULL,
                                                       NULL,
                                                       &hMem,
-                                                      otClipBoardData,
+                                                      TYPE_CLIPDATA,
                                                       cjDataSize);
     if (!pClipboardData)
     {
@@ -211,6 +211,9 @@ IntSynthesizeDib(
     /* Add the clipboard data */
     IntAddFormatedData(pWinStaObj, CF_DIB, hMem, TRUE, TRUE);
 
+    /* Release the extra reference (UserCreateObject added 2 references) */
+    UserDereferenceObject(pClipboardData);
+
 cleanup:
     UserReleaseDC(NULL, hdc, FALSE);
 }
@@ -232,7 +235,7 @@ IntSynthesizeBitmap(PWINSTATION_OBJECT pWinStaObj, PCLIP pBmEl)
     if(!pDibEl->fGlobalHandle)
         return;
 
-    pMemObj = (PCLIPBOARDDATA)UserGetObject(gHandleTable, pDibEl->hData, otClipBoardData);
+    pMemObj = (PCLIPBOARDDATA)UserGetObject(gHandleTable, pDibEl->hData, TYPE_CLIPDATA);
     if (!pMemObj)
         return;
 
@@ -273,7 +276,7 @@ cleanup:
         UserReleaseDC(NULL, hdc, FALSE);
 
     if (pConvertedBmi)
-        DIB_FreeConvertedBitmapInfo(pConvertedBmi, pBmi);
+        DIB_FreeConvertedBitmapInfo(pConvertedBmi, pBmi, -1);
 }
 
 VOID static NTAPI
@@ -294,13 +297,16 @@ IntAddSynthesizedFormats(PWINSTATION_OBJECT pWinStaObj)
         PCLIPBOARDDATA pMemObj;
         HANDLE hMem;
 
-        pMemObj = (PCLIPBOARDDATA)UserCreateObject(gHandleTable, NULL, NULL, &hMem, otClipBoardData,
+        pMemObj = (PCLIPBOARDDATA)UserCreateObject(gHandleTable, NULL, NULL, &hMem, TYPE_CLIPDATA,
                                                    sizeof(CLIPBOARDDATA) + sizeof(LCID));
         if (pMemObj)
         {
             pMemObj->cbData = sizeof(LCID);
             *((LCID*)pMemObj->Data) = NtCurrentTeb()->CurrentLocale;
             IntAddFormatedData(pWinStaObj, CF_LOCALE, hMem, TRUE, TRUE);
+
+            /* Release the extra reference (UserCreateObject added 2 references) */
+            UserDereferenceObject(pMemObj);
         }
     }
 
@@ -1081,7 +1087,7 @@ NtUserConvertMemHandle(
     UserEnterExclusive();
 
     /* Create Clipboard data object */
-    pMemObj = UserCreateObject(gHandleTable, NULL, NULL, &hMem, otClipBoardData, sizeof(CLIPBOARDDATA) + cbData);
+    pMemObj = UserCreateObject(gHandleTable, NULL, NULL, &hMem, TYPE_CLIPDATA, sizeof(CLIPBOARDDATA) + cbData);
     if (!pMemObj)
         goto cleanup;
 
@@ -1099,10 +1105,13 @@ NtUserConvertMemHandle(
     }
     _SEH2_END;
 
+    /* Release the extra reference (UserCreateObject added 2 references) */
+    UserDereferenceObject(pMemObj);
+
     /* If we failed to copy data, remove handle */
     if (!pMemObj)
     {
-        UserDeleteObject(hMem, otClipBoardData);
+        UserDeleteObject(hMem, TYPE_CLIPDATA);
         hMem = NULL;
     }
 
@@ -1125,7 +1134,7 @@ NtUserCreateLocalMemHandle(
     UserEnterShared();
 
     /* Get Clipboard data object */
-    pMemObj = (PCLIPBOARDDATA)UserGetObject(gHandleTable, hMem, otClipBoardData);
+    pMemObj = (PCLIPBOARDDATA)UserGetObject(gHandleTable, hMem, TYPE_CLIPDATA);
     if (!pMemObj)
     {
         Status = STATUS_INVALID_HANDLE;