-#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, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
#include <gtk/gtk.h>
+#if defined (GDK_WINDOWING_X11)
+#include "x11/gdkx.h"
+#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)
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;
}
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));
gtk_box_pack_start (GTK_BOX (box), add_button, TRUE, TRUE, 0);
gtk_widget_show (add_button);
- gtk_signal_connect (GTK_OBJECT (add_button), "clicked",
- GTK_SIGNAL_FUNC (add_buttons),
- box);
+ g_signal_connect (add_button, "clicked",
+ G_CALLBACK (add_buttons),
+ box);
remove_button = gtk_button_new_with_mnemonic ("_Remove");
gtk_box_pack_start (GTK_BOX (box), remove_button, TRUE, TRUE, 0);
gtk_widget_show (remove_button);
- gtk_signal_connect (GTK_OBJECT (remove_button), "clicked",
- GTK_SIGNAL_FUNC (remove_buttons),
- add_button);
+ g_signal_connect (remove_button, "clicked",
+ G_CALLBACK (remove_buttons),
+ add_button);
}
-guint32
-create_child_plug (guint32 xid,
- gboolean local)
+static GtkWidget *
+create_combo (void)
{
- GtkWidget *window;
- GtkWidget *hbox;
+ GtkComboBox *combo;
GtkWidget *entry;
- GtkWidget *button;
- GtkWidget *label;
- window = gtk_plug_new (xid);
+ combo = GTK_COMBO_BOX (gtk_combo_box_entry_new_text ());
+ gtk_combo_box_append_text (combo, "item0");
+ gtk_combo_box_append_text (combo, "item1 item1");
+ gtk_combo_box_append_text (combo, "item2 item2 item2");
+ gtk_combo_box_append_text (combo, "item3 item3 item3 item3");
+ gtk_combo_box_append_text (combo, "item4 item4 item4 item4 item4");
+ gtk_combo_box_append_text (combo, "item5 item5 item5 item5 item5 item5");
+ gtk_combo_box_append_text (combo, "item6 item6 item6 item6 item6");
+ gtk_combo_box_append_text (combo, "item7 item7 item7 item7");
+ gtk_combo_box_append_text (combo, "item8 item8 item8");
+ gtk_combo_box_append_text (combo, "item9 item9");
- gtk_signal_connect (GTK_OBJECT (window), "destroy",
- local ? GTK_SIGNAL_FUNC (local_destroy) : GTK_SIGNAL_FUNC (remote_destroy),
- NULL);
- gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+ 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);
+
+ menuitem = gtk_menu_item_new_with_mnemonic ("O_K");
+ gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
+
+ 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);
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (window), hbox);
+ return menubar;
+}
+
+static GtkWidget *
+create_combo_box (void)
+{
+ GtkComboBox *combo_box = GTK_COMBO_BOX (gtk_combo_box_new_text ());
- label = gtk_label_new (local ? "Local:" : "Remote:");
- gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+ gtk_combo_box_append_text (combo_box, "This");
+ gtk_combo_box_append_text (combo_box, "Is");
+ gtk_combo_box_append_text (combo_box, "A");
+ gtk_combo_box_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;
- gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (window));
+ frame = gtk_frame_new (local? "Local" : "Remote");
+ gtk_container_set_border_width (GTK_CONTAINER (frame), 3);
+ vbox = gtk_vbox_new (TRUE, 0);
+ 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);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (blink),
- GTK_OBJECT (window));
+ /* Menubar */
+ gtk_box_pack_start (GTK_BOX (vbox), create_menubar (GTK_WINDOW (window)),
+ TRUE, TRUE, 0);
- add_buttons (NULL, hbox);
+ /* 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));
+#endif
else
return 0;
}