From c146132a4a0adcd0372c8c0ee032da660483018c Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 26 Nov 2017 22:39:47 +0100 Subject: [PATCH] gtk-demo: Port clipboards example to new clipboard --- demos/gtk-demo/clipboard.c | 61 +++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/demos/gtk-demo/clipboard.c b/demos/gtk-demo/clipboard.c index c0b08a1b54..18d7e0d477 100644 --- a/demos/gtk-demo/clipboard.c +++ b/demos/gtk-demo/clipboard.c @@ -13,55 +13,84 @@ #include #include +static GtkWidget *window = NULL; + void copy_button_clicked (GtkWidget *button, gpointer user_data) { GtkWidget *entry; - GtkClipboard *clipboard; + GdkClipboard *clipboard; entry = GTK_WIDGET (user_data); /* Get the clipboard object */ - clipboard = gtk_widget_get_old_clipboard (entry, - GDK_SELECTION_CLIPBOARD); + clipboard = gtk_widget_get_clipboard (entry); /* Set clipboard text */ - gtk_clipboard_set_text (clipboard, gtk_entry_get_text (GTK_ENTRY (entry)), -1); + gdk_clipboard_set_text (clipboard, gtk_entry_get_text (GTK_ENTRY (entry))); } void -paste_received (GtkClipboard *clipboard, - const gchar *text, +paste_received (GObject *source_object, + GAsyncResult *result, gpointer user_data) { + GdkClipboard *clipboard; GtkWidget *entry; + char *text; + GError *error = NULL; + clipboard = GDK_CLIPBOARD (source_object); entry = GTK_WIDGET (user_data); - /* Set the entry text */ - if(text) - gtk_entry_set_text (GTK_ENTRY (entry), text); + /* Get the resulting text of the read operation */ + text = gdk_clipboard_read_text_finish (clipboard, result, &error); + + if (text) + { + /* Set the entry text */ + gtk_entry_set_text (GTK_ENTRY (entry), text); + g_free (text); + } + else + { + GtkWidget *dialog; + + /* Show an error about why pasting failed. + * Usually you probably want to ignore such failures, + * but for demonstration purposes, we show the error. + */ + dialog = gtk_message_dialog_new (GTK_WINDOW (window), + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + "Could not paste text: %s", + error->message); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_widget_destroy), NULL); + gtk_widget_show (dialog); + + g_error_free (error); + } } void paste_button_clicked (GtkWidget *button, - gpointer user_data) + gpointer user_data) { GtkWidget *entry; - GtkClipboard *clipboard; + GdkClipboard *clipboard; entry = GTK_WIDGET (user_data); /* Get the clipboard object */ - clipboard = gtk_widget_get_old_clipboard (entry, - GDK_SELECTION_CLIPBOARD); + clipboard = gtk_widget_get_clipboard (entry); /* Request the contents of the clipboard, contents_received will be called when we do get the contents. */ - gtk_clipboard_request_text (clipboard, - paste_received, entry); + gdk_clipboard_read_text_async (clipboard, NULL, paste_received, entry); } static cairo_surface_t * @@ -201,8 +230,6 @@ button_press (GtkWidget *widget, GtkWidget * do_clipboard (GtkWidget *do_widget) { - static GtkWidget *window = NULL; - if (!window) { GtkWidget *vbox, *hbox;