Newsgroup: it.comp.lang.perl
Titolo: [Perl-GTK] cHiusura delle finestre

Qual e` il metodo giusto per ciudere una finestra che non sia quella
principale dell'applicativo? Ad esempio, se la finestra principale
richiama una finestra secondaria, come posso chiuderla in maniera
corretta? Lo chiedo perche` utilizzando Gtk->exit() mi butta fuori
dal programma, mentre distruggendo tutti gli oggetti (tramite la
funzione destroy) della finestra mi va in errore nel momento in cui
provo a riaprirla
Henryx
-- 
Valentina: "Mi piace inventare gli spettacoli che voglio... quelli
che non riesco a vedere, cerco di sognarli..."
                                          Guido Crepax (1933-2003)

 provo a riaprirla
$window->hide()
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://digilander.libero.it/ebassi/
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 principale dell'applicativo? 
Consiglio di scaricare il tutorial gtk-perl. Imho è molto utile.
(Basta cercare "gtk-perl tutorial" su google).
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

 (Basta cercare "gtk-perl tutorial" su google).
Uso questo:
http://personal.riverusers.com/~swilhelm/gtkperl-tutorial/
Il problema pero` e` questo: se richiamo la prima volta la sub che si
occupa di creare la finestra tutto bene; una volta che esco da questa
(distruggendo gli oggetti o utilizzando $window->hide), se poi voglio
richiamarla, mi va miseramente in errore il programma. Spulciando tra
gli esempi non sono riuscito a proprio a capire come sia possibile la
chiusura della finestra in maniera pulita.


  miseramente in errore il programma.
Prova magari a postare un pò di codice. Cmq il tutorial è quello giusto,
casomai, se non l'hai fatto, scarica anche il tar.gz con gli esempi (37k
mi sembra).


 chiusura della finestra in maniera pulita.
I casi sono due: o crei ogni volta la finestra, e attendi che l'utente
finisca di utilizzare per poi distruggerla tramiter destroy(), oppure
la nascondi solamente. Ovviamente, in quest'ultimo caso, la variabile
che punta alla finestra dovrebbe essere globale, per evitare che passi
il garbage collector del Perl e la faccia a pezzi.


 mi sembra).
Allora, il caso a cui mi riferivo e` questo:
#v+
package WindowSerie
sub AddSerie {
   sub ClickCancel {
      # effettuo i vari destroy
   }
   # creo il pulsante
   $PbCancel = new Gtk::Button("Annulla");
   $PbCancel->signal_connect(clicked => "WindowSerie::ClickCancel");
   $PbCancel->set_usize(49, 21);
   $PbCancel->show;
   #creo il resto della finestra
}
#v-
Ora, quando richiamo la finestra subordinata (in cui e` contenuto
questo codice) se clicco sul pulsante "Annulla" viene eseguito il
codice correttamente. Se successivamente pero` richiamo la stessa
finestra, il pulsante viene inbito come se non vi fosse associato
alcun evento ad esso


 alcun evento ad esso
Se $pb_button appartiene alla finestra che distruggi, e questo non
avviene, allora il mainloop delle Gtk si "avvita", e i segnali non
arrivano ai widget corretti (magari, proprio perché sono stati
garbage-collected). Nei linguaggi ad alto livello si nota, mentre in C
avresti un bel SIGSEGV.
