testgtk.c 307 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
Elliot Lee's avatar
Elliot Lee committed
42
#include "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 114 115 116 117 118 119 120 121
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++)
    {
122
      menu_item = gtk_menu_item_new_with_label (items[i].name);
123 124
      gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
			  (GtkSignalFunc) items[i].func, data);
125
      gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
126 127 128 129 130 131 132 133 134
      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;
}

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

143 144 145 146
/*
 * GtkButton
 */

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

157
static void
158
create_buttons (void)
Elliot Lee's avatar
Elliot Lee committed
159 160 161 162 163 164 165 166 167 168 169 170 171
{
  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",
172
			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),
Elliot Lee's avatar
Elliot Lee committed
173 174
			  &window);

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

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

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

275 276 277 278
/*
 * GtkToggleButton
 */

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

296
      gtk_window_set_title (GTK_WINDOW (window), "GtkToggleButton");
297
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
298 299 300 301 302

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

      box2 = gtk_vbox_new (FALSE, 10);
303
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
304 305 306 307 308 309 310 311 312 313 314
      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);

315 316 317 318
      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
319 320 321 322
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

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

341 342 343 344
/*
 * GtkCheckButton
 */

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

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

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

      box2 = gtk_vbox_new (FALSE, 10);
369
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
370 371
      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);

372
      button = gtk_check_button_new_with_mnemonic ("_button1");
Elliot Lee's avatar
Elliot Lee committed
373 374 375 376 377 378 379 380
      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);

381 382 383 384
      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
385 386 387 388
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

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

407 408 409 410
/*
 * GtkRadioButton
 */

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

      gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
429
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Elliot Lee's avatar
Elliot Lee committed
430 431 432 433 434

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

      box2 = gtk_vbox_new (FALSE, 10);
435
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
436 437 438 439 440 441 442 443
      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");
444
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
Elliot Lee's avatar
Elliot Lee committed
445 446 447 448 449 450 451
      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);

452 453 454 455 456 457
      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
458 459 460 461
      separator = gtk_hseparator_new ();
      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);

      box2 = gtk_vbox_new (FALSE, 10);
462
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
Elliot Lee's avatar
Elliot Lee committed
463 464 465 466
      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
467
				 GTK_SIGNAL_FUNC(gtk_widget_destroy),
Elliot Lee's avatar
Elliot Lee committed
468 469 470 471 472 473 474
				 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))
475
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
476 477 478 479
  else
    gtk_widget_destroy (window);
}

480 481 482
/*
 * GtkButtonBox
 */
Elliot Lee's avatar
Elliot Lee committed
483

484 485 486 487 488 489 490
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
491
{
492 493 494
  GtkWidget *frame;
  GtkWidget *bbox;
  GtkWidget *button;
Elliot Lee's avatar
Elliot Lee committed
495
	
496
  frame = gtk_frame_new (title);
Elliot Lee's avatar
Elliot Lee committed
497 498

  if (horizontal)
499
    bbox = gtk_hbutton_box_new ();
Elliot Lee's avatar
Elliot Lee committed
500
  else
501 502
    bbox = gtk_vbutton_box_new ();

503
  gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
504 505
  gtk_container_add (GTK_CONTAINER (frame), bbox);

Elliot Lee's avatar
Elliot Lee committed
506
  gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
507
  gtk_box_set_spacing (GTK_BOX (bbox), spacing);
Elliot Lee's avatar
Elliot Lee committed
508 509 510
  gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), child_w, child_h);
  
  button = gtk_button_new_with_label ("OK");
511
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
512 513
  
  button = gtk_button_new_with_label ("Cancel");
514
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
515 516
  
  button = gtk_button_new_with_label ("Help");
517
  gtk_container_add (GTK_CONTAINER (bbox), button);
Elliot Lee's avatar
Elliot Lee committed
518

519
  return frame;
Elliot Lee's avatar
Elliot Lee committed
520 521
}

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

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

  if (!GTK_WIDGET_VISIBLE (window))
594
    gtk_widget_show_all (window);
