Author: pborobia
Date: Fri Sep  1 06:46:29 2006
New Revision: 23851
URL: 
http://svn.reactos.org/svn/reactos?rev=23851&view=rev
Log:
* Added clipboard  implementation in user32
* Added clipboard entries in nci tool
* Added lost clipboard definitions
* Shut up debug
Modified:
    branches/clipboard/dll/win32/user32/include/user32p.h
    branches/clipboard/dll/win32/user32/windows/clipboard.c
    branches/clipboard/include/reactos/win32k/ntuser.h
    branches/clipboard/subsystems/win32/win32k/ntuser/clipboard.c
    branches/clipboard/tools/nci/w32ksvc.db
Modified: branches/clipboard/dll/win32/user32/include/user32p.h
URL:
http://svn.reactos.org/svn/reactos/branches/clipboard/dll/win32/user32/incl…
==============================================================================
--- branches/clipboard/dll/win32/user32/include/user32p.h (original)
+++ branches/clipboard/dll/win32/user32/include/user32p.h Fri Sep  1 06:46:29 2006
@@ -76,8 +76,10 @@
 #define NtUserSetCaretBlinkTime(uMSeconds) \
   (BOOL)NtUserCallOneParam((DWORD)uMSeconds, ONEPARAM_ROUTINE_SETCARETBLINKTIME)
+/*
 #define NtUserEnumClipboardFormats(format) \
   (UINT)NtUserCallOneParam(format, ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS)
+*/
 #define NtUserWindowFromDC(hDC) \
   (HWND)NtUserCallOneParam((DWORD)hDC, ONEPARAM_ROUTINE_WINDOWFROMDC)
Modified: branches/clipboard/dll/win32/user32/windows/clipboard.c
URL:
http://svn.reactos.org/svn/reactos/branches/clipboard/dll/win32/user32/wind…
==============================================================================
--- branches/clipboard/dll/win32/user32/windows/clipboard.c (original)
+++ branches/clipboard/dll/win32/user32/windows/clipboard.c Fri Sep  1 06:46:29 2006
@@ -1,20 +1,25 @@
-
 /* $Id$
  *
  * PROJECT:         ReactOS user32.dll
  * FILE:            lib/user32/windows/clipboard.c
  * PURPOSE:         Input
  * PROGRAMMER:      Casper S. Hornstrup (chorns(a)users.sourceforge.net)
+ *                  Pablo Borobia <pborobia(a)gmail.com>
  * UPDATE HISTORY:
  *      09-05-2001  CSH  Created
+ *
  */
 /* INCLUDES ******************************************************************/
 #include <user32.h>
+#define NDEBUG
+
 #include <wine/debug.h>
