[gtk+] Revert "clipboard: Add gdk_clipboard_set()"



commit b5c62cf86fe37e05ce2a0ae050df2a229457676b
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Dec 4 23:09:54 2017 -0800

    Revert "clipboard: Add gdk_clipboard_set()"
    
    This reverts commit dc50e0637ffa8bc7a369d00a5d8e7656d03c3781.
    
    This broke the build.

 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, 118 insertions(+), 27 deletions(-)
---
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index acb8d2a..dccf648 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -1304,9 +1304,6 @@ 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 2832fca..befbb08 100644
--- a/gdk/gdkclipboard.c
+++ b/gdk/gdkclipboard.c
@@ -30,6 +30,8 @@
 #include "gdkpipeiostreamprivate.h"
 #include "gdktexture.h"
 
+#include <gobject/gvaluecollector.h>
+
 /**
  * SECTION:gdkclipboard
  * @Short_description: Share data between applications for Copy-and-Paste
@@ -1233,32 +1235,104 @@ gdk_clipboard_set_content (GdkClipboard       *clipboard,
 }
 
 /**
- * gdk_clipboard_set_text:
+ * gdk_clipboard_set:
  * @clipboard: a #GdkClipboard
- * @text: Text to put into the clipboard
+ * @type: type of value to set
+ * @...: value contents conforming to @type
  *
- * Puts the given @text into the clipboard.
+ * Sets the clipboard to contain the value collected from the given
+ * varargs.
  **/
 void
-gdk_clipboard_set_text (GdkClipboard *clipboard,
-                        const char   *text)
+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)
+ * @clipboard: a #GdkClipboard
+ * @type: type of value to set
+ * @args: varargs containing the value of @type
+ *
+ * Sets the clipboard to contain the value collected from the given
+ * @args.
+ **/
+void
+gdk_clipboard_set_valist (GdkClipboard *clipboard,
+                          GType         type,
+                          va_list       args)
 {
-  GdkContentProvider *provider;
   GValue value = G_VALUE_INIT;
+  char *error;
 
   g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
 
-  g_value_init (&value, G_TYPE_STRING);
-  g_value_set_string (&value, text);
-  provider = gdk_content_provider_new_for_value (&value);
+  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_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_texture:
+ * 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)
  * @clipboard: a #GdkClipboard
  * @texture: a #GdkTexture to put into the clipboard
  *
@@ -1268,18 +1342,9 @@ 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));
 
-  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);
+  gdk_clipboard_set (clipboard, GDK_TYPE_TEXTURE, texture);
 }
 
diff --git a/gdk/gdkclipboard.h b/gdk/gdkclipboard.h
index 02b13b0..4f338b3 100644
--- a/gdk/gdkclipboard.h
+++ b/gdk/gdkclipboard.h
@@ -103,6 +103,17 @@ 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 dd75977..1d99534 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -1668,10 +1668,19 @@ 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));
-      gdk_clipboard_set (clipboard, GDK_TYPE_FILE_LIST, selected_files);
-      g_slist_free_full (selected_files, g_object_unref);
+
+      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);
     }
 }
 
diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c
index 1dba4c4..b7d1805 100644
--- a/gtk/gtktextbuffer.c
+++ b/gtk/gtktextbuffer.c
@@ -3927,10 +3927,19 @@ 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);
-      gdk_clipboard_set (clipboard, GTK_TYPE_TEXT_BUFFER, contents);
-      g_object_unref (contents);
+
+      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);
 
       if (delete_region_after)
         {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]