Always clearAllSelections since not clearing CLIPBOARD can get us into
an odd state.

diff --git a/dlls/x11drv/clipboard.c b/dlls/x11drv/clipboard.c
index 3f7e262..9a2c821 100644
--- a/dlls/x11drv/clipboard.c
+++ b/dlls/x11drv/clipboard.c
@@ -110,11 +110,8 @@
 
 static int selectionAcquired = 0;              /* Contains the current selection masks */
 static Window selectionWindow = None;          /* The top level X window which owns the selection */
-static BOOL clearAllSelections = FALSE;        /* Always lose all selections */
 static BOOL usePrimary = FALSE;                /* Use primary selection in additon to the clipboard selection */
 static Atom selectionCacheSrc = XA_PRIMARY;    /* The selection source from which the clipboard cache was filled */
-static Window PrimarySelectionOwner = None;    /* The window which owns the primary selection */
-static Window ClipboardSelectionOwner = None;  /* The window which owns the clipboard selection */
 
 INT X11DRV_RegisterClipboardFormat(LPCSTR FormatName);
 void X11DRV_EmptyClipboard(BOOL keepunowned);
@@ -282,9 +279,6 @@
     {
 	char buffer[20];
 	DWORD type, count = sizeof(buffer);
-	if(!RegQueryValueExA(hkey, "ClearAllSelections", 0, &type, buffer, &count))
-            clearAllSelections = IS_OPTION_TRUE( buffer[0] );
-        count = sizeof(buffer);
         if(!RegQueryValueExA(hkey, "UsePrimary", 0, &type, buffer, &count))
             usePrimary = IS_OPTION_TRUE( buffer[0] );
         RegCloseKey(hkey);
@@ -1923,12 +1917,9 @@
 /**************************************************************************
  *		X11DRV_CLIPBOARD_ReleaseSelection
  *
- * Release an XA_PRIMARY or XA_CLIPBOARD selection that we own, in response
- * to a SelectionClear event.
- * This can occur in response to another client grabbing the X selection.
- * If the XA_CLIPBOARD selection is lost, we relinquish XA_PRIMARY as well.
+ * Release XA_CLIPBOARD and XA_PRIMARY in response to a SelectionClear event.
  */
-void X11DRV_CLIPBOARD_ReleaseSelection(Atom selType, Window w, HWND hwnd)
+void X11DRV_CLIPBOARD_ReleaseSelection(Atom selType, Window w, HWND hwnd, Time time)
 {
     Display *display = thread_display();
 
@@ -1937,98 +1928,65 @@
     TRACE("event->window = %08x (selectionWindow = %08x) selectionAcquired=0x%08x\n",
 	  (unsigned)w, (unsigned)selectionWindow, (unsigned)selectionAcquired);
 
-    if (selectionAcquired)
+    if (selectionAcquired && (w == selectionWindow))
     {
-	if (w == selectionWindow)
+        CLIPBOARDINFO cbinfo;
+
+        /* completely give up the selection */
+        TRACE("Lost CLIPBOARD (+PRIMARY) selection\n");
+
+        X11DRV_CLIPBOARD_GetClipboardInfo(&cbinfo);
+
+        if (cbinfo.flags & CB_OWNER)
         {
-            /* If we're losing the CLIPBOARD selection, or if the preferences in .winerc
-             * dictate that *all* selections should be cleared on loss of a selection,
-             * we must give up all the selections we own.
-             */
-            if (clearAllSelections || (selType == x11drv_atom(CLIPBOARD)))
+            /* Since we're still the owner, this wasn't initiated by 
+               another Wine process */
+            if (OpenClipboard(hwnd))
             {
-                CLIPBOARDINFO cbinfo;
+                /* Destroy private objects */
+                SendMessageW(cbinfo.hWndOwner, WM_DESTROYCLIPBOARD, 0, 0);
 
-                /* completely give up the selection */
-                TRACE("Lost CLIPBOARD (+PRIMARY) selection\n");
-
-              /* We are completely giving up the selection. There is a
-               * potential race condition where the apps that now owns
-	       * the selection has already grabbed both selections. In
-	       * this case, if we clear any selection we may clear the
-	       * new owners selection. To prevent this common case we
-	       * try to open the clipboard. If we can't, we assume it
-	       * was a wine apps that took it and has taken both selections.
-	       * In this case, don't bother releasing the other selection.
-	       * Otherwise only release the selection if we still own it.
-               */
-                X11DRV_CLIPBOARD_GetClipboardInfo(&cbinfo);
-
-                if (cbinfo.flags & CB_OWNER)
-                {
-                    /* Since we're still the owner, this wasn't initiated by 
-		       another Wine process */
-                    if (OpenClipboard(hwnd))
-                    {
-                      /* We really lost CLIPBOARD but want to voluntarily lose PRIMARY */
-                      if ((selType == x11drv_atom(CLIPBOARD)) && (selectionAcquired & S_PRIMARY))
-                      {
-		          TRACE("Lost clipboard. Check if we need to release PRIMARY\n");
-                          wine_tsx11_lock();
-                          if (selectionWindow == XGetSelectionOwner(display,XA_PRIMARY))
-                          {
-		             TRACE("We still own PRIMARY. Releasing PRIMARY.\n");
-                             XSetSelectionOwner(display, XA_PRIMARY, None, CurrentTime);
-                          }
-		          else
-		             TRACE("We no longer own PRIMARY\n");
-                          wine_tsx11_unlock();
-                      }
-
-                      /* We really lost PRIMARY but want to voluntarily lose CLIPBOARD  */
-                      if ((selType == XA_PRIMARY) && (selectionAcquired & S_CLIPBOARD))
-                      {
-		          TRACE("Lost PRIMARY. Check if we need to release CLIPBOARD\n");
-                          wine_tsx11_lock();
-                          if (selectionWindow == XGetSelectionOwner(display,x11drv_atom(CLIPBOARD)))
-                          {
-		              TRACE("We still own CLIPBOARD. Releasing CLIPBOARD.\n");
-                              XSetSelectionOwner(display, x11drv_atom(CLIPBOARD), None, CurrentTime);
-                          }
-		          else
-		              TRACE("We no longer own CLIPBOARD\n");
-                          wine_tsx11_unlock();
-                      }
-
-                      /* Destroy private objects */
-                      SendMessageW(cbinfo.hWndOwner, WM_DESTROYCLIPBOARD, 0, 0);
-   
-                      /* Give up ownership of the windows clipboard */
-                      X11DRV_CLIPBOARD_ReleaseOwnership();
-
-                      CloseClipboard();
-                    }
-                }
-	        else
-                {
-                    TRACE("Lost selection to other Wine process.\n");
-                }
-
-                selectionWindow = None;
-                PrimarySelectionOwner = ClipboardSelectionOwner = 0;
-
-                X11DRV_EmptyClipboard(FALSE);
-
-                /* Reset the selection flags now that we are done */
-                selectionAcquired = S_NOSELECTION;
+                /* Give up ownership of the windows clipboard */
+                X11DRV_CLIPBOARD_ReleaseOwnership();
+                CloseClipboard();
             }
-            else if ( selType == XA_PRIMARY ) /* Give up only PRIMARY selection */
+        }
+
+        if ((selType == x11drv_atom(CLIPBOARD)) && (selectionAcquired & S_PRIMARY))
+        {
+            TRACE("Lost clipboard. Check if we need to release PRIMARY\n");
+
+            wine_tsx11_lock();
+            if (selectionWindow == XGetSelectionOwner(display, XA_PRIMARY))
             {
-                TRACE("Lost PRIMARY selection\n");
-                PrimarySelectionOwner = 0;
-                selectionAcquired &= ~S_PRIMARY;  /* clear S_PRIMARY mask */
+                TRACE("We still own PRIMARY. Releasing PRIMARY.\n");
+                XSetSelectionOwner(display, XA_PRIMARY, None, time);
             }
-	}
+            else
+                TRACE("We no longer own PRIMARY\n");
+            wine_tsx11_unlock();
+        }
+        else if ((selType == XA_PRIMARY) && (selectionAcquired & S_CLIPBOARD))
+        {
+            TRACE("Lost PRIMARY. Check if we need to release CLIPBOARD\n");
+
+            wine_tsx11_lock();
+            if (selectionWindow == XGetSelectionOwner(display,x11drv_atom(CLIPBOARD)))
+            {
+                TRACE("We still own CLIPBOARD. Releasing CLIPBOARD.\n");
+                XSetSelectionOwner(display, x11drv_atom(CLIPBOARD), None, time);
+            }
+            else
+                TRACE("We no longer own CLIPBOARD\n");
+            wine_tsx11_unlock();
+        }
+
+        selectionWindow = None;
+
+        X11DRV_EmptyClipboard(FALSE);
+
+        /* Reset the selection flags now that we are done */
+        selectionAcquired = S_NOSELECTION;
     }
 }
 
