st: Ignore filtered selection events not meant to our clipboard window

Other windows like the mutter Xwayland selection bridges might deal with
the clipboard, which would result in events visible on st-clipboard event
filters.

In order to avoid unintended results, ignore events that are not meant for
the clipboard window.

https://bugzilla.gnome.org/show_bug.cgi?id=760745
This commit is contained in:
Carlos Garnacho 2016-10-07 23:46:27 +02:00
parent d4ce51b1b7
commit a22e9ce9cd

View File

@ -117,6 +117,7 @@ st_clipboard_provider (GdkXEvent *xevent_p,
GdkDisplay *display = gdk_display_get_default (); GdkDisplay *display = gdk_display_get_default ();
if (xev->type != SelectionRequest || if (xev->type != SelectionRequest ||
xev->xany.window != clipboard->priv->clipboard_window ||
!clipboard->priv->clipboard_text) !clipboard->priv->clipboard_text)
return GDK_FILTER_CONTINUE; return GDK_FILTER_CONTINUE;
@ -233,13 +234,15 @@ st_clipboard_x11_event_filter (GdkXEvent *xevent_p,
{ {
XEvent *xev = (XEvent *) xevent_p; XEvent *xev = (XEvent *) xevent_p;
EventFilterData *filter_data = user_data; EventFilterData *filter_data = user_data;
StClipboardPrivate *priv = filter_data->clipboard->priv;
Atom actual_type; Atom actual_type;
int actual_format, result; int actual_format, result;
unsigned long nitems, bytes_after; unsigned long nitems, bytes_after;
unsigned char *data = NULL; unsigned char *data = NULL;
GdkDisplay *display = gdk_display_get_default (); GdkDisplay *display = gdk_display_get_default ();
if(xev->type != SelectionNotify) if(xev->type != SelectionNotify ||
xev->xany.window != priv->clipboard_window)
return GDK_FILTER_CONTINUE; return GDK_FILTER_CONTINUE;
if (xev->xselection.property == None) if (xev->xselection.property == None)