Elliot Lee's avatar
Elliot Lee committed
595 596 597 598
  else
    gtk_widget_destroy (window);
}

599 600 601 602
/*
 * GtkToolBar
 */

603
static GtkWidget*
604 605 606
new_pixmap (char      *filename,
	    GdkWindow *window,
	    GdkColor  *background)
607 608 609 610 611
{
  GtkWidget *wpixmap;
  GdkPixmap *pixmap;
  GdkBitmap *mask;

612 613 614 615 616 617 618 619 620 621 622 623
  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);
  
624 625 626 627 628
  wpixmap = gtk_pixmap_new (pixmap, mask);

  return wpixmap;
}

629 630 631 632 633 634 635 636 637 638 639 640 641 642 643

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

644
static void
645 646 647 648 649 650
set_toolbar_horizontal (GtkWidget *widget,
			gpointer   data)
{
  gtk_toolbar_set_orientation (GTK_TOOLBAR (data), GTK_ORIENTATION_HORIZONTAL);
}

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

658
static void
659 660 661 662 663 664
set_toolbar_icons (GtkWidget *widget,
		   gpointer   data)
{
  gtk_toolbar_set_style (GTK_TOOLBAR (data), GTK_TOOLBAR_ICONS);
}

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

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

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

686
static void
687 688 689 690 691 692
set_toolbar_small_space (GtkWidget *widget,
			 gpointer   data)
{
  gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 5);
}

693
static void
694 695 696 697 698 699
set_toolbar_big_space (GtkWidget *widget,
		       gpointer   data)
{
  gtk_toolbar_set_space_size (GTK_TOOLBAR (data), 10);
}

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

707
static void
708 709 710 711 712 713
set_toolbar_disable (GtkWidget *widget,
		     gpointer   data)
{
  gtk_toolbar_set_tooltips (GTK_TOOLBAR (data), FALSE);
}

714 715 716 717 718 719 720 721 722 723 724 725 726 727
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);
}

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

742
static void
743 744 745 746
create_toolbar (void)
{
  static GtkWidget *window = NULL;
  GtkWidget *toolbar;
747
  GtkWidget *entry;
748 749 750 751 752

  if (!window)
    {
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
753
      gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, TRUE);
754 755

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

759
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
760 761 762
      gtk_widget_realize (window);

      toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
763
      gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
764

765 766 767 768 769 770 771 772 773 774
      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);
      
775
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
776
			       "Horizontal", "Horizontal toolbar layout", "Toolbar/Horizontal",
777
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
778 779
			       (GtkSignalFunc) set_toolbar_horizontal, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
780
			       "Vertical", "Vertical toolbar layout", "Toolbar/Vertical",
781
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
782 783 784 785 786
			       (GtkSignalFunc) set_toolbar_vertical, toolbar);

      gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
787
			       "Icons", "Only show toolbar icons", "Toolbar/IconsOnly",
788
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
789 790
			       (GtkSignalFunc) set_toolbar_icons, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
791
			       "Text", "Only show toolbar text", "Toolbar/TextOnly",
792
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
793 794
			       (GtkSignalFunc) set_toolbar_text, toolbar);
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
795
			       "Both", "Show toolbar icons and text", "Toolbar/Both",
796
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
797
			       (GtkSignalFunc) set_toolbar_both, toolbar);
798 799 800 801 802 803 804
      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);
			       
805 806
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

807
      entry = gtk_entry_new ();
808

809
      gtk_toolbar_append_widget (GTK_TOOLBAR (toolbar), entry, "This is an unusable GtkEntry ;)", "Hey don't click me!!!");
810 811 812

      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

813
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
814
			       "Small", "Use small spaces", "Toolbar/Small",
815
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
816
			       (GtkSignalFunc) set_toolbar_small_space, toolbar);
817
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
818
			       "Big", "Use big spaces", "Toolbar/Big",
819
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
820 821
			       (GtkSignalFunc) set_toolbar_big_space, toolbar);

822
      gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
823

