testgtk.c 312 KB
Newer Older
Elliot Lee's avatar
Elliot Lee committed
1 2 3 4
/* GTK - The GIMP Toolkit
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 *
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
Elliot Lee's avatar
Elliot Lee committed
6 7 8 9 10 11
 * 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
12
 * Lesser General Public License for more details.
Elliot Lee's avatar
Elliot Lee committed
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15 16 17
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
18
 */
19 20

/*
21
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22 23 24 25 26
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
 */

27 28
#include "config.h"

29
#undef	G_LOG_DOMAIN
30

Elliot Lee's avatar
Elliot Lee committed
31 32
#include <stdio.h>
#include <stdlib.h>
33
#include <string.h>
34
#include <sys/stat.h>
35
#include <math.h>
36
#include <time.h>
37
#ifdef HAVE_UNISTD_H
38
#include <unistd.h>
39 40
#endif

41
#define GTK_ENABLE_BROKEN
Owen Taylor's avatar
Owen Taylor committed
42
#include "gtk/gtk.h"
43 44
#include "gdk/gdk.h"
#include "gdk/gdkkeysyms.h"
Elliot Lee's avatar
Elliot Lee committed
45

Tor Lillqvist's avatar
Tor Lillqvist committed
46 47 48 49
#ifdef G_OS_WIN32
#define sleep(n) _sleep(n)
#endif

Owen Taylor's avatar
Owen Taylor committed
50
#include "circles.xbm"
51
#include "test.xpm"
Owen Taylor's avatar
Owen Taylor committed
52

53 54 55 56 57 58
typedef struct _OptionMenuItem
{
  gchar        *name;
  GtkSignalFunc func;
} OptionMenuItem;

59 60 61 62 63 64 65 66
gboolean
file_exists (const char *filename)
{
  struct stat statbuf;

  return stat (filename, &statbuf) == 0;
}

67 68 69 70 71 72 73 74 75 76 77 78 79
GtkWidget *
shape_create_icon (char     *xpm_file,
		   gint      x,
		   gint      y,
		   gint      px,
		   gint      py,
		   gint      window_type);

static GtkWidget *
build_option_menu (OptionMenuItem items[],
		   gint           num_items,
		   gint           history,
		   gpointer       data);
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

/* macro, structure and variables used by tree window demos */
#define DEFAULT_NUMBER_OF_ITEM  3
#define DEFAULT_RECURSION_LEVEL 3

struct {
  GSList* selection_mode_group;
  GtkWidget* single_button;
  GtkWidget* browse_button;
  GtkWidget* multiple_button;
  GtkWidget* draw_line_button;
  GtkWidget* view_line_button;
  GtkWidget* no_root_item_button;
  GtkWidget* nb_item_spinner;
  GtkWidget* recursion_spinner;
} sTreeSampleSelection;

typedef struct sTreeButtons {
  guint nb_item_add;
  GtkWidget* add_button;
  GtkWidget* remove_button;
101
  GtkWidget* subtree_button;
102 103 104
} sTreeButtons;
/* end of tree section */

105 106 107 108 109 110 111 112 113
static GtkWidget *
build_option_menu (OptionMenuItem items[],
		   gint           num_items,
		   gint           history,
		   gpointer       data)
{
  GtkWidget *omenu;
  GtkWidget *menu;
  GtkWidget *menu_item;
114
  GSList *group;
115 116 117 118 119
  gint i;

  omenu = gtk_option_menu_new ();
      
  menu = gtk_menu_new ();
120
  group = NULL;
121 122 123
  
  for (i = 0; i < num_items; i++)
    {
124
      menu_item = gtk_radio_menu_item_new_with_label (group, items[i].name);
125 126
      gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
			  (GtkSignalFunc) items[i].func, data);
127
      group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item));
128
      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
129 130
      if (i == history)
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
131 132 133 134 135 136 137 138 139
      gtk_widget_show (menu_item);
    }

  gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu);
  gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), history);
  
  return omenu;
}

140
static void
141 142 143 144 145 146 147
destroy_tooltips (GtkWidget *widget, GtkWindow **window)
{
  GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
  gtk_object_unref (GTK_OBJECT (tt));
  *window = NULL;
}

