x11: Use Atoms when constructing a new MetaX11SelectionOutputStream

This was pointlessly being converted between atom and string and back,
which with the switch from gdk_x11_get_xatom_name() to XGetAtomName()
also introduced a leak for every XGetAtomName() call.

Fixes: e66f4396e ("x11: Avoid GDK API in X11 selections")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2957>
This commit is contained in:
Sebastian Keller 2023-04-13 01:25:27 +02:00 committed by Marge Bot
parent 01ae1d32ee
commit 94bd5c7319
3 changed files with 24 additions and 21 deletions

View File

@ -34,10 +34,10 @@ G_DECLARE_FINAL_TYPE (MetaX11SelectionOutputStream,
GOutputStream * meta_x11_selection_output_stream_new (MetaX11Display *x11_display, GOutputStream * meta_x11_selection_output_stream_new (MetaX11Display *x11_display,
Window window, Window window,
const char *selection, Atom selection,
const char *target, Atom target,
const char *property, Atom property,
const char *type, Atom type,
int format, int format,
gulong timestamp); gulong timestamp);

View File

@ -657,10 +657,10 @@ meta_x11_selection_output_stream_xevent (MetaX11SelectionOutputStream *stream,
GOutputStream * GOutputStream *
meta_x11_selection_output_stream_new (MetaX11Display *x11_display, meta_x11_selection_output_stream_new (MetaX11Display *x11_display,
Window requestor, Window requestor,
const char *selection, Atom selection,
const char *target, Atom target,
const char *property, Atom property,
const char *type, Atom type,
int format, int format,
gulong timestamp) gulong timestamp)
{ {
@ -675,10 +675,10 @@ meta_x11_selection_output_stream_new (MetaX11Display *x11_display,
priv->x11_display = x11_display; priv->x11_display = x11_display;
priv->xwindow = requestor; priv->xwindow = requestor;
priv->xselection = XInternAtom (x11_display->xdisplay, selection, False); priv->xselection = selection;
priv->xtarget = XInternAtom (x11_display->xdisplay, target, False); priv->xtarget = target;
priv->xproperty = XInternAtom (x11_display->xdisplay, property, False); priv->xproperty = property;
priv->xtype = XInternAtom (x11_display->xdisplay, type, False); priv->xtype = type;
priv->format = format; priv->format = format;
priv->timestamp = timestamp; priv->timestamp = timestamp;

View File

@ -248,11 +248,14 @@ meta_x11_selection_handle_selection_request (MetaX11Display *x11_display,
return FALSE; return FALSE;
} }
output = meta_x11_selection_output_stream_new (x11_display, event->requestor, output = meta_x11_selection_output_stream_new (x11_display,
XGetAtomName (xdisplay, event->selection), event->requestor,
XGetAtomName (xdisplay, event->target), event->selection,
XGetAtomName (xdisplay, event->property), event->target,
"ATOM", 32, event->time); event->property,
XInternAtom (xdisplay, "ATOM", False),
32,
event->time);
bytes = mimetypes_to_bytes (mimetypes, x11_display->xdisplay); bytes = mimetypes_to_bytes (mimetypes, x11_display->xdisplay);
g_list_free_full (mimetypes, g_free); g_list_free_full (mimetypes, g_free);
@ -284,10 +287,10 @@ meta_x11_selection_handle_selection_request (MetaX11Display *x11_display,
{ {
output = meta_x11_selection_output_stream_new (x11_display, output = meta_x11_selection_output_stream_new (x11_display,
event->requestor, event->requestor,
XGetAtomName (xdisplay, event->selection), event->selection,
XGetAtomName (xdisplay, event->target), event->target,
XGetAtomName (xdisplay, event->property), event->property,
XGetAtomName (xdisplay, event->target), event->target,
8, event->time); 8, event->time);
meta_selection_transfer_async (selection, meta_selection_transfer_async (selection,