[ros-diffs] [fireball] 47994: - Bring in server-side clipboard implementation.

fireball at svn.reactos.org fireball at svn.reactos.org
Sun Jul 11 08:13:10 UTC 2010


Author: fireball
Date: Sun Jul 11 08:13:09 2010
New Revision: 47994

URL: http://svn.reactos.org/svn/reactos?rev=47994&view=rev
Log:
- Bring in server-side clipboard implementation.

Added:
    branches/arwinss/reactos/subsystems/win32/win32k/wine/clipboard.c
      - copied, changed from r47984, vendor/wine/server/current/clipboard.c
Modified:
    branches/arwinss/reactos/subsystems/win32/win32k/include/user.h
    branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h
    branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild
    branches/arwinss/reactos/subsystems/win32/win32k/wine/stubs.c
    branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c

Modified: branches/arwinss/reactos/subsystems/win32/win32k/include/user.h
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/include/user.h?rev=47994&r1=47993&r2=47994&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/include/user.h [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/include/user.h [iso-8859-1] Sun Jul 11 08:13:09 2010
@@ -84,7 +84,7 @@
 
 /* clipboard functions */
 
-extern void cleanup_clipboard_thread( struct thread *thread );
+extern void cleanup_clipboard_thread( PTHREADINFO thread );
 
 /* hook functions */
 

Modified: branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h?rev=47994&r1=47993&r2=47994&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/include/winesup.h [iso-8859-1] Sun Jul 11 08:13:09 2010
@@ -184,5 +184,7 @@
 };
 
 PVOID NTAPI ExReallocPool(PVOID OldPtr, ULONG NewSize, ULONG OldSize);
+time_t SystemTimeToUnixTime(const PLARGE_INTEGER SystemTime);
+
 
 #endif

Modified: branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild?rev=47994&r1=47993&r2=47994&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/win32k.rbuild [iso-8859-1] Sun Jul 11 08:13:09 2010
@@ -138,6 +138,7 @@
 	<directory name="wine">
 		<file>atom.c</file>
 		<file>class.c</file>
+		<file>clipboard.c</file>
 		<file>directory.c</file>
 		<file>handle.c</file>
 		<file>hook.c</file>

Copied: branches/arwinss/reactos/subsystems/win32/win32k/wine/clipboard.c (from r47984, vendor/wine/server/current/clipboard.c)
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/wine/clipboard.c?p2=branches/arwinss/reactos/subsystems/win32/win32k/wine/clipboard.c&p1=vendor/wine/server/current/clipboard.c&r1=47984&r2=47994&rev=47994&view=diff
==============================================================================
--- vendor/wine/server/current/clipboard.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/wine/clipboard.c [iso-8859-1] Sun Jul 11 08:13:09 2010
@@ -18,29 +18,23 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include "config.h"
-#include "wine/port.h"
-
-#include <assert.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "ntstatus.h"
-#define WIN32_NO_STATUS
+#include <win32k.h>
+
+#include <limits.h>
+
+#include "object.h"
 #include "request.h"
-#include "object.h"
-#include "process.h"
 #include "user.h"