148 149 150 151
/*
 * GtkButton
 */

152
static void
Elliot Lee's avatar
Elliot Lee committed
153 154 155 156 157 158 159 160 161
button_window (GtkWidget *widget,
	       GtkWidget *button)
{
  if (!GTK_WIDGET_VISIBLE (button))
    gtk_widget_show (button);
  else
    gtk_widget_hide (button);
}

162
static void
163
create_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
164 165 166 167 168 169 170 171 172 173 174 175 176
{
  static GtkWidget *window = NULL;
  GtkWidget *box1;
  GtkWidget *box2;
  GtkWidget *table;
  GtkWidget *button[10];
  GtkWidget *separator;

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

      gtk_signal_connect (GTK_OBJECT (window), "destroy",
177
			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
178 179
			  &window);

180
      gtk_window_set_title (GTK_WINDOW (window), "GtkButton");
181
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
182 183 184 185 186 187 188

      box1 = gtk_vbox_new (FALSE, 0);
      gtk_container_add (GTK_CONTAINER (window), box1);

      table = gtk_table_new (3, 3, FALSE);
      gtk_table_set_row_spacings (GTK_TABLE (table), 5);
      gtk_table_set_col_spacings (GTK_TABLE (table), 5);
189
      gtk_container_set_border_width (GTK_CONTAINER (table), 10);
Elliot Lee's avatar
Elliot Lee committed
190 191 192
      gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);

      button[0] = gtk_button_new_with_label ("button1");
193
      button[1] = gtk_button_new_with_mnemonic ("_button2");
194
      button[2] = gtk_button_new_with_mnemonic ("_button3");
195
      button[3] = gtk_button_new_from_stock (GTK_STOCK_OK);
Elliot Lee's avatar
Elliot Lee committed
196 197 198
      button[4] = gtk_button_new_with_label ("button5");
      button[5] = gtk_button_new_with_label ("button6");
      button[6] = gtk_button_new_with_label ("button7");
199
      button[7] = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
Elliot Lee's avatar
Elliot Lee committed
200
      button[8] = gtk_button_new_with_label ("button9");
201
      
Elliot Lee's avatar
Elliot Lee committed
202
      gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
203
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
204 205 206 207 208 209
			  button[1]);

      gtk_table_attach (GTK_TABLE (table), button[0], 0, 1, 0, 1,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[1]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
210
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
211 212 213 214 215 216
			  button[2]);

      gtk_table_attach (GTK_TABLE (table), button[1], 1, 2, 1, 2,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[2]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
217
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
218 219 220 221 222
			  button[3]);
      gtk_table_attach (GTK_TABLE (table), button[2], 2, 3, 2, 3,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[3]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
223
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
224 225 226 227 228
			  button[4]);
      gtk_table_attach (GTK_TABLE (table), button[3], 0, 1, 2, 3,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[4]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
229
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
230 231 232 233 234
			  button[5]);
      gtk_table_attach (GTK_TABLE (table), button[4], 2, 3, 0, 1,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[5]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
235
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
236 237 238 239 240
			  button[6]);
      gtk_table_attach (GTK_TABLE (table), button[5], 1, 2, 2, 3,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[6]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
241
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
242 243 244 245 246
			  button[7]);
      gtk_table_attach (GTK_TABLE (table), button[6], 1, 2, 0, 1,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[7]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
247
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
248 249 250 251 252
			  button[8]);
      gtk_table_attach (GTK_TABLE (table), button[7], 2, 3, 1, 2,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      gtk_signal_connect (GTK_OBJECT (button[8]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
253
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
254 255 256 257 258 259 260 261
			  button[0]);
      gtk_table_attach (GTK_TABLE (table), button[8], 0, 1, 1, 2,
			GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);

      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
262
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
263 264 265 266
      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);

      button[9] = gtk_button_new_with_label ("close");
      gtk_signal_connect_object (GTK_OBJECT (button[9]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
267
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
268 269 270 271 272 273 274
				 GTK_OBJECT (window));
      gtk_box_pack_start (GTK_BOX (box2), button[9], TRUE, TRUE, 0);
      GTK_WIDGET_SET_FLAGS (button[9], GTK_CAN_DEFAULT);
      gtk_widget_grab_default (button[9]);
    }

  if (!GTK_WIDGET_VISIBLE (window))
275
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
276
  else
277
    gtk_widget_hide (window);
Elliot Lee's avatar
Elliot Lee committed
278 279
}

