mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
x11: Look up reason for selection clear events from XFixes
If the event originates from a XSetSelectionOwner request, the event
will contain a XFixesSetSelectionOwnerNotify subtype. The other
subtypes (meant for the selection window being destroyed, and the
client closing) are the situations where we mean to replace the
selection.
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1268
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1350
(cherry picked from commit 2f1f47d257
)
This commit is contained in:
parent
ae8acc9980
commit
454875248a
@ -32,13 +32,6 @@
|
|||||||
#define UTF8_STRING_MIMETYPE "text/plain;charset=utf-8"
|
#define UTF8_STRING_MIMETYPE "text/plain;charset=utf-8"
|
||||||
#define STRING_MIMETYPE "text/plain"
|
#define STRING_MIMETYPE "text/plain"
|
||||||
|
|
||||||
/* Set an arbitrary (although generous) threshold to determine whether a
|
|
||||||
* XFixesSelectionNotify corresponds to a XSetSelectionOwner from another
|
|
||||||
* client. The selection timestamp is not updated if the owner client is
|
|
||||||
* closed.
|
|
||||||
*/
|
|
||||||
#define SELECTION_CLEARED_BY_CLIENT(e) (e->timestamp - e->selection_timestamp < 50)
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
atom_to_selection_type (Display *xdisplay,
|
atom_to_selection_type (Display *xdisplay,
|
||||||
Atom selection,
|
Atom selection,
|
||||||
@ -342,7 +335,7 @@ meta_x11_selection_handle_xfixes_selection_notify (MetaX11Display *x11_display,
|
|||||||
|
|
||||||
if (event->owner == None && x11_display->selection.owners[selection_type])
|
if (event->owner == None && x11_display->selection.owners[selection_type])
|
||||||
{
|
{
|
||||||
if (SELECTION_CLEARED_BY_CLIENT (event))
|
if (event->subtype == XFixesSetSelectionOwnerNotify)
|
||||||
{
|
{
|
||||||
MetaSelectionSource *source;
|
MetaSelectionSource *source;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user