summaryrefslogtreecommitdiff
path: root/gdk/gdkclipboard.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2017-12-05 05:16:49 +0100
committerBenjamin Otte <otte@redhat.com>2017-12-05 05:29:03 +0100
commitdc50e0637ffa8bc7a369d00a5d8e7656d03c3781 (patch)
tree60fc24cb2d8c24879e58ad8b7460aeb412d5827f /gdk/gdkclipboard.c
parent4658d7ea5484c7d98c43b8f33483e43995efd8d5 (diff)
downloadgtk+-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.c105
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);
}