280 281 282 283
/*
 * GtkToggleButton
 */

284
static void
285
create_toggle_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
286 287 288 289 290 291 292 293 294 295 296 297
{
  static GtkWidget *window = NULL;
  GtkWidget *box1;
  GtkWidget *box2;
  GtkWidget *button;
  GtkWidget *separator;

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

      gtk_signal_connect (GTK_OBJECT (window), "destroy",
298
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
299 300
			  &window);

301
      gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
302
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
303 304 305 306 307

      box1 = gtk_vbox_new (FALSE, 0);
      gtk_container_add (GTK_CONTAINER (window), box1);

      box2 = gtk_vbox_new (FALSE, 10);
308
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
309 310 311 312 313 314 315 316 317 318 319
      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);

      button = gtk_toggle_button_new_with_label ("button1");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_toggle_button_new_with_label ("button2");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_toggle_button_new_with_label ("button3");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

320 321 322 323
      button = gtk_toggle_button_new_with_label ("inconsistent");
      gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
      
Elliot Lee's avatar
Elliot Lee committed
324 325 326 327
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
328
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
329 330 331 332
      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);

      button = gtk_button_new_with_label ("close");
      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
Elliot Lee's avatar
Elliot Lee committed
333
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
334 335 336 337 338 339 340
				 GTK_OBJECT (window));
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
      gtk_widget_grab_default (button);
    }

  if (!GTK_WIDGET_VISIBLE (window))
341
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
342 343 344 345
  else
    gtk_widget_destroy (window);
}

346 347 348 349
/*
 * GtkCheckButton
 */

350
static void
351
create_check_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
352 353 354 355 356 357 358 359 360 361 362 363
{
  static GtkWidget *window = NULL;
  GtkWidget *box1;
  GtkWidget *box2;
  GtkWidget *button;
  GtkWidget *separator;

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

      gtk_signal_connect (GTK_OBJECT (window), "destroy",
364
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
365 366
			  &window);

367
      gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
368
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
369 370 371 372 373

      box1 = gtk_vbox_new (FALSE, 0);
      gtk_container_add (GTK_CONTAINER (window), box1);

      box2 = gtk_vbox_new (FALSE, 10);
374
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
375 376
      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);

377
      button = gtk_check_button_new_with_mnemonic ("_button1");
Elliot Lee's avatar
Elliot Lee committed
378 379 380 381 382 383 384 385
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_check_button_new_with_label ("button2");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_check_button_new_with_label ("button3");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

386 387 388 389
      button = gtk_check_button_new_with_label ("inconsistent");
      gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
      
Elliot Lee's avatar
Elliot Lee committed
390 391 392 393
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
394
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
395 396 397 398
      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);

      button = gtk_button_new_with_label ("close");
      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
Elliot Lee's avatar
Elliot Lee committed
399
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
400 401 402 403 404 405 406
				 GTK_OBJECT (window));
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
      gtk_widget_grab_default (button);
    }

  if (!GTK_WIDGET_VISIBLE (window))
407
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
408 409 410 411
  else
    gtk_widget_destroy (window);
}

412 413 414 415
/*
 * GtkRadioButton
 */

416
static void
417
create_radio_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
418 419 420 421 422 423 424 425 426 427 428 429
{
  static GtkWidget *window = NULL;
  GtkWidget *box1;
  GtkWidget *box2;
  GtkWidget *button;
  GtkWidget *separator;

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

      gtk_signal_connect (GTK_OBJECT (window), "destroy",
430
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
431 432 433
			  &window);

      gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
434
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
435 436 437 438 439

      box1 = gtk_vbox_new (FALSE, 0);
      gtk_container_add (GTK_CONTAINER (window), box1);

      box2 = gtk_vbox_new (FALSE, 10);
440
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
441 442 443 444 445 446
      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);

      button = gtk_radio_button_new_with_label (NULL, "button1");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_radio_button_new_with_label (
447
	         gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
Elliot Lee's avatar
Elliot Lee committed
448
		 "button2");
