Présentation.
Le contrôle GtkToggleToolButton permet de gérer un élément de barre d'outils de type bouton poussoir qui ne peut prendre que deux états : enfoncé ou relâché.
C'est une nouveauté de la version 2.6 de Gtk+.
Utilisation de base.
Création.
Pour créer un bouton poussoir pour une barre d'outils, Gtk+ permet l'utilisation de deux fonctions différentes :
 function gtk_toggle_tool_button_new : PGtkToolItem;
 function gtk_toggle_tool_button_new_from_stock(stock_id : Pgchar) : PGtkToolItem;
La première fonction permet de créer un bouton poussoir. Il sera d'apparence « blanche ». Il faut utiliser les fonctions de son ancêtre codice_1 pour y ajouter un label et/ou une image.
La deuxième fonction permet également de créer un bouton poussoir en utilisant les codice_2 qui est une structure contenant les informations sur le label et l'image à afficher. Gtk+ comporte déjà beaucoup de codice_2 prédéfinis (en tout cas les plus courant). Le paramètre codice_4 est donc l'identifiant du codice_2 à utiliser.
NB : Contrairement aux fonctions usuelles de Gtk+ de création de contrôles, ces fonctions ne renvoient pas un codice_6 mais un codice_7.
État du bouton.
Il peut être intéressant de connaître l'état du bouton pour agir en conséquence. Une fois encore, rien de plus simple on utilise la fonction :
 function gtk_toggle_tool_button_get_active(button : PGtkToggleButton) : gboolean;
Cette dernière nous renvoie TRUE si le bouton est enfoncé et FALSE sinon. Afin de pouvoir utiliser le paramètre codice_8 qui est le bouton dont on veut connaître l'état, il faut utiliser la fonction GTK_TOGGLE_BUTTON.
Pour modifier l'état du bouton, c'est aussi simple :
 procedure gtk_toggle_tool_button_set_active(button : PGtkToggleButton; is_active : gboolean);
Il suffit de mettre le paramètre is_active à TRUE si l'on veut enfoncer le bouton ou à FALSE pour le relâcher.
Quand l'état du bouton change, par l'action de l'utilisateur ou du programme, un signal « codice_9 » est émis.
Programme exemple.
Nous allons créer dans une fenêtre une barre d'outils avec deux boutons poussoir, créés chacun avec les deux fonctions disponibles.
Voilà le fichier codice_10 :
 program gtk045;
 uses glib2, gtk2;
 procedure gtk_toolbar_insert(toolbar : PGtkToolbar; item : PGtkToolItem; pos : gint); cdecl;
 external gtklib name 'gtk_toolbar_insert';
 var
 pFenetre : PGtkWidget;
 pVBox : PGtkWidget;
 pBarreOutils : PGtkWidget;
 pBoutonPoussoir1 : PGtkToolItem;
 pBoutonPoussoir2 : PGtkToolItem;
 pLabel : PGtkWidget;
 begin
 gtk_init(@argc, @argv);
 pFenetre := gtk_window_new(GTK_WINDOW_TOPLEVEL);
 gtk_window_set_position(GTK_WINDOW(pFenetre), GTK_WIN_POS_CENTER);
 gtk_window_set_default_size(GTK_WINDOW(pFenetre), 320, 200);
 gtk_window_set_title(GTK_WINDOW(pFenetre), 'Gtk045 : Barre d"outils');
 gtk_signal_connect(pGTKOBJECT(pFenetre), 'destroy', G_CALLBACK(@gtk_main_quit), NULL);
 // Création de la GtkVBox
 pVBox := gtk_vbox_new(FALSE, 5);
 gtk_container_add(GTK_CONTAINER(pFenetre), pVBox);
 // Création de la barre d'outils
 pBarreOutils := gtk_toolbar_new;
 gtk_box_pack_start(GTK_BOX(pVBox), pBarreOutils, FALSE, FALSE, 0);
 // Création des boutons poussoir
 pBoutonPoussoir1 := gtk_toggle_tool_button_new_from_stock(GTK_STOCK_OPEN);
 gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBoutonPoussoir1, -1);
 pBoutonPoussoir2 := gtk_toggle_tool_button_new;
 gtk_toolbar_insert(GTK_TOOLBAR(pBarreOutils), pBoutonPoussoir2, -1);
 gtk_tool_button_set_label(GTK_TOOL_BUTTON(pBoutonPoussoir2), 'Btn 2');
 // Création du label
 pLabel := gtk_label_new('Label');
 gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
 gtk_widget_show_all(pFenetre);
 gtk_main;
 end.
Voilà ce que donne l'exécution du programme codice_11 juste après le lancement :
Puis après avoir cliqué sur les deux boutons :

Programmation GTK2 en Pascal/GtkRadioToolButton