diff --git a/src/tests/test-client.c b/src/tests/test-client.c index 0007d61ea..7e4235f3a 100644 --- a/src/tests/test-client.c +++ b/src/tests/test-client.c @@ -260,6 +260,22 @@ calculate_titlebar_height (GtkWindow *window) return gtk_widget_get_allocated_height (titlebar); } +static void +text_get_func (GtkClipboard *clipboard, + GtkSelectionData *selection_data, + unsigned int info, + gpointer data) +{ + gtk_selection_data_set_text (selection_data, data, -1); +} + +static void +text_clear_func (GtkClipboard *clipboard, + gpointer data) +{ + g_free (data); +} + static void process_line (const char *line) { @@ -845,6 +861,37 @@ process_line (const char *line) sync_after_lines = -1; } + else if (strcmp (argv[0], "clipboard-set") == 0) + { + GdkDisplay *display = gdk_display_get_default (); + GtkClipboard *clipboard; + GdkAtom atom; + GtkTargetList *target_list; + GtkTargetEntry *targets; + int n_targets; + + if (argc != 3) + { + g_print ("usage: clipboard-set \n"); + goto out; + } + + clipboard = gtk_clipboard_get_for_display (display, + GDK_SELECTION_CLIPBOARD); + + atom = gdk_atom_intern (argv[1], FALSE); + target_list = gtk_target_list_new (NULL, 0); + gtk_target_list_add (target_list, atom, 0, 0); + + targets = gtk_target_table_new_from_list (target_list, &n_targets); + gtk_target_list_unref (target_list); + + gtk_clipboard_set_with_data (clipboard, + targets, n_targets, + text_get_func, text_clear_func, + g_strdup (argv[2])); + gtk_target_table_free (targets, n_targets); + } else { g_print ("Unknown command %s\n", argv[0]); diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c index 6a2e5a292..1386df094 100644 --- a/src/tests/test-runner.c +++ b/src/tests/test-runner.c @@ -973,6 +973,18 @@ test_case_do (TestCase *test, if (!meta_test_client_do (client, error, argv[0], NULL)) return FALSE; } + else if (strcmp (argv[0], "clipboard-set") == 0) + { + if (argc != 4) + BAD_COMMAND("usage: %s ", argv[0]); + + MetaTestClient *client = test_case_lookup_client (test, argv[1], error); + if (!client) + return FALSE; + + if (!meta_test_client_do (client, error, argv[0], argv[2], argv[3], NULL)) + return FALSE; + } else { BAD_COMMAND("Unknown command %s", argv[0]);