449
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
Elliot Lee's avatar
Elliot Lee committed
450 451 452
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_radio_button_new_with_label (
453
                 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
Elliot Lee's avatar
Elliot Lee committed
454 455 456
		 "button3");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

457
      button = gtk_radio_button_new_with_label (
458
                 gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)),
459 460 461 462
		 "inconsistent");
      gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button), TRUE);
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
      
Elliot Lee's avatar
Elliot Lee committed
463 464 465 466
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
467
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
468 469 470 471
      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);

      button = gtk_button_new_with_label ("close");
      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
Elliot Lee's avatar
Elliot Lee committed
472
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
473 474 475 476 477 478 479
				 GTK_OBJECT (window));
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
      gtk_widget_grab_default (button);
    }

  if (!GTK_WIDGET_VISIBLE (window))
480
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
481 482 483 484
  else
    gtk_widget_destroy (window);
}

485 486 487
/*
 * GtkButtonBox
 */
Elliot Lee's avatar
Elliot Lee committed
488

489 490 491 492 493 494 495
static GtkWidget *
create_bbox (gint  horizontal,
	     char* title, 
	     gint  spacing,
	     gint  child_w, 
	     gint  child_h, 
	     gint  layout)
Elliot Lee's avatar
Elliot Lee committed
496
{
497 498 499
  GtkWidget *frame;
  GtkWidget *bbox;
  GtkWidget *button;
Elliot Lee's avatar
Elliot Lee committed
500
	
501
  frame = gtk_frame_new (title);
Elliot Lee's avatar
Elliot Lee committed
502 503

  if (horizontal)
504
    bbox = gtk_hbutton_box_new ();
Elliot Lee's avatar
Elliot Lee committed
505
  else
506 507
    bbox = gtk_vbutton_box_new ();

508
  gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
509 510
  gtk_container_add (GTK_CONTAINER (frame), bbox);

Elliot Lee's avatar
Elliot Lee committed
511
  gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
512
  gtk_box_set_spacing (GTK_BOX (bbox), spacing);
Elliot Lee's avatar
Elliot Lee committed
513 514 515
  gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
  
  button = gtk_button_new_with_label ("OK");
516
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
517 518
  
  button = gtk_button_new_with_label ("Cancel");
519
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
520 521
  
  button = gtk_button_new_with_label ("Help");
522
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
523

524
  return frame;
Elliot Lee's avatar
Elliot Lee committed
525 526
}

527
static void
528
create_button_box (void)
Elliot Lee's avatar
Elliot Lee committed
529 530
{
  static GtkWidget* window = NULL;
531 532 533 534 535
  GtkWidget *main_vbox;
  GtkWidget *vbox;
  GtkWidget *hbox;
  GtkWidget *frame_horz;
  GtkWidget *frame_vert;
Elliot Lee's avatar
Elliot Lee committed
536 537 538 539
	
  if (!window)
  {
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
540
    gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
Elliot Lee's avatar
Elliot Lee committed
541 542
    
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
543 544
			GTK_SIGNAL_FUNC(gtk_widget_destroyed),
			&window);
Elliot Lee's avatar
Elliot Lee committed
545
    
546
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
547 548 549

    main_vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), main_vbox);
Elliot Lee's avatar
Elliot Lee committed
550
    
551 552
    frame_horz = gtk_frame_new ("Horizontal Button Boxes");
    gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
Elliot Lee's avatar
Elliot Lee committed
553
    
554
    vbox = gtk_vbox_new (FALSE, 0);
