Blame tests/testsocket_common.c

Packit 98cdb6
/* testsocket_common.c
Packit 98cdb6
 * Copyright (C) 2001 Red Hat, Inc
Packit 98cdb6
 * Author: Owen Taylor
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Library General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Library General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Library General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#undef GTK_DISABLE_DEPRECATED
Packit 98cdb6
Packit 98cdb6
#include "config.h"
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
#if defined (GDK_WINDOWING_X11)
Packit 98cdb6
#include "x11/gdkx.h"
Packit 98cdb6
#elif defined (GDK_WINDOWING_WIN32)
Packit 98cdb6
#include "win32/gdkwin32.h"
Packit 98cdb6
#endif
Packit 98cdb6
Packit 98cdb6
enum
Packit 98cdb6
{
Packit 98cdb6
  ACTION_FILE_NEW,
Packit 98cdb6
  ACTION_FILE_OPEN,
Packit 98cdb6
  ACTION_OK,
Packit 98cdb6
  ACTION_HELP_ABOUT
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
print_hello (GtkWidget *w,
Packit 98cdb6
	     guint      action)
Packit 98cdb6
{
Packit 98cdb6
  switch (action)
Packit 98cdb6
    {
Packit 98cdb6
    case ACTION_FILE_NEW:
Packit 98cdb6
      g_message ("File New activated");
Packit 98cdb6
      break;
Packit 98cdb6
    case ACTION_FILE_OPEN:
Packit 98cdb6
      g_message ("File Open activated");
Packit 98cdb6
      break;
Packit 98cdb6
    case ACTION_OK:
Packit 98cdb6
      g_message ("OK activated");
Packit 98cdb6
      break;
Packit 98cdb6
    case ACTION_HELP_ABOUT:
Packit 98cdb6
      g_message ("Help About activated ");
Packit 98cdb6
      break;
Packit 98cdb6
    default:
Packit 98cdb6
      g_assert_not_reached ();
Packit 98cdb6
      break;
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkItemFactoryEntry menu_items[] = {
Packit 98cdb6
  { "/_File",         NULL,         NULL,           0, "<Branch>" },
Packit 98cdb6
  { "/File/_New",     "<control>N", print_hello,    ACTION_FILE_NEW, "<Item>" },
Packit 98cdb6
  { "/File/_Open",    "<control>O", print_hello,    ACTION_FILE_OPEN, "<Item>" },
Packit 98cdb6
  { "/File/sep1",     NULL,         NULL,           0, "<Separator>" },
Packit 98cdb6
  { "/File/Quit",     "<control>Q", gtk_main_quit,  0, "<Item>" },
Packit 98cdb6
  { "/O_K",            "<control>K",print_hello,    ACTION_OK, "<Item>" },
Packit 98cdb6
  { "/_Help",         NULL,         NULL,           0, "<LastBranch>" },
Packit 98cdb6
  { "/_Help/About",   NULL,         print_hello,    ACTION_HELP_ABOUT, "<Item>" },
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
remove_buttons (GtkWidget *widget, GtkWidget *other_button)
Packit 98cdb6
{
Packit 98cdb6
  gtk_widget_destroy (other_button);
Packit 98cdb6
  gtk_widget_destroy (widget);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static gboolean
Packit 98cdb6
blink_cb (gpointer data)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *widget = data;
Packit 98cdb6
Packit 98cdb6
  gtk_widget_show (widget);
Packit 98cdb6
  g_object_set_data (G_OBJECT (widget), "blink", NULL);
Packit 98cdb6
Packit 98cdb6
  return FALSE;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
blink (GtkWidget *widget,
Packit 98cdb6
       GtkWidget *window)
Packit 98cdb6
{
Packit 98cdb6
  guint blink_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (window), "blink"));
Packit 98cdb6
  
Packit 98cdb6
  if (!blink_timeout)
Packit 98cdb6
    {
Packit 98cdb6
      blink_timeout = gdk_threads_add_timeout (1000, blink_cb, window);
Packit 98cdb6
      gtk_widget_hide (window);
Packit 98cdb6
Packit 98cdb6
      g_object_set_data (G_OBJECT (window), "blink", GUINT_TO_POINTER (blink_timeout));
Packit 98cdb6
    }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
local_destroy (GtkWidget *window)
Packit 98cdb6
{
Packit 98cdb6
  guint blink_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (window), "blink"));
Packit 98cdb6
  if (blink_timeout)
Packit 98cdb6
    g_source_remove (blink_timeout);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
remote_destroy (GtkWidget *window)
Packit 98cdb6
{
Packit 98cdb6
  local_destroy (window);
Packit 98cdb6
  gtk_main_quit ();
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
add_buttons (GtkWidget *widget, GtkWidget *box)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *add_button;
Packit 98cdb6
  GtkWidget *remove_button;
Packit 98cdb6
Packit 98cdb6
  add_button = gtk_button_new_with_mnemonic ("_Add");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), add_button, TRUE, TRUE, 0);
Packit 98cdb6
  gtk_widget_show (add_button);
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (add_button, "clicked",
Packit 98cdb6
		    G_CALLBACK (add_buttons),
Packit 98cdb6
		    box);
Packit 98cdb6
Packit 98cdb6
  remove_button = gtk_button_new_with_mnemonic ("_Remove");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (box), remove_button, TRUE, TRUE, 0);
Packit 98cdb6
  gtk_widget_show (remove_button);
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (remove_button, "clicked",
Packit 98cdb6
		    G_CALLBACK (remove_buttons),
Packit 98cdb6
		    add_button);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkWidget *
Packit 98cdb6
create_combo (void)
Packit 98cdb6
{
Packit 98cdb6
  GtkComboBoxText *combo;
Packit 98cdb6
  GtkWidget *entry;
Packit 98cdb6
Packit 98cdb6
  combo = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new_with_entry ());
Packit 98cdb6
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item0");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item1 item1");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item2 item2 item2");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item3 item3 item3 item3");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item4 item4 item4 item4 item4");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item5 item5 item5 item5 item5 item5");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item6 item6 item6 item6 item6");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item7 item7 item7 item7");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item8 item8 item8");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo, "item9 item9");
Packit 98cdb6
Packit 98cdb6
  entry = gtk_bin_get_child (GTK_BIN (combo));
Packit 98cdb6
  gtk_entry_set_text (GTK_ENTRY (entry), "hello world");
Packit 98cdb6
  gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
Packit 98cdb6
Packit 98cdb6
  return GTK_WIDGET (combo);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkWidget *
Packit 98cdb6
create_menubar (GtkWindow *window)
Packit 98cdb6
{
Packit 98cdb6
  GtkItemFactory *item_factory;
Packit 98cdb6
  GtkAccelGroup *accel_group=NULL;
Packit 98cdb6
  GtkWidget *menubar;
Packit 98cdb6
  
Packit 98cdb6
  accel_group = gtk_accel_group_new ();
Packit 98cdb6
  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
Packit 98cdb6
                                       accel_group);
Packit 98cdb6
  gtk_item_factory_create_items (item_factory,
Packit 98cdb6
				 G_N_ELEMENTS (menu_items),
Packit 98cdb6
				 menu_items, NULL);
Packit 98cdb6
  
Packit 98cdb6
  gtk_window_add_accel_group (window, accel_group);
Packit 98cdb6
  menubar = gtk_item_factory_get_widget (item_factory, "<main>");
Packit 98cdb6
Packit 98cdb6
  return menubar;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkWidget *
Packit 98cdb6
create_combo_box (void)
Packit 98cdb6
{
Packit 98cdb6
  GtkComboBoxText *combo_box = GTK_COMBO_BOX_TEXT (gtk_combo_box_text_new ());
Packit 98cdb6
Packit 98cdb6
  gtk_combo_box_text_append_text (combo_box, "This");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo_box, "Is");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo_box, "A");
Packit 98cdb6
  gtk_combo_box_text_append_text (combo_box, "ComboBox");
Packit 98cdb6
  
Packit 98cdb6
  return GTK_WIDGET (combo_box);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkWidget *
Packit 98cdb6
create_content (GtkWindow *window, gboolean local)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *vbox;
Packit 98cdb6
  GtkWidget *button;
Packit 98cdb6
  GtkWidget *frame;
Packit 98cdb6
Packit 98cdb6
  frame = gtk_frame_new (local? "Local" : "Remote");
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (frame), 3);
Packit 98cdb6
  vbox = gtk_vbox_new (TRUE, 0);
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
Packit 98cdb6
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (frame), vbox);
Packit 98cdb6
  
Packit 98cdb6
  /* Combo */
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), create_combo(), TRUE, TRUE, 0);
Packit 98cdb6
Packit 98cdb6
  /* Entry */
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), gtk_entry_new(), TRUE, TRUE, 0);
Packit 98cdb6
Packit 98cdb6
  /* Close Button */