-#include "winuser.h"
-#include "winternl.h"
+
+#define NDEBUG
+#include <debug.h>
 
 struct clipboard
 {
     struct object  obj;              /* object header */
-    struct thread *open_thread;      /* thread id that has clipboard open */
+    PTHREADINFO    open_thread;      /* thread id that has clipboard open */
     user_handle_t  open_win;         /* window that has clipboard open */
-    struct thread *owner_thread;     /* thread id that owns the clipboard */
+    PTHREADINFO    owner_thread;     /* thread id that owns the clipboard */
     user_handle_t  owner_win;        /* window that owns the clipboard data */
     user_handle_t  viewer;           /* first window in clipboard viewer list */
     unsigned int   seqno;            /* clipboard change sequence number */
@@ -77,7 +71,7 @@
 {
     struct clipboard *clipboard = (struct clipboard *)obj;
 
-    fprintf( stderr, "Clipboard open_thread=%p open_win=%08x owner_thread=%p owner_win=%08x viewer=%08x seq=%u\n",
+    DPRINT1( "Clipboard open_thread=%p open_win=%08x owner_thread=%p owner_win=%08x viewer=%08x seq=%u\n",
              clipboard->open_thread, clipboard->open_win, clipboard->owner_thread,
              clipboard->owner_win, clipboard->viewer, clipboard->seqno );
 }
@@ -86,7 +80,7 @@
 static struct clipboard *get_process_clipboard(void)
 {
     struct clipboard *clipboard;
-    struct winstation *winstation = get_process_winstation( current->process, WINSTA_ACCESSCLIPBOARD );
+    struct winstation *winstation = get_process_winstation( PsGetCurrentProcessWin32Process(), WINSTA_ACCESSCLIPBOARD );
 
     if (!winstation) return NULL;
 
@@ -110,7 +104,7 @@
 
 
 /* Called when thread terminates to allow release of clipboard */
-void cleanup_clipboard_thread(struct thread *thread)
+void cleanup_clipboard_thread(PTHREADINFO thread)
 {
     struct clipboard *clipboard;
     struct winstation *winstation;
@@ -136,7 +130,7 @@
 
 static int set_clipboard_window( struct clipboard *clipboard, user_handle_t win, int clear )
 {
-    if (clipboard->open_thread && clipboard->open_thread != current)
+    if (clipboard->open_thread && clipboard->open_thread != PsGetCurrentThreadWin32Thread())
     {
         set_error(STATUS_WAS_LOCKED);
         return 0;
@@ -144,7 +138,7 @@
     else if (!clear)
     {
         clipboard->open_win = win;
-        clipboard->open_thread = current;
+        clipboard->open_thread = PsGetCurrentThreadWin32Thread();
     }
     else
     {
@@ -157,7 +151,7 @@
 
 static int set_clipboard_owner( struct clipboard *clipboard, user_handle_t win, int clear )
 {
-    if (clipboard->open_thread && clipboard->open_thread->process != current->process)
+    if (clipboard->open_thread && clipboard->open_thread->process != PsGetCurrentProcessWin32Process())
     {
         set_error(STATUS_WAS_LOCKED);
         return 0;
@@ -165,7 +159,7 @@
     else if (!clear)
     {
         clipboard->owner_win = win;
-        clipboard->owner_thread = current;
+        clipboard->owner_thread = PsGetCurrentThreadWin32Thread();
     }
     else
     {
@@ -178,7 +172,11 @@
 
 static int get_seqno( struct clipboard *clipboard )
 {
-    time_t tm = time(NULL);
+    time_t tm;
+    LARGE_INTEGER SystemTime;
+
+    KeQuerySystemTime(&SystemTime);
+    tm = SystemTimeToUnixTime(&SystemTime);
 
     if (!clipboard->owner_thread && (tm > (clipboard->seqno_timestamp + MINUPDATELAPSE)))
     {
@@ -192,6 +190,7 @@
 DECL_HANDLER(set_clipboard_info)
 {
     struct clipboard *clipboard = get_process_clipboard();
+    PTHREADINFO current = PsGetCurrentThreadWin32Thread();
 
     if (!clipboard) return;
 

Modified: branches/arwinss/reactos/subsystems/win32/win32k/wine/stubs.c
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/wine/stubs.c?rev=47994&r1=47993&r2=47994&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/wine/stubs.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/wine/stubs.c [iso-8859-1] Sun Jul 11 08:13:09 2010
@@ -598,11 +598,6 @@
     UNIMPLEMENTED;
 }
 
-DECL_HANDLER(set_clipboard_info)
-{
-    UNIMPLEMENTED;
-}
-
 DECL_HANDLER(open_token)
 {
     UNIMPLEMENTED;

Modified: branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c?rev=47994&r1=47993&r2=47994&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/wine/winesup.c [iso-8859-1] Sun Jul 11 08:13:09 2010
@@ -165,4 +165,17 @@
     return NewPtr;
 }
 
+#define DIFFTIME 0x19db1ded53e8000ULL
+
+time_t
+SystemTimeToUnixTime(const PLARGE_INTEGER SystemTime)
+{
+    ULARGE_INTEGER ULargeInt;
+
+    ULargeInt.QuadPart = SystemTime->QuadPart;
+    ULargeInt.QuadPart -= DIFFTIME;
+
+    return ULargeInt.QuadPart / 10000000;
+}
+
 /* EOF */




More information about the Ros-diffs mailing list