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

50 51
#include "prop-editor.h"

Owen Taylor's avatar
Owen Taylor committed
52
#include "circles.xbm"
53
#include "test.xpm"
Owen Taylor's avatar
Owen Taylor committed
54

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

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

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

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

/* 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;
103
  GtkWidget* subtree_button;
104 105 106
} sTreeButtons;
/* end of tree section */

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

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

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

150 151 152 153
/*
 * GtkButton
 */

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

164
static void
165
create_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
166 167 168 169 170 171 172 173 174 175 176 177 178
{
  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",
179
			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
180 181
			  &window);

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

      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);
191
      gtk_container_set_border_width (GTK_CONTAINER (table), 10);
Elliot Lee's avatar
Elliot Lee committed
192 193 194
      gtk_box_pack_start (GTK_BOX (box1), table, TRUE, TRUE, 0);

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

282 283 284 285
/*
 * GtkToggleButton
 */

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

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

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

      box2 = gtk_vbox_new (FALSE, 10);
310
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
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);

322 323 324 325
      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
326 327 328 329
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
330
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
331 332 333 334
      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
335
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
336 337 338 339 340 341 342
				 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))
343
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
344 345 346 347
  else
    gtk_widget_destroy (window);
}

348 349 350 351
/*
 * GtkCheckButton
 */

352
static void
353
create_check_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
354 355 356 357 358 359 360 361 362 363 364 365
{
  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",
366
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
367 368
			  &window);

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

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

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

379
      button = gtk_check_button_new_with_mnemonic ("_button1");
Elliot Lee's avatar
Elliot Lee committed
380 381 382 383 384 385 386 387
      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);

388 389 390 391
      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
392 393 394 395
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
396
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
397 398 399 400
      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
401
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
402 403 404 405 406 407 408
				 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))
409
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
410 411 412 413
  else
    gtk_widget_destroy (window);
}

414 415 416 417
/*
 * GtkRadioButton
 */

418
static void
419
create_radio_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
420 421 422 423 424 425 426 427 428 429 430 431
{
  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",
432
			  GTK_SIGNAL_FUNC(gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
433 434 435
			  &window);

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

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

      box2 = gtk_vbox_new (FALSE, 10);
442
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
443 444 445 446 447 448 449 450
      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");
451
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
Elliot Lee's avatar
Elliot Lee committed
452 453 454 455 456 457 458
      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);

459 460 461 462 463 464
      button = gtk_radio_button_new_with_label (
                 gtk_radio_button_group (GTK_RADIO_BUTTON (button)),
		 "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
465 466 467 468
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
469
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
470 471 472 473
      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
474
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
475 476 477 478 479 480 481
				 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))
482
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
483 484 485 486
  else
    gtk_widget_destroy (window);
}

487 488 489
/*
 * GtkButtonBox
 */
Elliot Lee's avatar
Elliot Lee committed
490

491 492 493 494 495 496 497
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
498
{
499 500 501
  GtkWidget *frame;
  GtkWidget *bbox;
  GtkWidget *button;
Elliot Lee's avatar
Elliot Lee committed
502
	
503
  frame = gtk_frame_new (title);
Elliot Lee's avatar
Elliot Lee committed
504 505

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

510
  gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
511 512
  gtk_container_add (GTK_CONTAINER (frame), bbox);

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

526
  return frame;
Elliot Lee's avatar
Elliot Lee committed
527 528
}

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

    main_vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), main_vbox);
Elliot Lee's avatar
Elliot Lee committed
552
    
553 554
    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
555
    
556
    vbox = gtk_vbox_new (FALSE, 0);
557
    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577
    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
578
    
579
    hbox = gtk_hbox_new (FALSE, 0);
580
    gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597
    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
598 599 600
  }

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

606 607 608 609
/*
 * GtkToolBar
 */

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

619 620 621 622 623 624 625 626 627 628 629 630
  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);
  
631 632 633 634 635
  wpixmap = gtk_pixmap_new (pixmap, mask);

  return wpixmap;
}

636 637 638 639 640 641 642 643 644 645 646 647 648 649 650

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);
}

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

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

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

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

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

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

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

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

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

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

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

724
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
725 726 727 728
      gtk_widget_realize (window);

      toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);

729 730 731 732 733 734 735 736 737 738
      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);
      
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

778 779
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

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

789 790 791
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

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

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

811 812 813 814
      gtk_container_add (GTK_CONTAINER (window), toolbar);
    }

  if (!GTK_WIDGET_VISIBLE (window))
815
    gtk_widget_show_all (window);
816 817 818 819
  else
    gtk_widget_destroy (window);
}

820
static GtkWidget*
821 822 823 824 825 826 827 828 829 830
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);

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

  gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
842
			   "Icons", "Only show toolbar icons", NULL,
843
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
844 845
			   (GtkSignalFunc) set_toolbar_icons, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
846
			   "Text", "Only show toolbar text", NULL,
847
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
848 849
			   (GtkSignalFunc) set_toolbar_text, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
850
			   "Both", "Show toolbar icons and text", NULL,
851
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
852 853 854 855 856
			   (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
857
			   "Woot", "Woot woot woot", NULL,
858
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
859
			   (GtkSignalFunc) NULL, toolbar);
860
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
Havoc Pennington's avatar
Havoc Pennington committed
861
			   "Blah", "Blah blah blah", "Toolbar/Big",
862
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
Havoc Pennington's avatar
Havoc Pennington committed
863
			   (GtkSignalFunc) NULL, toolbar);
864 865 866 867

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

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

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

887 888 889
  return toolbar;
}

890 891 892 893
/*
 * GtkStatusBar
 */

894 895 896 897 898 899 900 901 902 903
static guint statusbar_counter = 1;

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

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

904
  gtk_statusbar_push (statusbar, 1, text);
905 906 907 908 909 910
}

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

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

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

930
static void
931
statusbar_contexts (GtkStatusbar *statusbar)
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 959 960
{
  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));
}

961
static void
962
create_statusbar (void)
963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979
{
  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");
980
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
981 982 983 984 985

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

      box2 = gtk_vbox_new (FALSE, 10);
986
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
987 988 989 990 991 992 993 994 995 996
      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 (),
997 998 999
			       "label", "push something",
			       "visible", TRUE,
			       "parent", box2,
1000
			       NULL);
Tim Janik's avatar
Tim Janik committed
1001 1002 1003
      g_object_connect (G_OBJECT (button),
			"signal::clicked", statusbar_push, statusbar,
			NULL);
1004

Tim Janik's avatar
Tim Janik committed
1005 1006 1007 1008 1009 1010 1011
      button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
						 "label", "pop",
						 "visible", TRUE,
						 "parent", box2,
						 NULL),
				 "signal_after::clicked", statusbar_pop, statusbar,
				 NULL);
1012

Tim Janik's avatar
Tim Janik committed
1013 1014 1015 1016 1017 1018 1019
      button = g_object_connect (gtk_widget_new (gtk_button_get_type (),
						 "label", "steal #4",
						 "visible", TRUE,
						 "parent", box2,
						 NULL),
				 "signal_after::clicked", statusbar_steal, statusbar,
				 NULL);
1020

Tim Janik's avatar
Tim Janik committed
1021