Gtk2-Perl Assistant kérdés

Üdvözlök mindenkit!

Egy kedves kollégám, aki Gtk2-Perl Assistant-ban fejleszt épp egy kis alkalmazást, elakadt a dologgal a vége felé, és megkért, hogy tegyem fel ezen a fórumon is a kérdést, mert állítólag itt sok okos ember fordul meg. :)

Szóval fejleszt Gtk2-Perlben. Egy Gtk2::Assistant-ot használ arra,
hogy a júzer beírja az adatokat, amivel majd dolgozni fog.
Az assistant első oldalán van egy beviteli mező, ami a feldolgozandó
mérés azonosítóját kérdezi.

Azt szeretné, hogy ha ez az azonosító mező üresen marad( vagy már
foglalt), akkor a Tovább gombra nyomáskor felugorjon egy hibaüzenet,
majd azt leokézva visszatérjen az assistant az első oldalra.

Ezt nagyjából csinálja is, egy a gond: miután a felugró hibaüzenet
leokéztatik, az assistant egy üres oldalt ad vissza! Itt nem lehet sok
mindent csinálni, csak rányomni mégegyszer a Továbbra, ekkor feljön még
egyszer a hibaüzenet, majd ezután kapja csak vissza az első oldalt.

Hogy lehetne elérni, hogy ezt az üres oldalas mókát kihagyja, és rögtön
visszaadja az első oldalt?

Hogy egyértelmű legyen, itt a kód is:

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Gtk2 -init;
use Gtk2::Ex::Dialogs;
use Glib ':constants';

#my %gui_strings = (
# id_empty_error_title => "Hiba: üres azonosító",
# id_empty_error_text => "Nem adott meg azonosítót! Minden mérésnek rendelkeznie kell egy egyedi azonosítóval.",
# assistant1_title => "Azonosító megadása",
# assistant2_title => "Befejezés",
# assistant2_label => "Jól van!",
#);

my %gui_strings = (
id_empty_error_title => "Error: empty id",
id_empty_error_text => "You did not give a valid identifier.",
assistant1_title => "Id",
assistant2_title => "Confirm",
assistant2_label => "Well done!",
);

my $id;

my $assistant = Gtk2::Assistant->new;
Gtk2::Ex::Dialogs->set_parent_window( $assistant );
$assistant->signal_connect (delete_event => sub { Gtk2->main_quit; });

my $page = Gtk2::Entry->new();
$assistant->append_page ($page);
$assistant->set_page_title ($page, $gui_strings{assistant1_title});
$assistant->set_page_complete ($page, TRUE);
$assistant->set_page_type ($page, 'intro');
$page->show_all;

my $page2 = Gtk2::Label->new($gui_strings{assistant2_label});
$page2->show;
$assistant->append_page ($page2);
$assistant->set_page_title ($page2, $gui_strings{assistant2_title});
$assistant->set_page_complete ($page2, TRUE);
$assistant->set_page_type ($page2, 'confirm');

$assistant->signal_connect (cancel => \&cancel_callback);
$assistant->signal_connect (close => \&cancel_callback);
$assistant->signal_connect (apply => sub {
# do whatever we have to do with the id, here we just print it
print $id."\n";
});
$assistant->signal_connect (prepare => sub {
my $page_num = $assistant->get_current_page();
$id = $page->get_text();
if ($page_num == 1 and $id eq "") {
new_and_run Gtk2::Ex::Dialogs::ErrorMsg ( title => $gui_strings{id_empty_error_title},
text => $gui_strings{id_empty_error_text} );
$assistant->set_current_page(0);
return;
}
});

$assistant->show_all;
Gtk2->main;

sub cancel_callback {
my $widget = shift;

$widget->destroy;
Gtk2->main_quit;
}

Ha tudtok segíteni, nevében is nagyon köszönöm!