[Spice-commits] client/windows

Arnon Gilboa agilboa at kemper.freedesktop.org
Thu Mar 1 04:13:26 PST 2012


 client/windows/platform.cpp |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

New commits:
commit f605e2774d74d879f847b301705dfeb2330d1167
Author: Arnon Gilboa <agilboa at redhat.com>
Date:   Thu Mar 1 13:06:24 2012 +0200

    client/windows: fix SetClipboardViewer error handling rhbz#786554
    
    MSDN says the following about SetClipboardViewer(): "If an error occurs or there
    are no other windows in the clipboard viewer chain, the return value is NULL".
    Seems like the buggy case was "no other windows in the clipboard viewer chain",
    which explains the 3rd party clipboard manager workaround detailed in the bug
    description.
    
    It also seems like SetClipboardViewer() does not clear the error state on
    succcess. Calling SetLastError(0) before SetClipboardViewer() seems to solves
    this issue.
    
    Since we could not reproduce the bug on our env, the customer has verified on
    several of their systems that a private build resolved the issue.

diff --git a/client/windows/platform.cpp b/client/windows/platform.cpp
index 2b719f2..d3417e3 100644
--- a/client/windows/platform.cpp
+++ b/client/windows/platform.cpp
@@ -249,6 +249,7 @@ static void create_message_wind()
 {
     WNDCLASSEX wclass;
     ATOM class_atom;
+    DWORD err;
 
     const LPCWSTR class_name = L"spicec_platform_wclass";
 
@@ -272,9 +273,9 @@ static void create_message_wind()
     if (!(platform_win = CreateWindow(class_name, L"", 0, 0, 0, 0, 0, NULL, NULL, instance, NULL))) {
         THROW("create message window failed");
     }
-
-    if (!(next_clipboard_viewer_win = SetClipboardViewer(platform_win)) && GetLastError()) {
-        THROW("set clipboard viewer failed");
+    SetLastError(0);
+    if (!(next_clipboard_viewer_win = SetClipboardViewer(platform_win)) && (err = GetLastError())) {
+        THROW("set clipboard viewer failed %u", err);
     }
     if (!(clipboard_event = CreateEvent(NULL, FALSE, FALSE, NULL))) {
         THROW("create clipboard event failed");


More information about the Spice-commits mailing list