From: Colin Harrison <colin.harri...@virgin.net>

When you take ownership of a selection you should always check you got
it (X11 ICCCM gospel).

Copyright (C) Colin Harrison 2005-2008
http://www.straightrunning.com/XmingNotes/
http://sourceforge.net/projects/xming/

Signed-off-by: Jon TURNEY <jon.tur...@dronecode.org.uk>
---
 hw/xwin/winclipboardthread.c  |    6 ++++--
 hw/xwin/winclipboardwndproc.c |   10 ++++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/hw/xwin/winclipboardthread.c b/hw/xwin/winclipboardthread.c
index c1e8e13..9040f40 100644
--- a/hw/xwin/winclipboardthread.c
+++ b/hw/xwin/winclipboardthread.c
@@ -273,7 +273,8 @@ winClipboardProc (void *pvNotUsed)
       /* PRIMARY */
       iReturn = XSetSelectionOwner (pDisplay, XA_PRIMARY,
                                    iWindow, CurrentTime);
-      if (iReturn == BadAtom || iReturn == BadWindow)
+      if (iReturn == BadAtom || iReturn == BadWindow ||
+         XGetSelectionOwner (pDisplay, XA_PRIMARY) != iWindow)
        {
          ErrorF ("winClipboardProc - Could not set PRIMARY owner\n");
          pthread_exit (NULL);
@@ -282,7 +283,8 @@ winClipboardProc (void *pvNotUsed)
       /* CLIPBOARD */
       iReturn = XSetSelectionOwner (pDisplay, atomClipboard,
                                    iWindow, CurrentTime);
-      if (iReturn == BadAtom || iReturn == BadWindow)
+      if (iReturn == BadAtom || iReturn == BadWindow ||
+         XGetSelectionOwner (pDisplay, atomClipboard) != iWindow)
        {
          ErrorF ("winClipboardProc - Could not set CLIPBOARD owner\n");
          pthread_exit (NULL);
diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c
index 7aa6889..d5a224a 100644
--- a/hw/xwin/winclipboardwndproc.c
+++ b/hw/xwin/winclipboardwndproc.c
@@ -385,7 +385,8 @@ winClipboardWindowProc (HWND hwnd, UINT message,
                                      XA_PRIMARY,
                                      iWindow,
                                      CurrentTime);
-       if (iReturn == BadAtom || iReturn == BadWindow)
+       if (iReturn == BadAtom || iReturn == BadWindow ||
+           XGetSelectionOwner (pDisplay, XA_PRIMARY) != iWindow)
          {
            winErrorFVerb (1, "winClipboardWindowProc - WM_DRAWCLIPBOARD - "
                    "Could not reassert ownership of PRIMARY\n");
@@ -403,7 +404,12 @@ winClipboardWindowProc (HWND hwnd, UINT message,
                                                   False),
                                      iWindow,
                                      CurrentTime);
-       if (iReturn == BadAtom || iReturn == BadWindow)
+
+       if (iReturn == BadAtom || iReturn == BadWindow ||
+           XGetSelectionOwner (pDisplay, 
+                                XInternAtom (pDisplay,
+                                             "CLIPBOARD",
+                                             False)) != iWindow)
          {
            winErrorFVerb (1, "winClipboardWindowProc - WM_DRAWCLIPBOARD - "
                    "Could not reassert ownership of CLIPBOARD\n");
-- 
1.6.0.4

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to