+#define QUERY_SIZE 0
+
 /* FUNCTIONS *****************************************************************/
 /*
@@ -23,7 +28,8 @@
 BOOL STDCALL
 OpenClipboard(HWND hWndNewOwner)
 {
-   return NtUserOpenClipboard(hWndNewOwner, 0);
+       BOOL ret = NtUserOpenClipboard(hWndNewOwner, 0);
+    return ret;
 }
 /*
@@ -32,7 +38,9 @@
 BOOL STDCALL
 CloseClipboard(VOID)
 {
-   return NtUserCloseClipboard();
+    BOOL ret;
+    ret = NtUserCloseClipboard();
+    return ret;
 }
 /*
@@ -41,7 +49,8 @@
 INT STDCALL
 CountClipboardFormats(VOID)
 {
-   return NtUserCountClipboardFormats();
+    INT ret = NtUserCountClipboardFormats();
+    return ret;
 }
 /*
@@ -50,7 +59,7 @@
 BOOL STDCALL
 EmptyClipboard(VOID)
 {
-   return NtUserEmptyClipboard();
+    return NtUserEmptyClipboard();
 }
 /*
@@ -59,7 +68,8 @@
 UINT STDCALL
 EnumClipboardFormats(UINT format)
 {
-   return NtUserEnumClipboardFormats(format);
+    UINT ret = NtUserEnumClipboardFormats(format);
+    return ret;
 }
 /*
@@ -68,7 +78,31 @@
 HANDLE STDCALL
 GetClipboardData(UINT uFormat)
 {
-   return NtUserGetClipboardData(uFormat, 0);
+    HGLOBAL hGlobal = NULL;
+    PVOID pGlobal = NULL;
+    DWORD size = 0;
+
+    /* dealing with bitmap object */
+    if (uFormat != CF_BITMAP)
+    {
+        size = (DWORD)NtUserGetClipboardData(uFormat, QUERY_SIZE);
+
+        if (size)
+        {
+            hGlobal = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, size);
+            pGlobal = GlobalLock(hGlobal);
+
+            size = (DWORD)NtUserGetClipboardData(uFormat, (DWORD)pGlobal);
+
+            GlobalUnlock(hGlobal);
+        }
+    }
+    else
+    {
+        hGlobal = NtUserGetClipboardData(CF_BITMAP, !QUERY_SIZE);
+    }
+
+    return hGlobal;
 }
 /*
@@ -77,28 +111,32 @@
 INT STDCALL
 GetClipboardFormatNameA(UINT format, LPSTR lpszFormatName, int cchMaxCount)
 {
-   LPWSTR lpBuffer;
-   UNICODE_STRING FormatName;
-   INT Length;
-
-   lpBuffer = HEAP_alloc(cchMaxCount * sizeof(WCHAR));
-   if (!lpBuffer)
-   {
-      SetLastError(ERROR_OUTOFMEMORY);
-      return 0;
-   }
+    LPWSTR lpBuffer;
+    UNICODE_STRING FormatName;
+    INT Length;
+    ANSI_STRING ClassName;
+
+    ClassName.MaximumLength = cchMaxCount;
+    ClassName.Buffer = lpszFormatName;
+
+    lpBuffer = HEAP_alloc(cchMaxCount * sizeof(WCHAR));
+
+    if (!lpBuffer)
+    {
+        SetLastError(ERROR_OUTOFMEMORY);
+        return 0;
+    }
    FormatName.Length = 0;
    FormatName.MaximumLength = cchMaxCount * sizeof(WCHAR);
    FormatName.Buffer = lpBuffer;
+    /* we need a UNICODE string */
    Length = NtUserGetClipboardFormatName(format, &FormatName, cchMaxCount);