@@ -2485,14 +2443,6 @@
         {
             bLostSelection = TRUE;
         }
-        else
-        {
-            /* Update selection state */
-            if (saveSelectionState & S_PRIMARY)
-               PrimarySelectionOwner = selectionWindow;
-
-            ClipboardSelectionOwner = selectionWindow;
-        }
         wine_tsx11_unlock();
     }
     else
@@ -2506,7 +2456,6 @@
 
         X11DRV_CLIPBOARD_ReleaseOwnership();
         selectionAcquired = S_NOSELECTION;
-        ClipboardSelectionOwner = PrimarySelectionOwner = 0;
         selectionWindow = 0;
     }
 }
diff --git a/dlls/x11drv/event.c b/dlls/x11drv/event.c
index d4c8817..8c18a55 100644
--- a/dlls/x11drv/event.c
+++ b/dlls/x11drv/event.c
@@ -913,7 +913,7 @@
 static void EVENT_SelectionClear( HWND hWnd, XSelectionClearEvent *event )
 {
   if (event->selection == XA_PRIMARY || event->selection == x11drv_atom(CLIPBOARD))
-      X11DRV_CLIPBOARD_ReleaseSelection( event->selection, event->window, hWnd );
+      X11DRV_CLIPBOARD_ReleaseSelection( event->selection, event->window, hWnd, event->time );
 }
 
 /***********************************************************************
diff --git a/dlls/x11drv/x11drv.h b/dlls/x11drv/x11drv.h
index 5d41f42..aa021f2 100644
--- a/dlls/x11drv/x11drv.h
+++ b/dlls/x11drv/x11drv.h
@@ -483,7 +483,7 @@
 #define CF_FLAG_SYNTHESIZED  8 /* Implicitly converted data */
 
 extern void X11DRV_InitClipboard(void);
-extern void X11DRV_CLIPBOARD_ReleaseSelection(Atom selType, Window w, HWND hwnd);
+extern void X11DRV_CLIPBOARD_ReleaseSelection(Atom selType, Window w, HWND hwnd, Time time);
 extern INT X11DRV_CountClipboardFormats(void);
 extern UINT X11DRV_EnumClipboardFormats(UINT wFormat);
 extern LPWINE_CLIPFORMAT X11DRV_CLIPBOARD_LookupFormat(WORD wID);
diff --git a/documentation/samples/config b/documentation/samples/config
index c2751ae..b6d2d67 100644
--- a/documentation/samples/config
+++ b/documentation/samples/config
@@ -154,7 +154,6 @@
 "SaveOnlyUpdatedKeys" = "Y"
 
 [Clipboard]
-"ClearAllSelections" = "0"
 "UsePrimary" = "0"
 
 ; List of all directories directly contain .AFM files