555
    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
    gtk_container_add (GTK_CONTAINER (frame_horz), vbox);

    gtk_box_pack_start (GTK_BOX (vbox), 
	   create_bbox (TRUE, "Spread", 40, 85, 20, GTK_BUTTONBOX_SPREAD),
			TRUE, TRUE, 0);

    gtk_box_pack_start (GTK_BOX (vbox), 
	   create_bbox (TRUE, "Edge", 40, 85, 20, GTK_BUTTONBOX_EDGE),
			TRUE, TRUE, 5);

    gtk_box_pack_start (GTK_BOX (vbox), 
	   create_bbox (TRUE, "Start", 40, 85, 20, GTK_BUTTONBOX_START),
			TRUE, TRUE, 5);

    gtk_box_pack_start (GTK_BOX (vbox), 
	   create_bbox (TRUE, "End", 40, 85, 20, GTK_BUTTONBOX_END),
			TRUE, TRUE, 5);

    frame_vert = gtk_frame_new ("Vertical Button Boxes");
    gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
Elliot Lee's avatar
Elliot Lee committed
576
    
577
    hbox = gtk_hbox_new (FALSE, 0);
578
    gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595
    gtk_container_add (GTK_CONTAINER (frame_vert), hbox);

    gtk_box_pack_start (GTK_BOX (hbox), 
	   create_bbox (FALSE, "Spread", 30, 85, 20, GTK_BUTTONBOX_SPREAD),
			TRUE, TRUE, 0);

    gtk_box_pack_start (GTK_BOX (hbox), 
	   create_bbox (FALSE, "Edge", 30, 85, 20, GTK_BUTTONBOX_EDGE),
			TRUE, TRUE, 5);

    gtk_box_pack_start (GTK_BOX (hbox), 
	   create_bbox (FALSE, "Start", 30, 85, 20, GTK_BUTTONBOX_START),
			TRUE, TRUE, 5);

    gtk_box_pack_start (GTK_BOX (hbox), 
	   create_bbox (FALSE, "End", 30, 85, 20, GTK_BUTTONBOX_END),
			TRUE, TRUE, 5);
Elliot Lee's avatar
Elliot Lee committed
596 597 598
  }

  if (!GTK_WIDGET_VISIBLE (window))
599
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
600 601 602 603
  else
    gtk_widget_destroy (window);
}

604 605 606 607
/*
 * GtkToolBar
 */

608
static GtkWidget*
609 610 611
new_pixmap (char      *filename,
	    GdkWindow *window,
	    GdkColor  *background)
612 613 614 615 616
{
  GtkWidget *wpixmap;
  GdkPixmap *pixmap;
  GdkBitmap *mask;

617 618 619 620 621 622 623 624 625 626 627 628
  if (strcmp (filename, "test.xpm") == 0 ||
      !file_exists (filename))
    {
      pixmap = gdk_pixmap_create_from_xpm_d (window, &mask,
					     background,
					     openfile);
    }
  else
    pixmap = gdk_pixmap_create_from_xpm (window, &mask,
					 background,
					 filename);
  
629 630 631 632 633
  wpixmap = gtk_pixmap_new (pixmap, mask);

  return wpixmap;
}

634 635 636 637 638 639 640 641 642 643 644 645 646 647 648

static void
set_toolbar_small_stock (GtkWidget *widget,
			 gpointer   data)
{
  gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_SMALL_TOOLBAR);
}

static void
set_toolbar_large_stock (GtkWidget *widget,
			 gpointer   data)
{
  gtk_toolbar_set_icon_size (GTK_TOOLBAR (data), GTK_ICON_SIZE_LARGE_TOOLBAR);
}

649
static void
650 651 652 653 654 655
set_toolbar_horizontal (GtkWidget *widget,
			gpointer   data)
{
  gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
}

656
static void
657 658 659 660 661 662
set_toolbar_vertical (GtkWidget *widget,
		      gpointer   data)
{
  gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
}

663
static void
664 665 666 667 668 669
set_toolbar_icons (GtkWidget *widget,
		   gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
}

670
static void
671 672 673 674 675 676
set_toolbar_text (GtkWidget *widget,
	          gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
}

677
static void
678 679 680 681 682 683
set_toolbar_both (GtkWidget *widget,
		  gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
}

684 685 686 687 688 689 690
static void
set_toolbar_both_horiz (GtkWidget *widget,
			gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
}

691
static void
692 693 694 695 696 697
set_toolbar_enable (GtkWidget *widget,
		    gpointer   data)
{
  gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
}

