Hi, someone in the Chatterbox asked if I knew how to change the text in a gtk2 stock icon button. It wasn't as straight forward as I thought, as setting the label caused the icon to be lost. Muppet( perl/gtk2 maillist guru) showed me this neat sub to do it. If you are into Gtk2, this may come in handy.
#!/usr/bin/perl
use warnings;
use strict;
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
# create a new window
my $window = Gtk2::Window->new('toplevel');
$window ->signal_connect( "destroy" => sub { Gtk2->main_quit; } );
my $vbox = Gtk2::VBox->new( FALSE, 0 );
$window->add($vbox);
$vbox->set_border_width(2);
my $button = Gtk2::Button->new_from_stock('gtk-close');
my $button1 = Gtk2::Button->new_from_stock('gtk-close');
my $button2 = Gtk2::Button->new_from_stock('gtk-close');
$button->set_label('uh oh lost icon'); #won't work
# sub by muppet
find_and_set_label_in ($button2->child, "This worked");
$button->signal_connect( "clicked" => \&callback, "cool button" );
$button1->signal_connect( "clicked" => \&callback, "cool button1" );
$button2->signal_connect( "clicked" => \&callback, "cool button2" );
$vbox->pack_start( $button, FALSE, FALSE, 0 );
$vbox->pack_start( $button1, FALSE, FALSE, 0 );
$vbox->pack_start( $button2, FALSE, FALSE, 0 );
$window->show_all();
Gtk2->main;
##################################################
# our usual callback function
sub callback {
my $widget = shift;
my $data = shift;
printf "Hello again - %s was pressed\n", $data;
}
##################################################
sub find_and_set_label_in {
# recursive muppet magic
my ($widget, $text) = @_;
print "@_\n";
if ($widget->isa (Gtk2::Container::)) {
$widget->foreach (sub { find_and_set_label_in ($_[0], $text); }
+);
} elsif ($widget->isa (Gtk2::Label::)) {
$widget->set_text ($text);
}
}