mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-29 06:51:10 +00:00
tests: Add testforeign
Add a test for exporting a handle. There are no GTK+ API for this, but only per backend GDK API, and so far only Wayland is supported. There is a private GdkWindow API but it's not exposed externally. https://bugzilla.gnome.org/show_bug.cgi?id=782325
This commit is contained in:
parent
dba57db1f3
commit
e5ed52b6c9
@ -176,6 +176,10 @@ noinst_PROGRAMS = $(TEST_PROGS) \
|
|||||||
testpopupat \
|
testpopupat \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
if USE_WAYLAND
|
||||||
|
noinst_PROGRAMS += testforeign
|
||||||
|
endif
|
||||||
|
|
||||||
if USE_X11
|
if USE_X11
|
||||||
noinst_PROGRAMS += testerrors
|
noinst_PROGRAMS += testerrors
|
||||||
endif
|
endif
|
||||||
@ -365,6 +369,9 @@ testfontchooserdialog_SOURCES = \
|
|||||||
testfontoptions_SOURCES = \
|
testfontoptions_SOURCES = \
|
||||||
testfontoptions.c
|
testfontoptions.c
|
||||||
|
|
||||||
|
testforeign_SOURCES = \
|
||||||
|
testforeign.c
|
||||||
|
|
||||||
testgrid_SOURCES = \
|
testgrid_SOURCES = \
|
||||||
testgrid.c
|
testgrid.c
|
||||||
|
|
||||||
|
117
tests/testforeign.c
Normal file
117
tests/testforeign.c
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <gdk/wayland/gdkwayland.h>
|
||||||
|
|
||||||
|
static GtkWidget *window;
|
||||||
|
static GtkWidget *label;
|
||||||
|
static GtkWidget *entry;
|
||||||
|
static GtkWidget *unexport_button;
|
||||||
|
static char *export_handle;
|
||||||
|
int export_count;
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_ui (void)
|
||||||
|
{
|
||||||
|
gboolean can_unexport;
|
||||||
|
char *label_text;
|
||||||
|
|
||||||
|
gtk_entry_set_text (GTK_ENTRY (entry), export_handle ? export_handle : "");
|
||||||
|
|
||||||
|
label_text = g_strdup_printf ("Export count: %d", export_count);
|
||||||
|
gtk_label_set_text (GTK_LABEL (label), label_text);
|
||||||
|
g_free (label_text);
|
||||||
|
|
||||||
|
can_unexport = !!export_handle;
|
||||||
|
gtk_widget_set_sensitive (unexport_button, can_unexport);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
exported_callback (GdkWindow *window,
|
||||||
|
const char *handle,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
if (!export_handle)
|
||||||
|
export_handle = g_strdup (handle);
|
||||||
|
|
||||||
|
g_assert (g_str_equal (handle, export_handle));
|
||||||
|
|
||||||
|
export_count++;
|
||||||
|
|
||||||
|
update_ui ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
export_callback (GtkWidget *widget,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
if (!gdk_wayland_window_export_handle (gtk_widget_get_window (window),
|
||||||
|
exported_callback,
|
||||||
|
g_strdup ("user_data"), g_free))
|
||||||
|
g_error ("Failed to export window");
|
||||||
|
|
||||||
|
update_ui ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unexport_callback (GtkWidget *widget,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
gdk_wayland_window_unexport_handle (gtk_widget_get_window (window));
|
||||||
|
|
||||||
|
export_count--;
|
||||||
|
if (export_count == 0)
|
||||||
|
g_clear_pointer (&export_handle, g_free);
|
||||||
|
|
||||||
|
update_ui ();
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc,
|
||||||
|
char *argv[])
|
||||||
|
{
|
||||||
|
GdkDisplay *display;
|
||||||
|
GtkWidget *vbox;
|
||||||
|
GtkWidget *hbox;
|
||||||
|
GtkWidget *export_button;
|
||||||
|
|
||||||
|
gtk_init (&argc, &argv);
|
||||||
|
|
||||||
|
|
||||||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
|
|
||||||
|
display = gtk_widget_get_display (window);
|
||||||
|
if (!GDK_IS_WAYLAND_DISPLAY (display))
|
||||||
|
g_error ("This test is only works on Wayland");
|
||||||
|
|
||||||
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
||||||
|
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
|
||||||
|
|
||||||
|
label = gtk_label_new (NULL);
|
||||||
|
entry = gtk_entry_new ();
|
||||||
|
gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
|
||||||
|
|
||||||
|
export_button = gtk_button_new_with_label ("Export");
|
||||||
|
unexport_button = gtk_button_new_with_label("Unexport");
|
||||||
|
g_signal_connect (export_button, "clicked",
|
||||||
|
G_CALLBACK (export_callback), NULL);
|
||||||
|
g_signal_connect (unexport_button, "clicked",
|
||||||
|
G_CALLBACK (unexport_callback), NULL);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (hbox), export_button);
|
||||||
|
gtk_container_add (GTK_CONTAINER (hbox), unexport_button);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (vbox), entry);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vbox), label);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vbox), hbox);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||||
|
|
||||||
|
update_ui ();
|
||||||
|
|
||||||
|
g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
|
||||||
|
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
|
||||||
|
gtk_main ();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user