mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 19:10:43 -05:00
wayland: Improve transformation of the UTF8_STRING atom to mimetype
We try to translate the atom with its corresponding mimetype both back and forth, which actually breaks if the X11 client chose to announce the mimetype atom. To do the translation properly, keep track on whether the source announced the UTF8_STRING atom, and reply back with this only if that happened.
This commit is contained in:
parent
cf88675807
commit
ebeca983c7
@ -86,6 +86,7 @@ struct _MetaWaylandDataSourceXWayland
|
|||||||
MetaWaylandDataSource parent;
|
MetaWaylandDataSource parent;
|
||||||
|
|
||||||
MetaSelectionBridge *selection;
|
MetaSelectionBridge *selection;
|
||||||
|
guint has_utf8_string_atom : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _MetaXWaylandSelection {
|
struct _MetaXWaylandSelection {
|
||||||
@ -704,7 +705,8 @@ meta_x11_source_send (MetaWaylandDataSource *source,
|
|||||||
MetaSelectionBridge *selection = source_xwayland->selection;
|
MetaSelectionBridge *selection = source_xwayland->selection;
|
||||||
Atom type_atom;
|
Atom type_atom;
|
||||||
|
|
||||||
if (strcmp (mime_type, "text/plain;charset=utf-8") == 0)
|
if (source_xwayland->has_utf8_string_atom &&
|
||||||
|
strcmp (mime_type, "text/plain;charset=utf-8") == 0)
|
||||||
type_atom = gdk_x11_get_xatom_by_name ("UTF8_STRING");
|
type_atom = gdk_x11_get_xatom_by_name ("UTF8_STRING");
|
||||||
else
|
else
|
||||||
type_atom = gdk_x11_get_xatom_by_name (mime_type);
|
type_atom = gdk_x11_get_xatom_by_name (mime_type);
|
||||||
@ -847,6 +849,8 @@ meta_xwayland_data_source_fetch_mimetype_list (MetaWaylandDataSource *source,
|
|||||||
Window window,
|
Window window,
|
||||||
Atom prop)
|
Atom prop)
|
||||||
{
|
{
|
||||||
|
MetaWaylandDataSourceXWayland *source_xwayland =
|
||||||
|
META_WAYLAND_DATA_SOURCE_XWAYLAND (source);
|
||||||
Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
Display *xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||||
gulong nitems_ret, bytes_after_ret, i;
|
gulong nitems_ret, bytes_after_ret, i;
|
||||||
Atom *atoms, type_ret, utf8_string;
|
Atom *atoms, type_ret, utf8_string;
|
||||||
@ -880,10 +884,13 @@ meta_xwayland_data_source_fetch_mimetype_list (MetaWaylandDataSource *source,
|
|||||||
const gchar *mime_type;
|
const gchar *mime_type;
|
||||||
|
|
||||||
if (atoms[i] == utf8_string)
|
if (atoms[i] == utf8_string)
|
||||||
mime_type = "text/plain;charset=utf-8";
|
{
|
||||||
else
|
meta_wayland_data_source_add_mime_type (source,
|
||||||
mime_type = gdk_x11_get_xatom_name (atoms[i]);
|
"text/plain;charset=utf-8");
|
||||||
|
source_xwayland->has_utf8_string_atom = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mime_type = gdk_x11_get_xatom_name (atoms[i]);
|
||||||
meta_wayland_data_source_add_mime_type (source, mime_type);
|
meta_wayland_data_source_add_mime_type (source, mime_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user