st: Add StClipboard method to set arbitrary clipboard content

This complements the current text-based API.

https://gitlab.gnome.org/GNOME/mutter/issues/789
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/810
This commit is contained in:
Carlos Garnacho 2019-11-06 00:40:17 +01:00 committed by Florian Müllner
parent f51952f5d6
commit a58bdbfbd4
2 changed files with 36 additions and 8 deletions

View File

@ -194,6 +194,36 @@ st_clipboard_get_text (StClipboard *clipboard,
data); data);
} }
/**
* st_clipboard_set_content:
* @clipboard: A #StClipboard
* @type: The type of clipboard that you want to set
* @mimetype: content mimetype
* @bytes: content data
*
* Sets the clipboard content.
**/
void
st_clipboard_set_content (StClipboard *clipboard,
StClipboardType type,
const gchar *mimetype,
GBytes *bytes)
{
MetaSelectionType selection_type;
MetaSelectionSource *source;
g_return_if_fail (ST_IS_CLIPBOARD (clipboard));
g_return_if_fail (meta_selection != NULL);
g_return_if_fail (bytes != NULL);
if (!convert_type (type, &selection_type))
return;
source = meta_selection_source_memory_new (mimetype, bytes);
meta_selection_set_owner (meta_selection, selection_type, source);
g_object_unref (source);
}
/** /**
* st_clipboard_set_text: * st_clipboard_set_text:
* @clipboard: A #StClipboard * @clipboard: A #StClipboard
@ -207,22 +237,15 @@ st_clipboard_set_text (StClipboard *clipboard,
StClipboardType type, StClipboardType type,
const gchar *text) const gchar *text)
{ {
MetaSelectionType selection_type;
MetaSelectionSource *source;
GBytes *bytes; GBytes *bytes;
g_return_if_fail (ST_IS_CLIPBOARD (clipboard)); g_return_if_fail (ST_IS_CLIPBOARD (clipboard));
g_return_if_fail (meta_selection != NULL); g_return_if_fail (meta_selection != NULL);
g_return_if_fail (text != NULL); g_return_if_fail (text != NULL);
if (!convert_type (type, &selection_type))
return;
bytes = g_bytes_new_take (g_strdup (text), strlen (text)); bytes = g_bytes_new_take (g_strdup (text), strlen (text));
source = meta_selection_source_memory_new ("text/plain;charset=utf-8", bytes); st_clipboard_set_content (clipboard, type, "text/plain;charset=utf-8", bytes);
g_bytes_unref (bytes); g_bytes_unref (bytes);
meta_selection_set_owner (meta_selection, selection_type, source);
} }
void void

View File

@ -73,6 +73,11 @@ void st_clipboard_set_text (StClipboard *clipboard,
StClipboardType type, StClipboardType type,
const gchar *text); const gchar *text);
void st_clipboard_set_content (StClipboard *clipboard,
StClipboardType type,
const gchar *mimetype,
GBytes *bytes);
void st_clipboard_set_selection (MetaSelection *selection); void st_clipboard_set_selection (MetaSelection *selection);
G_END_DECLS G_END_DECLS