698
static void
699 700 701 702 703 704
set_toolbar_disable (GtkWidget *widget,
		     gpointer   data)
{
  gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
}

705
static void
706 707 708 709
create_toolbar (void)
{
  static GtkWidget *window = NULL;
  GtkWidget *toolbar;
710
  GtkWidget *entry;
711 712 713 714 715

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
716
      gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
717 718

      gtk_signal_connect (GTK_OBJECT (window), "destroy",
719
			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),
720 721
			  &window);

722
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
723 724
      gtk_widget_realize (window);

725
      toolbar = gtk_toolbar_new ();
726

727 728 729 730 731 732 733 734 735 736
      gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
				GTK_STOCK_NEW,
				"Stock icon: New", "Toolbar/New",
				(GtkSignalFunc) set_toolbar_small_stock, toolbar, -1);
      
      gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
				GTK_STOCK_OPEN,
				"Stock icon: Open", "Toolbar/Open",
				(GtkSignalFunc) set_toolbar_large_stock, toolbar, -1);
      
737
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
738
			       "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
739
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
740 741
			       (GtkSignalFunc) set_toolbar_horizontal, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
742
			       "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
743
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
744 745 746 747 748
			       (GtkSignalFunc) set_toolbar_vertical, toolbar);

      gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
749
			       "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
750
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
751 752
			       (GtkSignalFunc) set_toolbar_icons, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
753
			       "Text", "Only show toolbar text", "Toolbar/TextOnly",
754
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
755 756
			       (GtkSignalFunc) set_toolbar_text, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
757
			       "Both", "Show toolbar icons and text", "Toolbar/Both",
758
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
759
			       (GtkSignalFunc) set_toolbar_both, toolbar);
760 761 762 763 764 765 766
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			       "Both (horizontal)",
			       "Show toolbar icons and text in a horizontal fashion",
			       "Toolbar/BothHoriz",
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			       (GtkSignalFunc) set_toolbar_both_horiz, toolbar);
			       
767 768
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

769
      entry = gtk_entry_new ();
770

771
      gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
772 773 774

      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

775

776 777
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

778
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
779
			       "Enable", "Enable tooltips", NULL,
780
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
781
			       (GtkSignalFunc) set_toolbar_enable, toolbar);
782
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
783
			       "Disable", "Disable tooltips", NULL,
784
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
785
			       (GtkSignalFunc) set_toolbar_disable, toolbar);
786

787 788 789
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
790
			       "Frobate", "Frobate tooltip", NULL,
791
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
792
			       (GtkSignalFunc) NULL, toolbar);
793
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
794
			       "Baz", "Baz tooltip", NULL,
795
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
796
			       (GtkSignalFunc) NULL, toolbar);
797

798 799 800
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
      
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
801
			       "Blah", "Blah tooltip", NULL,
802
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
803
			       (GtkSignalFunc) NULL, toolbar);
804
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
805
			       "Bar", "Bar tooltip", NULL,
806
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
807
			       (GtkSignalFunc) NULL, toolbar);
808

809 810 811 812
      gtk_container_add (GTK_CONTAINER (window), toolbar);
    }

  if (!GTK_WIDGET_VISIBLE (window))
813
    gtk_widget_show_all (window);
814 815 816 817
  else
    gtk_widget_destroy (window);
}

818
static GtkWidget*
819 820 821 822 823 824 825
make_toolbar (GtkWidget *window)
{
  GtkWidget *toolbar;

  if (!GTK_WIDGET_REALIZED (window))
    gtk_widget_realize (window);

826
  toolbar = gtk_toolbar_new ();
827 828

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
829
			   "Horizontal", "Horizontal toolbar layout", NULL,
830
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
831 832
			   (GtkSignalFunc) set_toolbar_horizontal, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
833
			   "Vertical", "Vertical toolbar layout", NULL,
834
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
835 836 837 838 839
			   (GtkSignalFunc) set_toolbar_vertical, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
840
			   "Icons", "Only show toolbar icons", NULL,
841
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
842 843
			   (GtkSignalFunc) set_toolbar_icons, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
844
			   "Text", "Only show toolbar text", NULL,
845
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
846 847
			   (GtkSignalFunc) set_toolbar_text, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
848
			   "Both", "Show toolbar icons and text", NULL,
849
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
850 851 852 853 854
			   (GtkSignalFunc) set_toolbar_both, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
855
			   "Woot", "Woot woot woot", NULL,
856
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
857
			   (GtkSignalFunc) NULL, toolbar);