Packit 98cdb6
  button = gtk_button_new_with_mnemonic ("_Close");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
Packit 98cdb6
  g_signal_connect_swapped (button, "clicked",
Packit 98cdb6
			    G_CALLBACK (gtk_widget_destroy), window);
Packit 98cdb6
Packit 98cdb6
  /* Blink Button */
Packit 98cdb6
  button = gtk_button_new_with_mnemonic ("_Blink");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
Packit 98cdb6
  g_signal_connect (button, "clicked",
Packit 98cdb6
		    G_CALLBACK (blink),
Packit 98cdb6
		    window);
Packit 98cdb6
Packit 98cdb6
  /* Menubar */
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), create_menubar (GTK_WINDOW (window)),
Packit 98cdb6
		      TRUE, TRUE, 0);
Packit 98cdb6
Packit 98cdb6
  /* Combo Box */
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), create_combo_box (), TRUE, TRUE, 0);
Packit 98cdb6
  
Packit 98cdb6
  add_buttons (NULL, vbox);
Packit 98cdb6
Packit 98cdb6
  return frame;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
guint32
Packit 98cdb6
create_child_plug (guint32  xid,
Packit 98cdb6
		   gboolean local)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *window;
Packit 98cdb6
  GtkWidget *content;
Packit 98cdb6
Packit 98cdb6
  window = gtk_plug_new (xid);
Packit 98cdb6
Packit 98cdb6
  g_signal_connect (window, "destroy",
Packit 98cdb6
		    local ? G_CALLBACK (local_destroy)
Packit 98cdb6
			  : G_CALLBACK (remote_destroy),
Packit 98cdb6
		    NULL);
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Packit 98cdb6
Packit 98cdb6
  content = create_content (GTK_WINDOW (window), local);
Packit 98cdb6
  
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (window), content);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_show_all (window);
Packit 98cdb6
Packit 98cdb6
  if (gtk_widget_get_realized (window))
Packit 98cdb6
#if defined (GDK_WINDOWING_X11)
Packit 98cdb6
    return GDK_WINDOW_XID (window->window);
Packit 98cdb6
#elif defined (GDK_WINDOWING_WIN32)
Packit 98cdb6
    return (guint32) GDK_WINDOW_HWND (window->window);
Packit 98cdb6
#endif
Packit 98cdb6
  else
Packit 98cdb6
    return 0;
Packit 98cdb6
}