x110
02-01-2004, 14:29
Ho una semplice lista Glist.
vorrei pulirla e riscrivere dei nuovi valori.
per fare cio' devo liberare la memoria dai widget di tipo Listitem.
non ci riesco.
dove diavolo sbaglio?
la prima tenta di liberare la memoria ma gia' nella destroy_widget
mi dice che dlist->data e' null e sto cercando di distruggere un widget sbagliato.
eppure li lista mi si popola bane.
ciao
struct strumainfrm{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *pgbar;
GtkWidget *button;
GtkWidget *list;
GtkWidget *scrolled_window;//conterra' la lista
GList *dlist;
GtkWidget *fixed;
};
struct strumainfrm *mainfrm,mainfrm2;
void AggiornaListaPresenze(){
FILE *fd;
pres buf_presenze;
GtkWidget *listitem;
if(mainfrm->dlist!=NULL){
gtk_list_remove_items(GTK_LIST(mainfrm->list),mainfrm->dlist);
while (mainfrm->dlist){
gtk_widget_destroy(GTK_WIDGET(mainfrm->dlist->data));
mainfrm->dlist=g_list_next(mainfrm->dlist);
}
mainfrm->dlist=g_list_first(mainfrm->dlist);
g_list_free(mainfrm->dlist);
mainfrm->dlist=NULL;
}
int ret;
g_print("aggpres\n");
if ((fd=fopen("presenze.dat","r+"))!=NULL){
ret=fread(&buf_presenze,sizeof(buf_presenze),1,fd);
while (!(feof(fd))){
listitem=gtk_list_item_new_with_label(buf_presenze.nome);
mainfrm->dlist=g_list_prepend(mainfrm->dlist,listitem);
gtk_widget_show(listitem);
ret=fread(&buf_presenze,sizeof(buf_presenze),1,fd);
}
fclose(fd);
gtk_list_append_items(GTK_LIST(mainfrm->list),mainfrm->dlist);
}
gtk_widget_show(mainfrm->list);
}
vorrei pulirla e riscrivere dei nuovi valori.
per fare cio' devo liberare la memoria dai widget di tipo Listitem.
non ci riesco.
dove diavolo sbaglio?
la prima tenta di liberare la memoria ma gia' nella destroy_widget
mi dice che dlist->data e' null e sto cercando di distruggere un widget sbagliato.
eppure li lista mi si popola bane.
ciao
struct strumainfrm{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *pgbar;
GtkWidget *button;
GtkWidget *list;
GtkWidget *scrolled_window;//conterra' la lista
GList *dlist;
GtkWidget *fixed;
};
struct strumainfrm *mainfrm,mainfrm2;
void AggiornaListaPresenze(){
FILE *fd;
pres buf_presenze;
GtkWidget *listitem;
if(mainfrm->dlist!=NULL){
gtk_list_remove_items(GTK_LIST(mainfrm->list),mainfrm->dlist);
while (mainfrm->dlist){
gtk_widget_destroy(GTK_WIDGET(mainfrm->dlist->data));
mainfrm->dlist=g_list_next(mainfrm->dlist);
}
mainfrm->dlist=g_list_first(mainfrm->dlist);
g_list_free(mainfrm->dlist);
mainfrm->dlist=NULL;
}
int ret;
g_print("aggpres\n");
if ((fd=fopen("presenze.dat","r+"))!=NULL){
ret=fread(&buf_presenze,sizeof(buf_presenze),1,fd);
while (!(feof(fd))){
listitem=gtk_list_item_new_with_label(buf_presenze.nome);
mainfrm->dlist=g_list_prepend(mainfrm->dlist,listitem);
gtk_widget_show(listitem);
ret=fread(&buf_presenze,sizeof(buf_presenze),1,fd);
}
fclose(fd);
gtk_list_append_items(GTK_LIST(mainfrm->list),mainfrm->dlist);
}
gtk_widget_show(mainfrm->list);
}