-   DPRINT("GetClipboardFormatNameA(%x): %S\n", format, lpBuffer);
-   HEAP_strcpyWtoA(lpszFormatName, lpBuffer, Length);
-   HEAP_free(lpBuffer);
-   DPRINT("GetClipboardFormatNameA(%x): returning %s\n", format,
lpszFormatName);
-
-   return Length;
+
+   HEAP_strcpyWtoA(lpszFormatName, FormatName.Buffer, Length);
+
+   return strlen(lpszFormatName);
 }
 /*
@@ -107,15 +145,15 @@
 INT STDCALL
 GetClipboardFormatNameW(UINT format, LPWSTR lpszFormatName, INT cchMaxCount)
 {
-   UNICODE_STRING FormatName;
-   ULONG Ret;
-
-   FormatName.Length = 0;
-   FormatName.MaximumLength = cchMaxCount * sizeof(WCHAR);
-   FormatName.Buffer = (PWSTR)lpszFormatName;
-   Ret = NtUserGetClipboardFormatName(format, &FormatName, cchMaxCount);
-   DPRINT("GetClipboardFormatNameW(%x): returning %S\n", format,
lpszFormatName);
-   return Ret;
+    UNICODE_STRING FormatName;
+    ULONG Ret;
+
+    FormatName.Length = 0;
+    FormatName.MaximumLength = cchMaxCount * sizeof(WCHAR);
+    FormatName.Buffer = (PWSTR)lpszFormatName;
+    Ret = NtUserGetClipboardFormatName(format, &FormatName, cchMaxCount);
+    return Ret;
+
 }
 /*
@@ -160,7 +198,8 @@
 INT STDCALL
 GetPriorityClipboardFormat(UINT *paFormatPriorityList, INT cFormats)
 {
-   return NtUserGetPriorityClipboardFormat(paFormatPriorityList, cFormats);
+    INT ret = NtUserGetPriorityClipboardFormat(paFormatPriorityList, cFormats);
+    return ret;
 }
 /*
@@ -169,18 +208,41 @@
 BOOL STDCALL
 IsClipboardFormatAvailable(UINT format)
 {
-   return NtUserIsClipboardFormatAvailable(format);
-}
-
-/*
- * @implemented
- */
+    BOOL ret = NtUserIsClipboardFormatAvailable(format);
+    return ret;
+}
+
+/*
+ * @implemented
+ */
+
 UINT STDCALL
 RegisterClipboardFormatA(LPCSTR lpszFormat)
 {
-   ULONG Ret = RegisterWindowMessageA(lpszFormat);
-   DPRINT("RegisterClipboardFormatA(%s) - %x\n", lpszFormat, Ret);
-   return Ret;
+    UINT ret = 0;
+    UNICODE_STRING usFormat = {0};
+
+    if (lpszFormat == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return 0;
+    }
+
+    /* check for "" */
+    if (*lpszFormat == 0) //NULL
+    {
+        SetLastError(ERROR_INVALID_NAME);
+        return 0;
+    }
+
+    ret = RtlCreateUnicodeStringFromAsciiz(&usFormat, lpszFormat);
+    if (ret)
+    {
+        ret = NtUserRegisterClipboardFormat(&usFormat); //(LPCWSTR)
+        RtlFreeUnicodeString(&usFormat);
+    }
+
+    return ret;
 }
 /*
@@ -189,9 +251,48 @@
 UINT STDCALL
 RegisterClipboardFormatW(LPCWSTR lpszFormat)
 {
-   ULONG Ret = RegisterWindowMessageW(lpszFormat);
-   DPRINT("RegisterClipboardFormatW(%S) - %x\n", lpszFormat, Ret);
-   return Ret;
+    UINT ret = 0;
+    UNICODE_STRING usFormat = {0};
+
+    if (lpszFormat == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return 0;
+    }
+
+    /* check for "" */
+    if (*lpszFormat == 0) //NULL
+    {
+        SetLastError(ERROR_INVALID_NAME);
+        return 0;
+    }
+
+    RtlInitUnicodeString(&usFormat, lpszFormat);
+    ret = NtUserRegisterClipboardFormat(&usFormat);
+    RtlFreeUnicodeString(&usFormat);
+
+    return ret;
+}
+
+HGLOBAL renderLocale (DWORD Locale)
+{
+       DWORD* pLocale;
+       HGLOBAL hGlobal;
+
+       hGlobal = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, sizeof(DWORD));
+
+       if(!hGlobal)
+       {
+           return hGlobal;
+       }
+
+    pLocale = (DWORD*)GlobalLock(hGlobal);
+
+       *pLocale = Locale;
+
+       GlobalUnlock(hGlobal);
+
+       return hGlobal;
 }
 /*
@@ -200,7 +301,41 @@
 HANDLE STDCALL
 SetClipboardData(UINT uFormat, HANDLE hMem)
 {
-   return NtUserSetClipboardData(uFormat, hMem, 0);
+       DWORD size;
+       LPVOID pMem;
+       HANDLE ret = NULL;
+
+       if (hMem == NULL)
+       {
+           return NtUserSetClipboardData(uFormat, 0, 0);
+    }
+
+       if (uFormat == CF_BITMAP)
+       {
+           /*FIXME: check if hMem is GDI handle
+           GlobalLock(hMem) fails && GetObject(hMem, 0, NULL) > 0
+           */
+           return NtUserSetClipboardData(uFormat, hMem, 0);
+       }
+
+    size = GlobalSize(hMem);
+    pMem = GlobalLock(hMem);
+
+       if ((pMem) && (size))
+       {
+       DPRINT1("[1]");
+       size = GlobalSize(hMem);
+       ret = NtUserSetClipboardData(uFormat, pMem, size);
+        //sholud i unlock hMmem?
+        GlobalUnlock(hMem);
+    }
+    else
+    {
+        DPRINT1("SetClipboardData fail\n");
+    }
+
+    return ret;
+
 }
 /*
@@ -220,3 +355,35 @@
 {
    return NtUserChangeClipboardChain(hWndRemove, hWndNewNext);
 }
+
+/*
+ * @unimplemented
+ */
+BOOL STDCALL
+AddClipboardFormatListener(HWND hwnd)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
+/*
+ * @unimplemented
+ */
+BOOL STDCALL
+RemoveClipboardFormatListener(HWND hwnd)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
+
+/*
+ * @unimplemented
+ */
+BOOL STDCALL
+GetUpdatedClipboardFormats(
+    PUINT lpuiFormats,
+    UINT cFormats,
+    PUINT pcFormatsOut)
+{
+    UNIMPLEMENTED;
+    return FALSE;
+}
Modified: branches/clipboard/include/reactos/win32k/ntuser.h
URL:
http://svn.reactos.org/svn/reactos/branches/clipboard/include/reactos/win32…
==============================================================================
--- branches/clipboard/include/reactos/win32k/ntuser.h (original)
+++ branches/clipboard/include/reactos/win32k/ntuser.h Fri Sep  1 06:46:29 2006
@@ -122,7 +122,12 @@
   HMENU hMenu,
   UINT uIDEnableItem,
   UINT uEnable);