858
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
859
			   "Blah", "Blah blah blah", "Toolbar/Big",
860
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
861
			   (GtkSignalFunc) NULL, toolbar);
862 863 864 865

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
866
			   "Enable", "Enable tooltips", NULL,
867
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
868 869
			   (GtkSignalFunc) set_toolbar_enable, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
870
			   "Disable", "Disable tooltips", NULL,
871
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
872 873
			   (GtkSignalFunc) set_toolbar_disable, toolbar);

874 875 876
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
  
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
877
			   "Hoo", "Hoo tooltip", NULL,
878
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
879
			   (GtkSignalFunc) NULL, toolbar);
880
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
881
			   "Woo", "Woo tooltip", NULL,
882
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
883
			   (GtkSignalFunc) NULL, toolbar);
884

885 886 887
  return toolbar;
}

888 889 890 891
/*
 * GtkStatusBar
 */

892 893 894 895 896 897 898 899 900 901
static guint statusbar_counter = 1;

static void
statusbar_push (GtkWidget *button,
		GtkStatusbar *statusbar)
{
  gchar text[1024];

  sprintf (text, "something %d", statusbar_counter++);

902
  gtk_statusbar_push (statusbar, 1, text);
903 904 905 906 907 908
}

static void
statusbar_pop (GtkWidget *button,
	       GtkStatusbar *statusbar)
{
909
  gtk_statusbar_pop (statusbar, 1);
910 911 912 913 914 915
}

static void
statusbar_steal (GtkWidget *button,
	         GtkStatusbar *statusbar)
{
916
  gtk_statusbar_remove (statusbar, 1, 4);
917 918 919 920
}

static void
statusbar_popped (GtkStatusbar  *statusbar,
921
		  guint          context_id,
922 923 924 925 926 927
		  const gchar	*text)
{
  if (!statusbar->messages)
    statusbar_counter = 1;
}

928
static void
929
statusbar_contexts (GtkStatusbar *statusbar)
930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958
{
  gchar *string;

  string = "any context";
  g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
	   string,
	   gtk_statusbar_get_context_id (statusbar, string));
  
  string = "idle messages";
  g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
	   string,
	   gtk_statusbar_get_context_id (statusbar, string));
  
  string = "some text";
  g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
	   string,
	   gtk_statusbar_get_context_id (statusbar, string));

  string = "hit the mouse";
  g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
	   string,
	   gtk_statusbar_get_context_id (statusbar, string));

  string = "hit the mouse2";
  g_print ("GtkStatusBar: context=\"%s\", context_id=%d\n",
	   string,
	   gtk_statusbar_get_context_id (statusbar, string));
}

959
static void
960
create_statusbar (void)
961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977
{
  static GtkWidget *window = NULL;
  GtkWidget *box1;
  GtkWidget *box2;
  GtkWidget *button;
  GtkWidget *separator;
  GtkWidget *statusbar;

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

      gtk_signal_connect (GTK_OBJECT (window), "destroy",
			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),
			  &window);

      gtk_window_set_title (GTK_WINDOW (window), "statusbar");
978
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
979 980 981 982 983

      box1 = gtk_vbox_new (FALSE, 0);
      gtk_container_add (GTK_CONTAINER (window), box1);

      box2 = gtk_vbox_new (FALSE, 10);
984
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
985 986 987 988 989 990 991 992 993 994
      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);

      statusbar = gtk_statusbar_new ();
      gtk_box_pack_end (GTK_BOX (box1), statusbar, TRUE, TRUE, 0);
      gtk_signal_connect (GTK_OBJECT (statusbar),
			  "text_popped",
			  GTK_SIGNAL_FUNC (statusbar_popped),
			  NULL);

      button = gtk_widget_new (gtk_button_get_type (),
995 996 997
			       "label", "push something",