[Spice-commits] client/x11

Hans de Goede jwrdegoede at kemper.freedesktop.org
Thu Oct 28 06:54:18 PDT 2010


 client/x11/platform.cpp |   18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

New commits:
commit 922b831db2a19e7620fa5f93b7fb33aca86f3717
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Thu Oct 28 12:05:30 2010 +0200

    spicec-x11: Listen for selection owner window destroy / close events too
    
    These rarely happen as most apps have the decency to do a SetSelectionOwner
    None before exiting. But some do not, so listen for these too.

diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp
index 13bc0a6..2009817 100644
--- a/client/x11/platform.cpp
+++ b/client/x11/platform.cpp
@@ -922,7 +922,9 @@ DynamicScreen::DynamicScreen(Display* display, int screen, int& next_mon_id)
     XRRSelectInput(display, platform_win, RRScreenChangeNotifyMask);
     if (using_xfixes_1_0) {
         XFixesSelectSelectionInput(display, platform_win, clipboard_prop,
-                                   XFixesSetSelectionOwnerNotifyMask);
+                                   XFixesSetSelectionOwnerNotifyMask|
+                                   XFixesSelectionWindowDestroyNotifyMask|
+                                   XFixesSelectionClientCloseNotifyMask);
     }
 
     Monitor::self_monitors_change++;
@@ -1224,7 +1226,9 @@ MultyMonScreen::MultyMonScreen(Display* display, int screen, int& next_mon_id)
     X_DEBUG_SYNC(get_display());
     if (using_xfixes_1_0) {
         XFixesSelectSelectionInput(display, platform_win, clipboard_prop,
-                                   XFixesSetSelectionOwnerNotifyMask);
+                                   XFixesSetSelectionOwnerNotifyMask|
+                                   XFixesSelectionWindowDestroyNotifyMask|
+                                   XFixesSelectionClientCloseNotifyMask);
     }
 
     XMonitor::inc_change_ref();
@@ -2745,7 +2749,15 @@ static void root_win_proc(XEvent& event)
     }
     if (event.type == XFixesSelectionNotify + xfixes_event_base) {
         XFixesSelectionNotifyEvent* selection_event = (XFixesSelectionNotifyEvent *)&event;
-        if (selection_event->subtype != XFixesSetSelectionOwnerNotify) {
+        switch (selection_event->subtype) {
+        case XFixesSetSelectionOwnerNotify:
+            break;
+        /* Treat ... as a SelectionOwnerNotify None */
+        case XFixesSelectionWindowDestroyNotify:
+        case XFixesSelectionClientCloseNotify:
+            selection_event->owner = None;
+            break;
+        default:
             LOG_INFO("Unsupported selection event %u", selection_event->subtype);
             return;
         }


More information about the Spice-commits mailing list