diff options
author | Benjamin Otte <otte@redhat.com> | 2017-12-05 05:16:49 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2017-12-05 05:29:03 +0100 |
commit | dc50e0637ffa8bc7a369d00a5d8e7656d03c3781 (patch) | |
tree | 60fc24cb2d8c24879e58ad8b7460aeb412d5827f /gdk/gdkclipboard.c | |
parent | 4658d7ea5484c7d98c43b8f33483e43995efd8d5 (diff) | |
download | gtk+-dc50e0637ffa8bc7a369d00a5d8e7656d03c3781.tar.gz |
clipboard: Add gdk_clipboard_set()
This API allows specifying a GType and va_args of a value of that type
to set the clipboard contents. This massively simplifies setting weird
object types into the clipboard.
2 example patches included in this patch are the GtkTextBuffer and the
file list in the file chooser.
Using gobject-introspection, this should work without specifying the
type, so that you can literlally say
clipboard.set ("Hello World")
or
clipboard.set (pixbuf)
which is why I've also marked all other setters as (skip). They just
exist in C as wrappers for type safety reasons.
Diffstat (limited to 'gdk/gdkclipboard.c')
-rw-r--r-- | gdk/gdkclipboard.c | 105 |
1 files changed, 20 insertions, 85 deletions
diff --git a/gdk/gdkclipboard.c b/gdk/gdkclipboard.c index befbb08aef..2832fcad50 100644 --- a/gdk/gdkclipboard.c +++ b/gdk/gdkclipboard.c @@ -30,8 +30,6 @@ #include "gdkpipeiostreamprivate.h" #include "gdktexture.h" -#include <gobject/gvaluecollector.h> - /** * SECTION:gdkclipboard * @Short_description: Share data between applications for Copy-and-Paste @@ -1235,104 +1233,32 @@ gdk_clipboard_set_content (GdkClipboard *clipboard, } /** - * gdk_clipboard_set: - * @clipboard: a #GdkClipboard - * @type: type of value to set - * @...: value contents conforming to @type - * - * Sets the clipboard to contain the value collected from the given - * varargs. - **/ -void -gdk_clipboard_set (GdkClipboard *clipboard, - GType type, - ...) -{ - va_list args; - - g_return_if_fail (GDK_IS_CLIPBOARD (clipboard)); - - va_start (args, type); - gdk_clipboard_set_valist (clipboard, type, args); - va_end (args); -} - -/** - * gdk_clipboard_set_valist: (skip) + * gdk_clipboard_set_text: * @clipboard: a #GdkClipboard - * @type: type of value to set - * @args: varargs containing the value of @type + * @text: Text to put into the clipboard * - * Sets the clipboard to contain the value collected from the given - * @args. + * Puts the given @text into the clipboard. **/ void -gdk_clipboard_set_valist (GdkClipboard *clipboard, - GType type, - va_list args) +gdk_clipboard_set_text (GdkClipboard *clipboard, + const char *text) { + GdkContentProvider *provider; GValue value = G_VALUE_INIT; - char *error; g_return_if_fail (GDK_IS_CLIPBOARD (clipboard)); - G_VALUE_COLLECT_INIT (&value, type, - args, G_VALUE_NOCOPY_CONTENTS, - &error); - if (error) - { - g_warning ("%s: %s", G_STRLOC, error); - g_free (error); - /* we purposely leak the value here, it might not be - * in a sane state if an error condition occoured - */ - return; - } - - gdk_clipboard_set_value (clipboard, &value); + g_value_init (&value, G_TYPE_STRING); + g_value_set_string (&value, text); + provider = gdk_content_provider_new_for_value (&value); g_value_unset (&value); -} - -/** - * gdk_clipboard_set_value: (rename-to gdk_clipboard_set) - * @clipboard: a #GdkClipboard - * @value: a #GValue to set - * - * Sets the @clipboard to contain the given @value. - **/ -void -gdk_clipboard_set_value (GdkClipboard *clipboard, - const GValue *value) -{ - GdkContentProvider *provider; - - g_return_if_fail (GDK_IS_CLIPBOARD (clipboard)); - g_return_if_fail (G_IS_VALUE (value)); - - provider = gdk_content_provider_new_for_value (value); gdk_clipboard_set_content (clipboard, provider); g_object_unref (provider); } /** - * gdk_clipboard_set_text: (skip) - * @clipboard: a #GdkClipboard - * @text: Text to put into the clipboard - * - * Puts the given @text into the clipboard. - **/ -void -gdk_clipboard_set_text (GdkClipboard *clipboard, - const char *text) -{ - g_return_if_fail (GDK_IS_CLIPBOARD (clipboard)); - - gdk_clipboard_set (clipboard, G_TYPE_STRING, text); -} - -/** - * gdk_clipboard_set_texture: (skip) + * gdk_clipboard_set_texture: * @clipboard: a #GdkClipboard * @texture: a #GdkTexture to put into the clipboard * @@ -1342,9 +1268,18 @@ void gdk_clipboard_set_texture (GdkClipboard *clipboard, GdkTexture *texture) { + GdkContentProvider *provider; + GValue value = G_VALUE_INIT; + g_return_if_fail (GDK_IS_CLIPBOARD (clipboard)); g_return_if_fail (GDK_IS_TEXTURE (texture)); - gdk_clipboard_set (clipboard, GDK_TYPE_TEXTURE, texture); + g_value_init (&value, GDK_TYPE_TEXTURE); + g_value_set_object (&value, texture); + provider = gdk_content_provider_new_for_value (&value); + g_value_unset (&value); + + gdk_clipboard_set_content (clipboard, provider); + g_object_unref (provider); } |