mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
x11: Flag flushes despite having less than the element size
If say we want 32bit data, but have 2 bytes stored, we would simply
ignore flush requests. Allow (and don't clear) the needs_flush flag
if we have less than the element size accumulated.
Instead handle this in can_flush(), so it's triggered whenever we
have enough data to fill 1 element, or if the stream is closing
(seems a broken situation, but triggered by the caller).
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1198
(cherry picked from commit 967966cdee
)
This commit is contained in:
parent
40dc22659b
commit
13a23f16c1
@ -60,6 +60,8 @@ G_DEFINE_TYPE_WITH_PRIVATE (MetaX11SelectionOutputStream,
|
||||
meta_x11_selection_output_stream,
|
||||
G_TYPE_OUTPUT_STREAM);
|
||||
|
||||
static size_t get_element_size (int format);
|
||||
|
||||
static void
|
||||
meta_x11_selection_output_stream_notify_selection (MetaX11SelectionOutputStream *stream)
|
||||
{
|
||||
@ -97,6 +99,9 @@ meta_x11_selection_output_stream_can_flush (MetaX11SelectionOutputStream *stream
|
||||
|
||||
if (priv->delete_pending)
|
||||
return FALSE;
|
||||
if (!g_output_stream_is_closing (G_OUTPUT_STREAM (stream)) &&
|
||||
priv->data->len < get_element_size (priv->format))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -241,7 +246,7 @@ meta_x11_selection_output_stream_perform_flush (MetaX11SelectionOutputStream *st
|
||||
priv->data->data,
|
||||
n_elements);
|
||||
g_byte_array_remove_range (priv->data, 0, n_elements * element_size);
|
||||
if (priv->data->len < element_size)
|
||||
if (priv->data->len == 0)
|
||||
priv->flush_requested = FALSE;
|
||||
}
|
||||
|
||||
@ -391,7 +396,7 @@ meta_x11_selection_output_request_flush (MetaX11SelectionOutputStream *stream)
|
||||
|
||||
g_mutex_lock (&priv->mutex);
|
||||
|
||||
if (priv->data->len >= get_element_size (priv->format))
|
||||
if (priv->data->len > 0)
|
||||
priv->flush_requested = TRUE;
|
||||
|
||||
needs_flush = meta_x11_selection_output_stream_needs_flush_unlocked (stream);
|
||||
|
Loading…
Reference in New Issue
Block a user