testgtk.c 275 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

Elliot Lee's avatar
Elliot Lee committed
41
#include "gtk.h"
42 43
#include "gdk/gdk.h"
#include "gdk/gdkkeysyms.h"
Elliot Lee's avatar
Elliot Lee committed
44

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

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

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

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

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

66 67 68 69 70 71 72 73 74 75 76 77 78
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);
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

/* 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;
100
  GtkWidget* subtree_button;
101 102 103
} sTreeButtons;
/* end of tree section */

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

  omenu = gtk_option_menu_new ();
      
  menu = gtk_menu_new ();
  
  for (i = 0; i < num_items; i++)
    {
121
      menu_item = gtk_menu_item_new_with_label (items[i].name);
122 123
      gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
			  (GtkSignalFunc) items[i].func, data);
124
      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
125 126 127 128 129 130 131 132 133
      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;
}

134
static void
135 136 137 138 139 140 141
destroy_tooltips (GtkWidget *widget, GtkWindow **window)
{
  GtkTooltips *tt = gtk_object_get_data (GTK_OBJECT (*window), "tooltips");
  gtk_object_unref (GTK_OBJECT (tt));
  *window = NULL;
}

142 143 144 145
/*
 * GtkButton
 */

146
static void
Elliot Lee's avatar
Elliot Lee committed
147 148 149 150 151 152 153 154 155
button_window (GtkWidget *widget,
	       GtkWidget *button)
{
  if (!GTK_WIDGET_VISIBLE (button))
    gtk_widget_show (button);
  else
    gtk_widget_hide (button);
}

156
static void
157
create_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
158 159 160 161 162 163 164 165 166 167
{
  static GtkWidget *window = NULL;
  GtkWidget *box1;
  GtkWidget *box2;
  GtkWidget *table;
  GtkWidget *button[10];
  GtkWidget *separator;

  if (!window)
    {
168 169
      GtkAccelGroup *accel_group;
      
Elliot Lee's avatar
Elliot Lee committed
170 171
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

172 173
      accel_group = gtk_window_get_default_accel_group (GTK_WINDOW (window));
      
Elliot Lee's avatar
Elliot Lee committed
174
      gtk_signal_connect (GTK_OBJECT (window), "destroy",
175
			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
176 177
			  &window);

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

      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);
187
      gtk_container_set_border_width (GTK_CONTAINER (table), 10);
Elliot Lee's avatar
Elliot Lee committed
188 189 190
      gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);

      button[0] = gtk_button_new_with_label ("button1");
191
      button[1] = gtk_button_new_accel ("_button2", accel_group);
Elliot Lee's avatar
Elliot Lee committed
192
      button[2] = gtk_button_new_with_label ("button3");
193
      button[3] = gtk_button_new_stock (GTK_STOCK_BUTTON_OK, NULL);
Elliot Lee's avatar
Elliot Lee committed
194 195 196
      button[4] = gtk_button_new_with_label ("button5");
      button[5] = gtk_button_new_with_label ("button6");
      button[6] = gtk_button_new_with_label ("button7");
197
      button[7] = gtk_button_new_stock (GTK_STOCK_BUTTON_CLOSE, accel_group);
Elliot Lee's avatar
Elliot Lee committed
198
      button[8] = gtk_button_new_with_label ("button9");
199
      
Elliot Lee's avatar
Elliot Lee committed
200
      gtk_signal_connect (GTK_OBJECT (button[0]), "clicked",
Elliot Lee's avatar
Elliot Lee committed
201
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
202 203 204 205 206 207
			  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
208
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
209 210 211 212 213 214
			  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
215
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
216 217 218 219 220
			  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
221
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
222 223 224 225 226
			  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
227
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
228 229 230 231 232
			  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
233
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
234 235 236 237 238
			  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
239
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
240 241 242 243 244
			  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
245
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
246 247 248 249 250
			  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
251
			  GTK_SIGNAL_FUNC(button_window),
Elliot Lee's avatar
Elliot Lee committed
252 253 254 255 256 257 258 259
			  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);
260
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
261 262 263 264
      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
265
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
266 267 268 269 270 271 272
				 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))
273
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
274
  else
275
    gtk_widget_hide (window);
Elliot Lee's avatar
Elliot Lee committed
276 277
}

278 279 280 281
/*
 * GtkToggleButton
 */

282
static void
283
create_toggle_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
284 285 286 287 288 289 290 291 292 293 294 295
{
  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",
296
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
297 298
			  &window);

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

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

      box2 = gtk_vbox_new (FALSE, 10);
306
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
      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);

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

      box2 = gtk_vbox_new (FALSE, 10);
322
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
323 324 325 326
      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
