forked from AuroraMiddleware/gtk
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.)
This commit is contained in:
parent
75e535515a
commit
d9aeb7bc7d
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
||||
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.)
|
||||
|
||||
Tue Apr 30 14:23:43 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdisplay-x11.c (gdk_open_display): fix
|
||||
|
@ -1,3 +1,15 @@
|
||||
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.)
|
||||
|
||||
Tue Apr 30 14:23:43 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdisplay-x11.c (gdk_open_display): fix
|
||||
|
@ -1,3 +1,15 @@
|
||||
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.)
|
||||
|
||||
Tue Apr 30 14:23:43 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdisplay-x11.c (gdk_open_display): fix
|
||||
|
@ -1,3 +1,15 @@
|
||||
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.)
|
||||
|
||||
Tue Apr 30 14:23:43 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdisplay-x11.c (gdk_open_display): fix
|
||||
|
@ -1,3 +1,15 @@
|
||||
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.)
|
||||
|
||||
Tue Apr 30 14:23:43 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdisplay-x11.c (gdk_open_display): fix
|
||||
|
@ -1,3 +1,15 @@
|
||||
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.)
|
||||
|
||||
Tue Apr 30 14:23:43 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdisplay-x11.c (gdk_open_display): fix
|
||||
|
@ -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)
|
||||
|
163
tests/testmultidisplay.c
Normal file
163
tests/testmultidisplay.c
Normal file
@ -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;
|
||||
}
|
155
tests/testmultiscreen.c
Normal file
155
tests/testmultiscreen.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user