diff --git a/gdk/gdkclipboard.c b/gdk/gdkclipboard.c index 77862dd55b..eee9284a9a 100644 --- a/gdk/gdkclipboard.c +++ b/gdk/gdkclipboard.c @@ -113,6 +113,14 @@ gdk_clipboard_finalize (GObject *object) G_OBJECT_CLASS (gdk_clipboard_parent_class)->finalize (object); } +static GInputStream * +gdk_clipboard_real_read (GdkClipboard *clipboard, + const char *mime_type) +{ + /* whoop whooop */ + return g_memory_input_stream_new (); +} + static void gdk_clipboard_class_init (GdkClipboardClass *class) { @@ -122,6 +130,8 @@ gdk_clipboard_class_init (GdkClipboardClass *class) object_class->set_property = gdk_clipboard_set_property; object_class->finalize = gdk_clipboard_finalize; + class->read = gdk_clipboard_real_read; + /** * GdkClipboard:display: * @@ -227,6 +237,19 @@ gdk_clipboard_get_formats (GdkClipboard *clipboard) return priv->formats; } +GInputStream * +gdk_clipboard_read (GdkClipboard *clipboard, + const char *mime_type) +{ + GdkClipboardPrivate *priv = gdk_clipboard_get_instance_private (clipboard); + + g_return_val_if_fail (GDK_IS_CLIPBOARD (clipboard), NULL); + g_return_val_if_fail (mime_type != NULL, NULL); + g_return_val_if_fail (gdk_content_formats_contain_mime_type (priv->formats, mime_type), NULL); + + return GDK_CLIPBOARD_GET_CLASS (clipboard)->read (clipboard, mime_type); +} + GdkClipboard * gdk_clipboard_new (GdkDisplay *display) { diff --git a/gdk/gdkclipboard.h b/gdk/gdkclipboard.h index 08943e55e6..6c36c940f9 100644 --- a/gdk/gdkclipboard.h +++ b/gdk/gdkclipboard.h @@ -42,6 +42,9 @@ GdkDisplay * gdk_clipboard_get_display (GdkClipboard * GDK_AVAILABLE_IN_3_94 GdkContentFormats * gdk_clipboard_get_formats (GdkClipboard *clipboard); +GDK_AVAILABLE_IN_3_94 +GInputStream * gdk_clipboard_read (GdkClipboard *clipboard, + const char *mime_type); G_END_DECLS diff --git a/gdk/gdkclipboardprivate.h b/gdk/gdkclipboardprivate.h index adc6c0ac02..faf1ce61fc 100644 --- a/gdk/gdkclipboardprivate.h +++ b/gdk/gdkclipboardprivate.h @@ -38,9 +38,11 @@ struct _GdkClipboardClass GObjectClass parent_class; /* signals */ - void (* changed) (GdkClipboard *clipboard); + void (* changed) (GdkClipboard *clipboard); /* vfuncs */ + GInputStream * (* read) (GdkClipboard *clipboard, + const char *mime_type); }; GdkClipboard * gdk_clipboard_new (GdkDisplay *display); diff --git a/gdk/x11/gdkclipboard-x11.c b/gdk/x11/gdkclipboard-x11.c index 28def4e674..b692006793 100644 --- a/gdk/x11/gdkclipboard-x11.c +++ b/gdk/x11/gdkclipboard-x11.c @@ -180,13 +180,27 @@ gdk_x11_clipboard_finalize (GObject *object) G_OBJECT_CLASS (gdk_x11_clipboard_parent_class)->finalize (object); } +static GInputStream * +gdk_x11_clipboard_read (GdkClipboard *clipboard, + const char *mime_type) +{ + GdkX11Clipboard *cb = GDK_X11_CLIPBOARD (clipboard); + + return gdk_x11_selection_input_stream_new (gdk_clipboard_get_display (GDK_CLIPBOARD (cb)), + cb->selection, + mime_type, + cb->timestamp); +} + static void gdk_x11_clipboard_class_init (GdkX11ClipboardClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); - //GdkClipboardClass *clipboard_class = GDK_CLIPBOARD_CLASS (class); + GdkClipboardClass *clipboard_class = GDK_CLIPBOARD_CLASS (class); object_class->finalize = gdk_x11_clipboard_finalize; + + clipboard_class->read = gdk_x11_clipboard_read; } static void