-
+
+UINT
+NTAPI
+NtUserEnumClipboardFormats(
+  UINT format);
+
 DWORD
 NTAPI
 NtUserInsertMenuItem(
@@ -1439,6 +1444,11 @@
    WNDPROC wpExtra,
    DWORD Flags,
    HMENU hMenu);
+
+UINT
+NTAPI
+NtUserRegisterClipboardFormat(
+    PUNICODE_STRING format);
 BOOL
 NTAPI
Modified: branches/clipboard/subsystems/win32/win32k/ntuser/clipboard.c
URL:
http://svn.reactos.org/svn/reactos/branches/clipboard/subsystems/win32/win3…
==============================================================================
--- branches/clipboard/subsystems/win32/win32k/ntuser/clipboard.c (original)
+++ branches/clipboard/subsystems/win32/win32k/ntuser/clipboard.c Fri Sep  1 06:46:29 2006
@@ -9,7 +9,7 @@
 #include <w32k.h>
-#define DEBUG
+#define NDEBUG
 #include <debug.h>
 #define DATA_DELAYED_RENDER  0
@@ -472,7 +472,7 @@
     if (sendDrawClipboardMsg && WindowsChain)
     {
         /* only send message to the first window in the chain, then they'll do the
chain */
-        /* commented because it makes a crash in co_MsqSendMessage
+        /* commented because it makes a crash in co_MsqSendMessage
         ASSERT(WindowsChain->window);
         ASSERT(WindowsChain->window->hSelf);
         DPRINT1("Clipboard: sending WM_DRAWCLIPBOARD to %p\n",
WindowsChain->window->hSelf);
Modified: branches/clipboard/tools/nci/w32ksvc.db
URL:
http://svn.reactos.org/svn/reactos/branches/clipboard/tools/nci/w32ksvc.db?…
==============================================================================
--- branches/clipboard/tools/nci/w32ksvc.db (original)
+++ branches/clipboard/tools/nci/w32ksvc.db Fri Sep  1 06:46:29 2006
@@ -341,6 +341,7 @@
 NtUserEndDeferWindowPosEx               2
 NtUserEndMenu                           0
 NtUserEndPaint                          2
+NtUserEnumClipboardFormats              1
 NtUserEnumDisplayDevices                4
 NtUserEnumDisplayMonitors               5
 NtUserEnumDisplaySettings               4
@@ -459,6 +460,7 @@
 NtUserRealChildWindowFromPoint          3
 NtUserRedrawWindow                      4
 NtUserRegisterClassEx                   6
+NtUserRegisterClipboardFormat           1
 NtUserRegisterHotKey                    4
 NtUserRegisterTasklist                  1
 NtUserRegisterWindowMessage             1