Strona 1 z 1

glade3, gtk i dynamiczne okna dialogowe

: 27 lutego 2010, 16:35
autor: szuwar7
Mam taki mały problemik. Chciałbym dynamicznie tworzyć okna dialogowe pobierając interfejs z pliku xml. Generalnie wiem jak się pobiera widgety, ale problem występuje kiedy zamykam okno a później próbuję uruchomić je jeszcze raz. Oto przykład.

Tworzenie okna w main:

Kod: Zaznacz cały

window2 = glade_xml_get_widget (gxml, "dialog1");
Zamykanie okna po naciśnięciu przycisku:

Kod: Zaznacz cały

static void on_button1_clicked (GtkWidget* widget, gpointer user_data)
{

	gtk_widget_destroy(window2);
	
}
Próba uruchomienia okna po wciśnięciu innego przycisku:

Kod: Zaznacz cały

static void on_directory_button_clicked (GtkWidget* widget, gpointer user_data)
{
	window2 = glade_xml_get_widget (gxml, "dialog1");
	gtk_dialog_run (GTK_DIALOG (window2));
	gtk_widget_show (window2);
}
i tutaj właśnie nie działa.

Po naciśnięciu przycisku nic się nie dzieje (sygnał jest przypisany do funkcji).

: 11 marca 2010, 23:15
autor: Qmaty
Z tego co kojarzę to twoje okno jest (chyba) alokowane dynamicznie w chwili ładowania pliku xml z szablonem.
Samym get_widget jedynie uzyskujesz wskaźnik do okno które jest już utworzone w pamięci (uzyskujesz tylko wskaźnik do niego).
A wiec kolejno : ładujesz szablon i alokujesz go tym samym, uzyskujesz wskaźnik do okna które po prostu usuwasz (pusty obiekt w szablonie) do którego później próbujesz się odwołać i stąd zero reakcji.

Przeładowanie pliku xml z szablonem powinno pomóc.

: 14 marca 2010, 13:33
autor: grzesiek