X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=tests%2Ftestsocket_common.c;h=c93f1e27978e268d9a2ee074576150a1b420fabe;hb=9d0febc9a64a5bfb0fcfc3a88de4757f6c1ff090;hp=4e87de6b07d915c380c1d024932d3a5f6f6bbba4;hpb=37278865e17dc4fe7583511c30c3570fdfcf68d1;p=~andy%2Fgtk diff --git a/tests/testsocket_common.c b/tests/testsocket_common.c index 4e87de6b0..c93f1e279 100644 --- a/tests/testsocket_common.c +++ b/tests/testsocket_common.c @@ -1,5 +1,60 @@ -#include "x11/gdkx.h" +/* testsocket_common.c + * Copyright (C) 2001 Red Hat, Inc + * Author: Owen Taylor + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library. If not, see . + */ + +#include "config.h" #include +#if defined (GDK_WINDOWING_X11) +#include +#elif defined (GDK_WINDOWING_WIN32) +#include "win32/gdkwin32.h" +#endif + +enum +{ + ACTION_FILE_NEW, + ACTION_FILE_OPEN, + ACTION_OK, + ACTION_HELP_ABOUT +}; + +static void +print_hello (GtkWidget *w, + guint action) +{ + switch (action) + { + case ACTION_FILE_NEW: + g_message ("File New activated"); + break; + case ACTION_FILE_OPEN: + g_message ("File Open activated"); + break; + case ACTION_OK: + g_message ("OK activated"); + break; + case ACTION_HELP_ABOUT: + g_message ("Help About activated "); + break; + default: + g_assert_not_reached (); + break; + } +} static void remove_buttons (GtkWidget *widget, GtkWidget *other_button) @@ -14,7 +69,7 @@ blink_cb (gpointer data) GtkWidget *widget = data; gtk_widget_show (widget); - g_object_set_data (G_OBJECT (widget), "blink", GPOINTER_TO_UINT (0)); + g_object_set_data (G_OBJECT (widget), "blink", NULL); return FALSE; } @@ -27,7 +82,7 @@ blink (GtkWidget *widget, if (!blink_timeout) { - blink_timeout = g_timeout_add (1000, blink_cb, window); + blink_timeout = gdk_threads_add_timeout (1000, blink_cb, window); gtk_widget_hide (window); g_object_set_data (G_OBJECT (window), "blink", GUINT_TO_POINTER (blink_timeout)); @@ -72,52 +127,160 @@ add_buttons (GtkWidget *widget, GtkWidget *box) add_button); } -guint32 -create_child_plug (guint32 xid, - gboolean local) +static GtkWidget * +create_combo (void) { - GtkWidget *window; - GtkWidget *hbox; + GtkComboBoxText *combo; GtkWidget *entry; - GtkWidget *button; - GtkWidget *label; - window = gtk_plug_new (xid); + combo = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new_with_entry ()); - g_signal_connect (window, "destroy", - local ? G_CALLBACK (local_destroy) - : G_CALLBACK (remote_destroy), - NULL); - gtk_container_set_border_width (GTK_CONTAINER (window), 0); + gtk_combo_box_text_append_text (combo, "item0"); + gtk_combo_box_text_append_text (combo, "item1 item1"); + gtk_combo_box_text_append_text (combo, "item2 item2 item2"); + gtk_combo_box_text_append_text (combo, "item3 item3 item3 item3"); + gtk_combo_box_text_append_text (combo, "item4 item4 item4 item4 item4"); + gtk_combo_box_text_append_text (combo, "item5 item5 item5 item5 item5 item5"); + gtk_combo_box_text_append_text (combo, "item6 item6 item6 item6 item6"); + gtk_combo_box_text_append_text (combo, "item7 item7 item7 item7"); + gtk_combo_box_text_append_text (combo, "item8 item8 item8"); + gtk_combo_box_text_append_text (combo, "item9 item9"); + + entry = gtk_bin_get_child (GTK_BIN (combo)); + gtk_entry_set_text (GTK_ENTRY (entry), "hello world"); + gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); + + return GTK_WIDGET (combo); +} + +static GtkWidget * +create_menubar (GtkWindow *window) +{ + GtkAccelGroup *accel_group=NULL; + GtkWidget *menubar; + GtkWidget *menuitem; + GtkWidget *menu; + + accel_group = gtk_accel_group_new (); + gtk_window_add_accel_group (window, accel_group); + + menubar = gtk_menu_bar_new (); + + menuitem = gtk_menu_item_new_with_mnemonic ("_File"); + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem); + menu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu); + menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, NULL); + g_signal_connect (menuitem, "activate", G_CALLBACK (print_hello), window); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + menuitem = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL); + g_signal_connect (menuitem, "activate", G_CALLBACK (gtk_main_quit), window); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); - hbox = gtk_hbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), hbox); + menuitem = gtk_menu_item_new_with_mnemonic ("O_K"); + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem); - label = gtk_label_new (local ? "Local:" : "Remote:"); - gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); + menuitem = gtk_menu_item_new_with_mnemonic ("_Help"); + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem); + menu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu); + menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_ABOUT, NULL); + g_signal_connect (menuitem, "activate", G_CALLBACK (print_hello), window); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + + return menubar; +} + +static GtkWidget * +create_combo_box (void) +{ + GtkComboBoxText *combo_box = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new ()); + + gtk_combo_box_text_append_text (combo_box, "This"); + gtk_combo_box_text_append_text (combo_box, "Is"); + gtk_combo_box_text_append_text (combo_box, "A"); + gtk_combo_box_text_append_text (combo_box, "ComboBox"); - entry = gtk_entry_new (); - gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); + return GTK_WIDGET (combo_box); +} - button = gtk_button_new_with_mnemonic ("_Close"); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); +static GtkWidget * +create_content (GtkWindow *window, gboolean local) +{ + GtkWidget *vbox; + GtkWidget *button; + GtkWidget *frame; + + frame = gtk_frame_new (local? "Local" : "Remote"); + gtk_container_set_border_width (GTK_CONTAINER (frame), 3); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 3); + + gtk_container_add (GTK_CONTAINER (frame), vbox); + + /* Combo */ + gtk_box_pack_start (GTK_BOX (vbox), create_combo(), TRUE, TRUE, 0); + /* Entry */ + gtk_box_pack_start (GTK_BOX (vbox), gtk_entry_new(), TRUE, TRUE, 0); + + /* Close Button */ + button = gtk_button_new_with_mnemonic ("_Close"); + gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window); + /* Blink Button */ button = gtk_button_new_with_mnemonic ("_Blink"); - gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); - + gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); g_signal_connect (button, "clicked", G_CALLBACK (blink), window); - add_buttons (NULL, hbox); + /* Menubar */ + gtk_box_pack_start (GTK_BOX (vbox), create_menubar (GTK_WINDOW (window)), + TRUE, TRUE, 0); + + /* Combo Box */ + gtk_box_pack_start (GTK_BOX (vbox), create_combo_box (), TRUE, TRUE, 0); + add_buttons (NULL, vbox); + + return frame; +} + +guint32 +create_child_plug (guint32 xid, + gboolean local) +{ + GtkWidget *window; + GtkWidget *content; + + window = gtk_plug_new (xid); + + g_signal_connect (window, "destroy", + local ? G_CALLBACK (local_destroy) + : G_CALLBACK (remote_destroy), + NULL); + gtk_container_set_border_width (GTK_CONTAINER (window), 0); + + content = create_content (GTK_WINDOW (window), local); + + gtk_container_add (GTK_CONTAINER (window), content); + gtk_widget_show_all (window); - if (GTK_WIDGET_REALIZED (window)) - return GDK_WINDOW_XID (window->window); + if (gtk_widget_get_realized (window)) +#if defined (GDK_WINDOWING_X11) + return GDK_WINDOW_XID (gtk_widget_get_window (window)); +#elif defined (GDK_WINDOWING_WIN32) + return (guint32) GDK_WINDOW_HWND (gtk_widget_get_window (window)); +#elif defined (GDK_WINDOWING_BROADWAY) + return (guint32) 0; /* Child windows not supported */ +#endif else return 0; }