327
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
328 329 330 331 332 333 334
				 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))
335
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
336 337 338 339
  else
    gtk_widget_destroy (window);
}

340 341 342 343
/*
 * GtkCheckButton
 */

344
static void
345
create_check_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
346 347 348 349 350 351 352 353 354 355 356 357
{
  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",
358
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
359 360
			  &window);

361
      gtk_window_set_title (GTK_WINDOW (window), "GtkCheckButton");
362
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
363 364 365 366 367

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

      box2 = gtk_vbox_new (FALSE, 10);
368
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);

      button = gtk_check_button_new_with_label ("button1");
      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);

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

      box2 = gtk_vbox_new (FALSE, 10);
384
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
385 386 387 388
      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
389
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
390 391 392 393 394 395 396
				 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))
397
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
398 399 400 401
  else
    gtk_widget_destroy (window);
}

402 403 404 405
/*
 * GtkRadioButton
 */

406
static void
407
create_radio_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
408 409 410 411 412 413 414 415 416 417 418 419
{
  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",
420
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
421 422 423
			  &window);

      gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
424
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
425 426 427 428 429

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

      box2 = gtk_vbox_new (FALSE, 10);
430
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
431 432 433 434 435 436 437 438
      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 (
	         gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
		 "button2");
439
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
Elliot Lee's avatar
Elliot Lee committed
440 441 442 443 444 445 446 447 448 449 450
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

      button = gtk_radio_button_new_with_label (
                 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
		 "button3");
      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);

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

      box2 = gtk_vbox_new (FALSE, 10);
451
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
452 453 454 455
      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
456
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
457 458 459 460 461 462 463
				 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))
464
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
465 466 467 468
  else
    gtk_widget_destroy (window);
}

469 470 471
/*
 * GtkButtonBox
 */
Elliot Lee's avatar
Elliot Lee committed
472

473 474 475 476 477 478 479
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
480
{
481 482 483
  GtkWidget *frame;
  GtkWidget *bbox;
  GtkWidget *button;
Elliot Lee's avatar
Elliot Lee committed
484
	
485
  frame = gtk_frame_new (title);
Elliot Lee's avatar
Elliot Lee committed
486 487

  if (horizontal)
488
    bbox = gtk_hbutton_box_new ();
Elliot Lee's avatar
Elliot Lee committed
489
  else
490 491
    bbox = gtk_vbutton_box_new ();

492
  gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
493 494
  gtk_container_add (GTK_CONTAINER (frame), bbox);

Elliot Lee's avatar
Elliot Lee committed
495 496 497 498 499
  gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
  gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), spacing);
  gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
  
  button = gtk_button_new_with_label ("OK");
500
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
501 502
  
  button = gtk_button_new_with_label ("Cancel");
503
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
504 505
  
  button = gtk_button_new_with_label ("Help");
506
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
507

508
  return frame;
Elliot Lee's avatar
Elliot Lee committed
509 510
}

511
static void
512
create_button_box (void)
Elliot Lee's avatar
Elliot Lee committed
513 514
{
  static GtkWidget* window = NULL;
515 516 517 518 519
  GtkWidget *main_vbox;
  GtkWidget *vbox;
  GtkWidget *hbox;
  GtkWidget *frame_horz;
  GtkWidget *frame_vert;
Elliot Lee's avatar
Elliot Lee committed
520 521 522 523
	
  if (!window)
  {
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
524
    gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
Elliot Lee's avatar
Elliot Lee committed
525 526
    
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
527 528
			GTK_SIGNAL_FUNC(gtk_widget_destroyed),
			&window);
Elliot Lee's avatar
Elliot Lee committed
529
    
530
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
531 532 533

    main_vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), main_vbox);
Elliot Lee's avatar
Elliot Lee committed
534
    
535 536
    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
537
    
538
    vbox = gtk_vbox_new (FALSE, 0);
539
    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559
    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
560
    
561
    hbox = gtk_hbox_new (FALSE, 0);
562
    gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579
    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
580 581 582
  }

  if (!GTK_WIDGET_VISIBLE (window))
583
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
584 585 586 587
  else
    gtk_widget_destroy (window);
}

588 589 590 591
/*
 * GtkToolBar
 */

592
static GtkWidget*
593 594 595
new_pixmap (char      *filename,
	    GdkWindow *window,
	    GdkColor  *background)
596 597 598 599 600
{
  GtkWidget *wpixmap;
  GdkPixmap *pixmap;
  GdkBitmap *mask;

601 602 603 604 605 606 607 608 609 610 611 612
  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);
  
613 614 615 616 617
  wpixmap = gtk_pixmap_new (pixmap, mask);

  return wpixmap;
}

