The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use Gtk2::Notify -init, 'Replace Widgets';

my $win = Gtk2::Window->new;
$win->show;
$win->signal_connect(destroy => sub { Gtk2->main_quit });

my $button = Gtk2::Button->new('Click here to change notification');
$button->show;
$win->add($button);

my $n = Gtk2::Notify->new(
        'Widget Attachment Test',
        'Button has not been clicked yet',
        '',
        $button,
);

$n->set_category('presence.online');
$n->set_timeout(0);

$button->signal_connect(clicked => \&clicked_cb, $n);
my $exposed_signal_id = $button->signal_connect(expose_event => \&exposed_cb, $n);

Gtk2->main;

sub exposed_cb {
    my ($button, $event, $n) = @_;

    $button->signal_handler_disconnect($exposed_signal_id);
    $n->show;
}

my $count = 0;
sub clicked_cb {
    my ($button, $n) = @_;

    $count++;
    $n->update(
            'Widget Attachment Test',
            "You clicked the button $count times"
    );

    $n->show;
}