xwayland: Refactor XFixesSelectionNotifyEvent handler

Prepare it for more selection atoms (i.e. XdndSelection) to come.

https://bugzilla.gnome.org/show_bug.cgi?id=738312
This commit is contained in:
Carlos Garnacho 2015-05-28 12:07:49 +02:00
parent f53eea2c1c
commit b449ba942a

View File

@ -765,42 +765,42 @@ meta_xwayland_selection_handle_xfixes_selection_notify (MetaWaylandCompositor *c
if (!selection) if (!selection)
return FALSE; return FALSE;
if (event->owner == None) if (selection->selection_atom == gdk_x11_get_xatom_by_name ("CLIPBOARD"))
{ {
if (selection->source && selection->owner != selection->window) if (event->owner == None)
{ {
/* An X client went away, clear the selection */ if (selection->source && selection->owner != selection->window)
if (selection->selection_atom == gdk_x11_get_xatom_by_name ("CLIPBOARD"))
{ {
/* An X client went away, clear the selection */
meta_wayland_data_device_set_selection (&compositor->seat->data_device, NULL, meta_wayland_data_device_set_selection (&compositor->seat->data_device, NULL,
wl_display_next_serial (compositor->wayland_display)); wl_display_next_serial (compositor->wayland_display));
selection->source = NULL;
} }
selection->source = NULL;
selection->owner = None;
} }
else
selection->owner = None;
}
else
{
selection->owner = event->owner;
if (selection->owner == selection->window)
{ {
/* This our own selection window */ selection->owner = event->owner;
selection->timestamp = event->timestamp;
return TRUE; if (selection->owner == selection->window)
{
/* This our own selection window */
selection->timestamp = event->timestamp;
return TRUE;
}
g_clear_pointer (&selection->x11_selection,
(GDestroyNotify) x11_selection_data_free);
XConvertSelection (xdisplay,
event->selection,
gdk_x11_get_xatom_by_name ("TARGETS"),
gdk_x11_get_xatom_by_name ("_META_SELECTION"),
selection->window,
selection->timestamp);
XFlush (xdisplay);
} }
g_clear_pointer (&selection->x11_selection,
(GDestroyNotify) x11_selection_data_free);
XConvertSelection (xdisplay,
event->selection,
gdk_x11_get_xatom_by_name ("TARGETS"),
gdk_x11_get_xatom_by_name ("_META_SELECTION"),
selection->window,
selection->timestamp);
XFlush (xdisplay);
} }
return TRUE; return TRUE;