[gtk+/wip/otte/clipboard: 99/102] gtk-demo: Port to GdkClipboard
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/otte/clipboard: 99/102] gtk-demo: Port to GdkClipboard
- Date: Sat, 2 Dec 2017 15:36:56 +0000 (UTC)
commit b4d2df4a182c859f309e617b1b704daecbb2c1ad
Author: Benjamin Otte <otte redhat com>
Date: Sat Dec 2 14:39:37 2017 +0100
gtk-demo: Port to GdkClipboard
demos/gtk-demo/clipboard.c | 93 +++++++++++++++++++++++--------------------
demos/gtk-demo/main.c | 2 +-
2 files changed, 51 insertions(+), 44 deletions(-)
---
diff --git a/demos/gtk-demo/clipboard.c b/demos/gtk-demo/clipboard.c
index 18d7e0d..e8934ea 100644
--- a/demos/gtk-demo/clipboard.c
+++ b/demos/gtk-demo/clipboard.c
@@ -1,6 +1,6 @@
/* Clipboard
*
- * GtkClipboard is used for clipboard handling. This demo shows how to
+ * GdkClipboard is used for clipboard handling. This demo shows how to
* copy and paste text to and from the clipboard.
*
* It also shows how to transfer images via the clipboard or via
@@ -93,20 +93,24 @@ paste_button_clicked (GtkWidget *button,
gdk_clipboard_read_text_async (clipboard, NULL, paste_received, entry);
}
-static cairo_surface_t *
-get_image_surface (GtkImage *image)
+static GdkTexture *
+get_image_texture (GtkImage *image)
{
const gchar *icon_name;
GtkIconTheme *icon_theme;
+ GtkIconInfo *icon_info;
switch (gtk_image_get_storage_type (image))
{
- case GTK_IMAGE_SURFACE:
- return cairo_surface_reference (gtk_image_get_surface (image));
+ case GTK_IMAGE_TEXTURE:
+ return g_object_ref (gtk_image_get_texture (image));
case GTK_IMAGE_ICON_NAME:
icon_name = gtk_image_get_icon_name (image);
icon_theme = gtk_icon_theme_get_for_display (gtk_widget_get_display (GTK_WIDGET (image)));
- return gtk_icon_theme_load_surface (icon_theme, icon_name, 48, 1, NULL,
GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+ icon_info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, 48, GTK_ICON_LOOKUP_GENERIC_FALLBACK);
+ if (icon_info == NULL)
+ return NULL;
+ return gtk_icon_info_load_texture (icon_info);
default:
g_warning ("Image storage type %d not handled",
gtk_image_get_storage_type (image));
@@ -119,14 +123,11 @@ drag_begin (GtkWidget *widget,
GdkDragContext *context,
gpointer data)
{
- cairo_surface_t *surface;
+ GdkTexture *texture;
- surface = get_image_surface (GTK_IMAGE (widget));
- if (surface)
- {
- cairo_surface_set_device_offset (surface, -2, -2);
- gtk_drag_set_icon_surface (context, surface);
- }
+ texture = get_image_texture (GTK_IMAGE (widget));
+ if (texture)
+ gtk_drag_set_icon_texture (context, texture, -2, -2);
}
void
@@ -137,11 +138,11 @@ drag_data_get (GtkWidget *widget,
guint time,
gpointer data)
{
- cairo_surface_t *surface;
+ GdkTexture *texture;
- surface = get_image_surface (GTK_IMAGE (data));
- if (surface)
- gtk_selection_data_set_surface (selection_data, surface);
+ texture = get_image_texture (GTK_IMAGE (widget));
+ if (texture)
+ gtk_selection_data_set_texture (selection_data, texture);
}
static void
@@ -155,11 +156,11 @@ drag_data_received (GtkWidget *widget,
{
if (gtk_selection_data_get_length (selection_data) > 0)
{
- cairo_surface_t *surface;
+ GdkTexture *texture;
- surface = gtk_selection_data_get_surface (selection_data);
- gtk_image_set_from_surface (GTK_IMAGE (data), surface);
- cairo_surface_destroy (surface);
+ texture = gtk_selection_data_get_texture (selection_data);
+ gtk_image_set_from_texture (GTK_IMAGE (data), texture);
+ g_object_unref (texture);
}
}
@@ -167,34 +168,45 @@ static void
copy_image (GtkMenuItem *item,
gpointer data)
{
- GtkClipboard *clipboard;
- cairo_surface_t *surface;
+ GdkClipboard *clipboard;
+ GdkTexture *texture;
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- surface = get_image_surface (GTK_IMAGE (data));
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (data));
+ texture = get_image_texture (GTK_IMAGE (data));
- if (surface)
+ if (texture)
{
- gtk_clipboard_set_surface (clipboard, surface);
- cairo_surface_destroy (surface);
+ gdk_clipboard_set_texture (clipboard, texture);
+ g_object_unref (texture);
}
}
static void
+paste_image_received (GObject *source,
+ GAsyncResult *result,
+ gpointer data)
+{
+ GdkTexture *texture;
+
+ texture = gdk_clipboard_read_texture_finish (GDK_CLIPBOARD (source), result, NULL);
+ if (texture == NULL)
+ return;
+
+ gtk_image_set_from_texture (GTK_IMAGE (data), texture);
+ g_object_unref (texture);
+}
+
+static void
paste_image (GtkMenuItem *item,
gpointer data)
{
- GtkClipboard *clipboard;
- cairo_surface_t *surface;
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- surface = gtk_clipboard_wait_for_surface (clipboard);
+ GdkClipboard *clipboard;
- if (surface)
- {
- gtk_image_set_from_surface (GTK_IMAGE (data), surface);
- cairo_surface_destroy (surface);
- }
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (data));
+ gdk_clipboard_read_texture_async (clipboard,
+ NULL,
+ paste_image_received,
+ data);
}
static gboolean
@@ -236,7 +248,6 @@ do_clipboard (GtkWidget *do_widget)
GtkWidget *label;
GtkWidget *entry, *button;
GtkWidget *image;
- GtkClipboard *clipboard;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_display (GTK_WINDOW (window),
@@ -338,10 +349,6 @@ do_clipboard (GtkWidget *do_widget)
/* context menu on image */
g_signal_connect (image, "button-press-event",
G_CALLBACK (button_press), image);
-
- /* tell the clipboard manager to make the data persistent */
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_can_store (clipboard, NULL);
}
if (!gtk_widget_get_visible (window))
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c
index f13d9d1..a5e7388 100644
--- a/demos/gtk-demo/main.c
+++ b/demos/gtk-demo/main.c
@@ -256,7 +256,7 @@ static gchar *types[] =
"GtkTreeIter ",
"GtkTreeViewColumn ",
"GdkDisplayManager ",
- "GtkClipboard ",
+ "GdkClipboard ",
"GtkIconSize ",
"GtkImage ",
"GdkDragContext ",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]