tests/test-client: Add clipboard-set command

To be used for clipboard testing.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2364>
This commit is contained in:
Jonas Ådahl 2022-04-05 23:42:55 +02:00 committed by Marge Bot
parent 9930b5d7ca
commit c575696acc
2 changed files with 59 additions and 0 deletions

View File

@ -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 <mimetype> <text>\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]);

View File

@ -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 <client-id> <mimetype> <text>", 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]);