[gtk+] clipboard: Add gdk_clipboard_set()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] clipboard: Add gdk_clipboard_set()
- Date: Tue, 5 Dec 2017 04:41:05 +0000 (UTC)
commit dc50e0637ffa8bc7a369d00a5d8e7656d03c3781
Author: Benjamin Otte <otte redhat com>
Date: Tue Dec 5 05:16:49 2017 +0100
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.
docs/reference/gdk/gdk4-sections.txt | 3 +
gdk/gdkclipboard.c | 105 +++++++---------------------------
gdk/gdkclipboard.h | 11 ----
gtk/gtkfilechooserwidget.c | 13 +----
gtk/gtktextbuffer.c | 13 +----
5 files changed, 27 insertions(+), 118 deletions(-)
---
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index dccf648..acb8d2a 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -1304,6 +1304,9 @@ gdk_clipboard_read_texture_finish
gdk_clipboard_read_text_async
gdk_clipboard_read_text_finish
gdk_clipboard_set_content
+gdk_clipboard_set
+gdk_clipboard_set_valist
+gdk_clipboard_set_value
gdk_clipboard_set_text
gdk_clipboard_set_texture
diff --git a/gdk/gdkclipboard.c b/gdk/gdkclipboard.c
index befbb08..2832fca 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);
}
diff --git a/gdk/gdkclipboard.h b/gdk/gdkclipboard.h
index 4f338b3..02b13b0 100644
--- a/gdk/gdkclipboard.h
+++ b/gdk/gdkclipboard.h
@@ -103,17 +103,6 @@ GDK_AVAILABLE_IN_3_94
gboolean gdk_clipboard_set_content (GdkClipboard *clipboard,
GdkContentProvider *provider);
GDK_AVAILABLE_IN_3_94
-void gdk_clipboard_set (GdkClipboard *clipboard,
- GType type,
- ...);
-GDK_AVAILABLE_IN_3_94
-void gdk_clipboard_set_valist (GdkClipboard *clipboard,
- GType type,
- va_list args);
-GDK_AVAILABLE_IN_3_94
-void gdk_clipboard_set_value (GdkClipboard *clipboard,
- const GValue *value);
-GDK_AVAILABLE_IN_3_94
void gdk_clipboard_set_text (GdkClipboard *clipboard,
const char *text);
GDK_AVAILABLE_IN_3_94
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
index 1d99534..dd75977 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -1668,19 +1668,10 @@ copy_file_location_cb (GSimpleAction *action,
if (selected_files)
{
GdkClipboard *clipboard;
- GdkContentProvider *provider;
- GValue value = G_VALUE_INIT;
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (impl));
-
- g_value_init (&value, GDK_TYPE_FILE_LIST);
- g_value_take_boxed (&value, selected_files);
-
- provider = gdk_content_provider_new_for_value (&value);
- g_value_unset (&value);
-
- gdk_clipboard_set_content (clipboard, provider);
- g_object_unref (provider);
+ gdk_clipboard_set (clipboard, GDK_TYPE_FILE_LIST, selected_files);
+ g_slist_free_full (selected_files, g_object_unref);
}
}
diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c
index b7d1805..1dba4c4 100644
--- a/gtk/gtktextbuffer.c
+++ b/gtk/gtktextbuffer.c
@@ -3927,19 +3927,10 @@ cut_or_copy (GtkTextBuffer *buffer,
if (!gtk_text_iter_equal (&start, &end))
{
GtkTextBuffer *contents;
- GdkContentProvider *provider;
- GValue value = G_VALUE_INIT;
contents = create_clipboard_contents_buffer (buffer, &start, &end);
-
- g_value_init (&value, GTK_TYPE_TEXT_BUFFER);
- g_value_take_object (&value, contents);
-
- provider = gdk_content_provider_new_for_value (&value);
- g_value_unset (&value);
-
- gdk_clipboard_set_content (clipboard, provider);
- g_object_unref (provider);
+ gdk_clipboard_set (clipboard, GTK_TYPE_TEXT_BUFFER, contents);
+ g_object_unref (contents);
if (delete_region_after)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]