618
static void
619 620 621 622 623 624
set_toolbar_horizontal (GtkWidget *widget,
			gpointer   data)
{
  gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
}

625
static void
626 627 628 629 630 631
set_toolbar_vertical (GtkWidget *widget,
		      gpointer   data)
{
  gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_VERTICAL);
}

632
static void
633 634 635 636 637 638
set_toolbar_icons (GtkWidget *widget,
		   gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
}

639
static void
640 641 642 643 644 645
set_toolbar_text (GtkWidget *widget,
	          gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_TEXT);
}

646
static void
647 648 649 650 651 652
set_toolbar_both (GtkWidget *widget,
		  gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH);
}

653 654 655 656 657 658 659
static void
set_toolbar_both_horiz (GtkWidget *widget,
			gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_BOTH_HORIZ);
}

660
static void
661 662 663 664 665 666
set_toolbar_small_space (GtkWidget *widget,
			 gpointer   data)
{
  gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
}

667
static void
668 669 670 671 672 673
set_toolbar_big_space (GtkWidget *widget,
		       gpointer   data)
{
  gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
}

674
static void
675 676 677 678 679 680
set_toolbar_enable (GtkWidget *widget,
		    gpointer   data)
{
  gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), TRUE);
}

681
static void
682 683 684 685 686 687
set_toolbar_disable (GtkWidget *widget,
		     gpointer   data)
{
  gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
}

688 689 690 691 692 693 694 695 696 697 698 699 700 701
static void
set_toolbar_borders (GtkWidget *widget,
		     gpointer   data)
{
  gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NORMAL);
}

static void
set_toolbar_borderless (GtkWidget *widget,
			gpointer   data)
{
  gtk_toolbar_set_button_relief (GTK_TOOLBAR (data), GTK_RELIEF_NONE);
}

702 703 704 705 706 707 708 709 710 711 712 713 714 715
static void
set_toolbar_space_style_empty (GtkWidget *widget,
			       gpointer   data)
{
  gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_EMPTY);
}

static void
set_toolbar_space_style_line (GtkWidget *widget,
			      gpointer   data)
{
  gtk_toolbar_set_space_style (GTK_TOOLBAR (data), GTK_TOOLBAR_SPACE_LINE);
}

716
static void
717 718 719 720
create_toolbar (void)
{
  static GtkWidget *window = NULL;
  GtkWidget *toolbar;
721
  GtkWidget *entry;
722 723 724 725 726

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
727
      gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
728 729

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

733
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
734 735 736
      gtk_widget_realize (window);

      toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
737
      gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
738 739

      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
740
			       "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
741
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
742 743
			       (GtkSignalFunc) set_toolbar_horizontal, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
744
			       "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
745
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
746 747 748 749 750
			       (GtkSignalFunc) set_toolbar_vertical, toolbar);

      gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
751
			       "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
752
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
753 754
			       (GtkSignalFunc) set_toolbar_icons, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
755
			       "Text", "Only show toolbar text", "Toolbar/TextOnly",
756
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
757 758
			       (GtkSignalFunc) set_toolbar_text, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
759
			       "Both", "Show toolbar icons and text", "Toolbar/Both",
760
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
761
			       (GtkSignalFunc) set_toolbar_both, toolbar);
762 763 764 765 766 767 768
      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);
			       
769 770
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

771
      entry = gtk_entry_new ();
772

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

      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

777
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
778
			       "Small", "Use small spaces", "Toolbar/Small",
779
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
780
			       (GtkSignalFunc) set_toolbar_small_space, toolbar);
781
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
782
			       "Big", "Use big spaces", "Toolbar/Big",
783
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
784 785
			       (GtkSignalFunc) set_toolbar_big_space, toolbar);

786
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
787

788
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
789
			       "Enable", "Enable tooltips", NULL,
790
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
791
			       (GtkSignalFunc) set_toolbar_enable, toolbar);
792
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
793
			       "Disable", "Disable tooltips", NULL,
794
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
795
			       (GtkSignalFunc) set_toolbar_disable, toolbar);
796

797 798 799 800 801 802 803 804 805 806 807
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			       "Borders", "Show Borders", NULL,
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			       (GtkSignalFunc) set_toolbar_borders, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			       "Borderless", "Hide Borders", NULL,
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			       (GtkSignalFunc) set_toolbar_borderless, toolbar);

808 809 810 811 812 813 814 815 816 817 818
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
      
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			       "Empty", "Empty spaces", NULL,
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			       (GtkSignalFunc) set_toolbar_space_style_empty, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			       "Lines", "Lines in spaces", NULL,
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			       (GtkSignalFunc) set_toolbar_space_style_line, toolbar);

