Mam taki drobny problem utworzyłem w glade-3 dwa pkna powiedzmy że mainwindow secondwindow pierwsze okno ma przycisk btnOpen po kliknięciu którego otwiera się drugie okno a drugie btnClose które powinno zamknąć drugie okno. Okna zdefiniowane są w dwóch plikach

mainwindow.glade
secondwindow.glade


napisałem dwie klasy

  1. <?php
  2. class mainwindow extends GladeXML{
  3.  
  4.  public function __construct($gladefile){
  5.  
  6. parent::__construct($gladefile);
  7. $this->btnOpen->connect_simple('clicked', array($this, 'onOpen'));
  8.  }
  9.  
  10.  public function __get($property){
  11.  
  12. parent::get_widget($property);
  13.  }
  14.  
  15.  public function onOpen(){
  16.  
  17. new secondwindow('secondwindow.glade');
  18.  }
  19.  
  20. }
  21. ?>


i druga klasa

  1. <?php
  2. class secondwindow extends GladeXML{
  3.  
  4.  public function __construct($gladefile){
  5.  
  6. parent::__construct($gladefile);
  7. $this->btnClose->connect_simple('clicked', array($this, 'onClose'));
  8.  }
  9.  
  10.  public function __get($property){
  11.  
  12. parent::get_widget($property);
  13.  }
  14.  
  15.  public function onClose(){
  16.  
  17. include_once('secondwindow.php');
  18. $this->window2->destroy();
  19.  }
  20.  
  21. }
  22. ?>


gdzie window2 to obiekt GtkWindow

wszystko startuje ze skruptu
  1. <?php
  2. $aplication = new mainwindow('mainwindow.glade');
  3. Gtk::Main();
  4. ?>


takie działanie powinno zamknąć drugie okno p kliknięciu na btnClose a zamyka oba i nie wiem w czym problem. Dodam że okna robiłem jako oddzielne projekty w glade


://////EDIT///////
Znalazłem rozwiązanie

w construktorze obu klas dodawałem polecenie:
  1. <?php
  2. $this-window1->connect_simple('destroy', array('Gtk', 'main_quit'));
  3. ?>

i druga klasa
  1. <?php
  2. $this->window2->connect_simple('destroy', array('Gtk', 'main_quit'));
  3. ?>


i to był błąd ponieważ polecenie to nie powinno znaleźć się w drugiej klasie ponieważ
gdy wywoływałem

  1. <?php
  2. $this->window2->destroy();
  3. ?>


reakcją na sygnał 'destroy' było zamknięcie wszystkich okien, takie działania powinno być możliwe tylko w przypadku pierwszego okna.