Add a test case for clipboard functionality and fix some bugs revealed
by it.

diff --git a/server/clipboard.c b/server/clipboard.c
index 7d54e57..5b9d6b4 100644
--- a/server/clipboard.c
+++ b/server/clipboard.c
@@ -80,26 +80,22 @@
 
 static int set_clipboard_owner(user_handle_t win, int clear)
 {
-    if (cbthread == current)
-    {
-        if (!clear)
-        {
-            cbowner = current;
-            owner = win;
-        }
-        else
-        {
-            cbowner = 0;
-            owner = 0;
-        }
-        seqno++;
-        return 1;
-    }
-    else
+    if (cbowner && cbowner != current)
     {
         set_error(STATUS_WAS_LOCKED);
         return 0;
     }
+    else if (!clear)
+    {
+        owner = win;
+        cbowner = current;
+    }
+    else
+    {
+        owner = 0;
+        cbowner = NULL;
+    }
+    return 1;
 }
 
 
@@ -124,11 +120,24 @@
 
     if (req->flags & SET_CB_OPEN)
     {
+        if (cbthread)
+        {
+            /* clipboard already opened */
+            set_error(STATUS_WAS_LOCKED);
+            return;
+        }
+
         if (!set_clipboard_window(req->clipboard, 0))
             return;
     }
     else if (req->flags & SET_CB_CLOSE)
     {
+        if (cbthread != current)
+        {
+            set_win32_error(ERROR_CLIPBOARD_NOT_OPEN);
+            return;
+        }
+
         if (!set_clipboard_window(0, 1))
             return;
     }