summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-04-30 20:17:36 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-04-30 20:17:36 +0000
commitd9aeb7bc7db99c2342cf235f55f4ff98967af238 (patch)
tree1bd196ec7eae0b34e77e02a410ec5d4157ea177d /tests
parent75e535515a927367dec64eb81fffa060a3868bf2 (diff)
downloadgtk+-d9aeb7bc7db99c2342cf235f55f4ff98967af238.tar.gz
Multi-screen test case form multihead branch with a few cleanups. (Get rid
Tue Apr 30 15:59:53 2002 Owen Taylor <otaylor@redhat.com> * tests/testmultiscreen.c: Multi-screen test case form multihead branch with a few cleanups. (Get rid of use of g_object_connect()) * tests/testmultidisplay.c: Multi-display test case from multihead branch with a few improvements. (Allow the other display name to be passed on the command line, use a GtkDialog to get more attractive spacing.)
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am6
-rw-r--r--tests/testmultidisplay.c163
-rw-r--r--tests/testmultiscreen.c155
3 files changed, 324 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 72cd257b4e..40cb11f4d7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -30,6 +30,8 @@ noinst_PROGRAMS = \
testdnd \
testgtk \
testinput \
+ testmultidisplay \
+ testmultiscreen \
testrgb \
testselection \
$(testsocket_programs) \
@@ -49,6 +51,8 @@ testcalendar_DEPENDENCIES = $(TEST_DEPS)
testdnd_DEPENDENCIES = $(TEST_DEPS)
testgtk_DEPENDENCIES = $(TEST_DEPS)
testinput_DEPENDENCIES = $(TEST_DEPS)
+testmultidisplay_DEPENDENCIES = $(TEST_DEPS)
+testmultiscreen_DEPENDENCIES = $(TEST_DEPS)
testrgb_DEPENDENCIES = $(TEST_DEPS)
testselection_DEPENDENCIES = $(TEST_DEPS)
testsocket_DEPENDENCIES = $(DEPS)
@@ -69,6 +73,8 @@ testcalendar_LDADD = $(LDADDS)
testdnd_LDADD = $(LDADDS)
testgtk_LDADD = $(LDADDS)
testinput_LDADD = $(LDADDS)
+testmultidisplay_LDADD = $(LDADDS)
+testmultiscreen_LDADD = $(LDADDS)
testrgb_LDADD = $(LDADDS)
testselection_LDADD = $(LDADDS)
testsocket_LDADD = $(LDADDS)
diff --git a/tests/testmultidisplay.c b/tests/testmultidisplay.c
new file mode 100644
index 0000000000..92c434fab7
--- /dev/null
+++ b/tests/testmultidisplay.c
@@ -0,0 +1,163 @@
+#include <strings.h>
+#include <gtk/gtk.h>
+#include <gtk/gtkstock.h>
+#include <gdk/gdk.h>
+
+gchar *screen2_name = NULL;
+
+typedef struct
+{
+ GtkEntry *e1;
+ GtkEntry *e2;
+}
+MyDoubleGtkEntry;
+
+void
+get_screen_response (GtkDialog *dialog,
+ gint response_id,
+ GtkEntry *entry)
+{
+ if (response_id == GTK_RESPONSE_DELETE_EVENT)
+ return;
+ if (screen2_name)
+ g_free (screen2_name);
+ screen2_name = g_strdup (gtk_entry_get_text (entry));
+}
+
+void
+entry_dialog_response (GtkDialog *dialog,
+ gint response_id,
+ MyDoubleGtkEntry *de)
+{
+ if (response_id == GTK_RESPONSE_APPLY)
+ gtk_entry_set_text (de->e2, gtk_entry_get_text (de->e1));
+ else
+ gtk_main_quit ();
+}
+
+void
+make_selection_dialog (GdkScreen * screen,
+ GtkWidget * entry,
+ GtkWidget * other_entry)
+{
+ GtkWidget *window, *vbox;
+ MyDoubleGtkEntry *double_entry = g_new (MyDoubleGtkEntry, 1);
+ double_entry->e1 = GTK_ENTRY (entry);
+ double_entry->e2 = GTK_ENTRY (other_entry);
+
+ if (!screen)
+ screen = gdk_get_default_screen ();
+
+ window = gtk_widget_new (GTK_TYPE_DIALOG,
+ "screen", screen,
+ "user_data", NULL,
+ "type", GTK_WINDOW_TOPLEVEL,
+ "title", "MultiDisplay Cut & Paste",
+ "border_width", 10, NULL);
+ g_signal_connect (G_OBJECT (window), "destroy",
+ G_CALLBACK (gtk_main_quit), NULL);
+
+
+ vbox = gtk_widget_new (GTK_TYPE_VBOX,
+ "border_width", 5,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), vbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
+ gtk_widget_grab_focus (entry);
+
+ gtk_dialog_add_buttons (GTK_DIALOG (window),
+ GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+ GTK_STOCK_QUIT, GTK_RESPONSE_DELETE_EVENT,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (window), GTK_RESPONSE_APPLY);
+
+ g_signal_connect (G_OBJECT (window), "response",
+ G_CALLBACK (entry_dialog_response), double_entry);
+
+ gtk_widget_show_all (window);
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *dialog, *display_entry, *dialog_label;
+ GtkWidget *entry, *entry2;
+ GdkDisplay *dpy2;
+ GdkScreen *scr2 = NULL; /* Quiet GCC */
+ gboolean correct_second_display = FALSE;
+
+ gtk_init (&argc, &argv);
+
+ if (argc == 2)
+ screen2_name = g_strdup (argv[1]);
+
+ /* Get the second display information */
+
+ dialog = gtk_dialog_new_with_buttons ("Second Display Selection",
+ NULL,
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK, NULL);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ display_entry = gtk_entry_new ();
+ gtk_entry_set_activates_default (GTK_ENTRY (display_entry), TRUE);
+ dialog_label =
+ gtk_label_new ("Please enter the name of\nthe second display\n");
+
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), dialog_label);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
+ display_entry);
+ gtk_signal_connect (GTK_OBJECT (dialog), "response",
+ GTK_SIGNAL_FUNC (get_screen_response), display_entry);
+
+ gtk_widget_grab_focus (display_entry);
+ gtk_widget_show_all (GTK_BIN (dialog)->child);
+
+ while (!correct_second_display)
+ {
+ if (screen2_name)
+ {
+ if (!g_strcasecmp (screen2_name, ""))
+ g_printerr ("No display name, reverting to default display\n");
+
+ dpy2 = gdk_open_display (screen2_name);
+ if (dpy2)
+ {
+ scr2 = gdk_display_get_default_screen (dpy2);
+ correct_second_display = TRUE;
+ }
+ else
+ {
+ char *error_msg =
+ g_strdup_printf ("Can't open display :\n\t%s\nplease try another one\n",
+ screen2_name);
+ gtk_label_set_text (GTK_LABEL (dialog_label), error_msg);
+ g_free (error_msg);
+ }
+ }
+
+ if (!correct_second_display)
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ }
+
+ gtk_widget_destroy (dialog);
+
+ entry = gtk_widget_new (GTK_TYPE_ENTRY,
+ "activates_default", TRUE,
+ "visible", TRUE,
+ NULL);
+ entry2 = gtk_widget_new (GTK_TYPE_ENTRY,
+ "activates_default", TRUE,
+ "visible", TRUE,
+ NULL);
+
+ /* for default display */
+ make_selection_dialog (NULL, entry2, entry);
+ /* for selected display */
+ make_selection_dialog (scr2, entry, entry2);
+ gtk_main ();
+
+ return 0;
+}
diff --git a/tests/testmultiscreen.c b/tests/testmultiscreen.c
new file mode 100644
index 0000000000..a2c894d4ab
--- /dev/null
+++ b/tests/testmultiscreen.c
@@ -0,0 +1,155 @@
+#include <gtk/gtk.h>
+
+static GtkWidget **images;
+static GtkWidget **vbox;
+
+static void
+hello (GtkWidget * button, char *label)
+{
+ g_print ("Click from %s\n", label);
+}
+
+static void
+show_hide (GtkWidget * button, gpointer data)
+{
+ gint num_screen = GPOINTER_TO_INT (data);
+
+ static gboolean visible = TRUE;
+ if (visible)
+ {
+ gtk_widget_hide (images[num_screen]);
+ gtk_button_set_label (GTK_BUTTON (button), "Show Icon");
+ visible = FALSE;
+ }
+ else
+ {
+ gtk_widget_show (images[num_screen]);
+ gtk_button_set_label (GTK_BUTTON (button), "Hide Icon");
+ visible = TRUE;
+ }
+}
+
+static void
+move (GtkWidget *button, GtkVBox *vbox)
+{
+ GdkScreen *screen = gtk_widget_get_screen (button);
+ GtkWidget *toplevel = gtk_widget_get_toplevel (button);
+ GtkWidget *new_toplevel;
+ GdkDisplay *display = gdk_screen_get_display (screen);
+ gint number_of_screens = gdk_display_get_n_screens (display);
+ gint screen_num = gdk_screen_get_number (screen);
+
+ g_print ("This button is on screen %d\n", gdk_screen_get_number (screen));
+
+ new_toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ if ((screen_num +1) < number_of_screens)
+ gtk_window_set_screen (GTK_WINDOW (new_toplevel),
+ gdk_display_get_screen (display,
+ screen_num + 1));
+ else
+ gtk_window_set_screen (GTK_WINDOW (new_toplevel),
+ gdk_display_get_screen (display, 0));
+
+ gtk_widget_reparent (GTK_WIDGET (vbox), new_toplevel);
+ gtk_widget_destroy (toplevel);
+ gtk_widget_show_all (new_toplevel);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget **window;
+ GtkWidget *moving_window, *moving_button, *moving_vbox, *moving_image;
+ gint num_screen = 0;
+ gchar *displayname = NULL;
+ gint i;
+ GdkScreen **screen_list;
+ GdkDisplay *dpy;
+ GSList *ids;
+
+ gtk_init (&argc, &argv);
+
+ dpy = gdk_get_default_display ();
+ num_screen = gdk_display_get_n_screens (dpy);
+ displayname = g_strdup (gdk_display_get_name (dpy));
+ g_print ("This X Server (%s) manages %d screen(s).\n",
+ displayname, num_screen);
+ screen_list = g_new (GdkScreen *, num_screen);
+ window = g_new (GtkWidget *, num_screen);
+ images = g_new (GtkWidget *, num_screen);
+ vbox = g_new (GtkWidget *, num_screen);
+
+ ids = gtk_stock_list_ids ();
+
+ for (i = 0; i < num_screen; i++)
+ {
+ char *label = g_strdup_printf ("Screen %d", i);
+ GtkWidget *button;
+
+ screen_list[i] = gdk_display_get_screen (dpy, i);
+
+ window[i] = gtk_widget_new (GTK_TYPE_WINDOW,
+ "screen", screen_list[i],
+ "user_data", NULL,
+ "type", GTK_WINDOW_TOPLEVEL,
+ "title", label,
+ "allow_grow", FALSE,
+ "allow_shrink", FALSE,
+ "border_width", 10, NULL,
+ NULL);
+ g_signal_connect (window[i], "destroy",
+ G_CALLBACK (gtk_main_quit), NULL);
+
+ vbox[i] = gtk_vbox_new (TRUE, 0);
+ gtk_container_add (GTK_CONTAINER (window[i]), vbox[i]);
+
+ button = gtk_widget_new (GTK_TYPE_BUTTON,
+ "label", label,
+ "parent", vbox[i],
+ "visible", TRUE, NULL,
+ NULL);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (hello), label);
+
+ images[i] = gtk_image_new_from_stock (g_slist_nth (ids, i+1)->data,
+ GTK_ICON_SIZE_BUTTON);
+
+ gtk_container_add (GTK_CONTAINER (vbox[i]), images[i]);
+
+ button = gtk_widget_new (GTK_TYPE_BUTTON,
+ "label", "Hide Icon",
+ "parent", vbox[i],
+ "visible", TRUE, NULL,
+ NULL);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (show_hide), GINT_TO_POINTER (i));
+ }
+
+ for (i = 0; i < num_screen; i++)
+ gtk_widget_show_all (window[i]);
+
+ moving_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ moving_vbox = gtk_vbox_new (TRUE, 0);
+
+ gtk_container_add (GTK_CONTAINER (moving_window), moving_vbox);
+ moving_button = gtk_widget_new (GTK_TYPE_BUTTON,
+ "label", "Move to Next Screen",
+ "visible", TRUE,
+ NULL);
+
+ g_signal_connect (G_OBJECT (moving_button), "clicked",
+ G_CALLBACK (move), moving_vbox);
+
+ gtk_container_add (GTK_CONTAINER (moving_vbox), moving_button);
+
+ moving_image = gtk_image_new_from_stock (g_slist_nth (ids, num_screen + 2)->data,
+ GTK_ICON_SIZE_BUTTON);
+ gtk_container_add (GTK_CONTAINER (moving_vbox), moving_image);
+ gtk_widget_show_all (moving_window);
+
+ gtk_main ();
+
+ return 0;
+}