819 820 821 822
      gtk_container_add (GTK_CONTAINER (window), toolbar);
    }

  if (!GTK_WIDGET_VISIBLE (window))
823
    gtk_widget_show_all (window);
824 825 826 827
  else
    gtk_widget_destroy (window);
}

828
static GtkWidget*
829 830 831 832 833 834 835 836
make_toolbar (GtkWidget *window)
{
  GtkWidget *toolbar;

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

  toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
837
  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
838 839

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
840
			   "Horizontal", "Horizontal toolbar layout", NULL,
841
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
842 843
			   (GtkSignalFunc) set_toolbar_horizontal, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
844
			   "Vertical", "Vertical toolbar layout", NULL,
845
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
846 847 848 849 850
			   (GtkSignalFunc) set_toolbar_vertical, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
851
			   "Icons", "Only show toolbar icons", NULL,
852
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
853 854
			   (GtkSignalFunc) set_toolbar_icons, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
855
			   "Text", "Only show toolbar text", NULL,
856
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
857 858
			   (GtkSignalFunc) set_toolbar_text, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
859
			   "Both", "Show toolbar icons and text", NULL,
860
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
861 862 863 864 865
			   (GtkSignalFunc) set_toolbar_both, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
866
			   "Small", "Use small spaces", NULL,
867
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
868 869
			   (GtkSignalFunc) set_toolbar_small_space, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
870
			   "Big", "Use big spaces", "Toolbar/Big",
871
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
872 873 874 875 876
			   (GtkSignalFunc) set_toolbar_big_space, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
877
			   "Enable", "Enable tooltips", NULL,
878
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
879 880
			   (GtkSignalFunc) set_toolbar_enable, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
881
			   "Disable", "Disable tooltips", NULL,
882
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
883 884
			   (GtkSignalFunc) set_toolbar_disable, toolbar);

885 886 887 888 889 890 891 892 893 894 895
  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
  
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			   "Borders", "Show Borders", NULL,
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			   (GtkSignalFunc) set_toolbar_borders, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
			   "Borderless", "Hide Borders", NULL,
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
			   (GtkSignalFunc) set_toolbar_borderless, toolbar);

896 897 898
  return toolbar;
}

899 900 901 902
/*
 * GtkStatusBar
 */

903 904 905 906 907 908 909 910 911 912
static guint statusbar_counter = 1;

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

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

913
  gtk_statusbar_push (statusbar, 1, text);
914 915 916 917 918 919
}

static void
statusbar_pop (GtkWidget *button,
	       GtkStatusbar *statusbar)
{
920
  gtk_statusbar_pop (statusbar, 1);
921 922 923 924 925 926
}

static void
statusbar_steal (GtkWidget *button,
	         GtkStatusbar *statusbar)
{
927
  gtk_statusbar_remove (statusbar, 1, 4);
928 929 930 931
}

static void
statusbar_popped (GtkStatusbar  *statusbar,
932
		  guint          context_id,
933 934 935 936 937 938
		  const gchar	*text)
{
  if (!statusbar->messages)
    statusbar_counter = 1;
}

939
static void
940
statusbar_contexts (GtkStatusbar *statusbar)
941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969
{
  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));
}

970
static void
971
statusbar_dump_stack (GtkStatusbar *statusbar)
972
{
973
  GSList *list;
974 975 976 977 978 979

  for (list = statusbar->messages; list; list = list->next)
    {
      GtkStatusbarMsg *msg;

      msg = list->data;
980 981 982 983
      g_print ("context_id: %d, message_id: %d, status_text: \"%s\"\n",
               msg->context_id,
               msg->message_id,
               msg->text);
984 985 986 987
    }
}

static void
988
create_statusbar (void)
989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005
{
  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");
1006
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1007 1008 1009 1010 1011

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

      box2 = gtk_vbox_new (FALSE, 10);
1012
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
      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 (),
1023 1024 1025
			       "label", "push something",
			       "visible", TRUE,
			       "parent", box2,
1026
			       NULL);
1027 1028 1029
      g_object_set (G_OBJECT (button),
		    "signal::clicked", statusbar_push, statusbar,
		    NULL);
1030 1031

      button = gtk_widget_new (gtk_button_get_type (),
1032 1033 1034
			       "label", "pop",
			       "visible", TRUE,
			       "parent", box2,
1035
			       NULL);
1036 1037 1038
      g_object_set (G_OBJECT (button),
		    "signal_after::clicked", statusbar_pop, statusbar,
		    NULL);
1039 1040

      button = gtk_widget_new (gtk_button_get_type (),
1041 1042 1043
			       "label", "steal #4",
			       "visible", TRUE,
			       "parent", box2,