824
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
825
			       "Enable", "Enable tooltips", NULL,
826
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
827
			       (GtkSignalFunc) set_toolbar_enable, toolbar);
828
      gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
829
			       "Disable", "Disable tooltips", NULL,
830
			       new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
831
			       (GtkSignalFunc) set_toolbar_disable, toolbar);
832

833 834 835 836 837 838 839 840 841 842 843
      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);

844 845 846 847 848 849 850 851 852 853 854
      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);

855 856 857 858
      gtk_container_add (GTK_CONTAINER (window), toolbar);
    }

  if (!GTK_WIDGET_VISIBLE (window))
859
    gtk_widget_show_all (window);
860 861 862 863
  else
    gtk_widget_destroy (window);
}

864
static GtkWidget*
865 866 867 868 869 870 871 872
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);
873
  gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NONE);
874 875

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
876
			   "Horizontal", "Horizontal toolbar layout", NULL,
877
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
878 879
			   (GtkSignalFunc) set_toolbar_horizontal, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
880
			   "Vertical", "Vertical toolbar layout", NULL,
881
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
882 883 884 885 886
			   (GtkSignalFunc) set_toolbar_vertical, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR(toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
887
			   "Icons", "Only show toolbar icons", NULL,
888
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
889 890
			   (GtkSignalFunc) set_toolbar_icons, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
891
			   "Text", "Only show toolbar text", NULL,
892
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
893 894
			   (GtkSignalFunc) set_toolbar_text, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
895
			   "Both", "Show toolbar icons and text", NULL,
896
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
897 898 899 900 901
			   (GtkSignalFunc) set_toolbar_both, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
902
			   "Small", "Use small spaces", NULL,
903
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
904 905
			   (GtkSignalFunc) set_toolbar_small_space, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
906
			   "Big", "Use big spaces", "Toolbar/Big",
907
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
908 909 910 911 912
			   (GtkSignalFunc) set_toolbar_big_space, toolbar);

  gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));

  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
913
			   "Enable", "Enable tooltips", NULL,
914
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
915 916
			   (GtkSignalFunc) set_toolbar_enable, toolbar);
  gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
917
			   "Disable", "Disable tooltips", NULL,
918
			   new_pixmap ("test.xpm", window->window, &window->style->bg[GTK_STATE_NORMAL]),
919 920
			   (GtkSignalFunc) set_toolbar_disable, toolbar);

921 922 923 924 925 926 927 928 929 930 931
  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);

932 933 934
  return toolbar;
}

935 936 937 938
/*
 * GtkStatusBar
 */

939 940 941 942 943 944 945 946 947 948
static guint statusbar_counter = 1;

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

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

949
  gtk_statusbar_push (statusbar, 1, text);
950 951 952 953 954 955
}

static void
statusbar_pop (GtkWidget *button,
	       GtkStatusbar *statusbar)
{
956
  gtk_statusbar_pop (statusbar, 1);
957 958 959 960 961 962
}

static void
statusbar_steal (GtkWidget *button,
	         GtkStatusbar *statusbar)
{
963
  gtk_statusbar_remove (statusbar, 1, 4);
964 965 966 967
}

static void
statusbar_popped (GtkStatusbar  *statusbar,
968
		  guint          context_id,
969 970 971 972 973 974
		  const gchar	*text)
{
  if (!statusbar->messages)
    statusbar_counter = 1;
}

975
static void
976
statusbar_contexts (GtkStatusbar *statusbar)
977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005
{
  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));
}

1006
static void
1007
create_statusbar (void)
1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
{
  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");
1025
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
1026 1027 1028 1029 1030

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

      box2 = gtk_vbox_new (FALSE, 10);
1031
      gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041
      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 (),
1042 1043 1044
			       "label", "push something",
			       "visible", TRUE,
			       "parent", box2,
1045
			       NULL);
Tim Janik's avatar
Tim Janik committed
1046 1047 1048
      g_object_connect (G_OBJECT (button),
			"signal::clicked", statusbar_push, statusbar,
			NULL);
1049