[Spice-devel] [PATCH spice] spicec-x11: Listen for selection owner window destroy / close events too

Arnon Gilboa agilboa at redhat.com
Thu Oct 28 05:33:13 PDT 2010


Ack, I remember these lines from somewhere;)

Hans de Goede wrote:
> 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.
> ---
>  client/x11/platform.cpp |   18 +++++++++++++++---
>  1 files changed, 15 insertions(+), 3 deletions(-)
>
> 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-devel mailing list