|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
[gtk] passare più di un parametro alle callback
ciao ragazzi,
sto sbattendo la testa su come fare a passare più di un parametro alle callback vi spiego in breve il mio caso d'uso: ho un bottone, o meglio un menù da cui scelgo delle voc, a seconda da quale scelta faccio accanto creo un'altro menù. Ho quindi bisogno di un puntatore all'hbox a cui fare riferimento e un'altro al secondo menù creato, in modo tale da ditruggerlo e ricrearlo quando cambio scelta Ho pensato di risolvere il problema creandomi una struttura, con 2 campi in cui memorizzo i puntatori dei 2 widget, e nella funzione chiamata poi li utilizzo, in questo modo: Codice:
struct _puntatori {
GtkWidget *hbox;
GtkWidget *optionmenu;
GtkWidget *textbox;
};
typedef struct _puntatori Puntatori;
...
void generate_om_from1 ( GtkWidget *widget, gpointer data )
{
GtkWidget *menu;
GtkWidget *optionmenu1;
GtkWidget *menu_option_1;
GtkWidget *menu_option_2;
GtkBox *hbox;
Puntatori *p;
p = (Puntatori *) data;
hbox = (GtkBox *) p->hbox;
....
}
GtkWidget * do_entry ( GtkWidget *widget )
{
GtkWidget *hbox;
GtkWidget *menu;
GtkWidget *optionmenu1;
GtkWidget *menu_option_1;
GtkWidget *menu_option_2;
GtkWidget *menu_option_3;
Puntatori p;
hbox = gtk_hbox_new ( FALSE, 3 );
gtk_container_add ( GTK_CONTAINER(widget), hbox );
p.hbox = hbox;
p.optionmenu = NULL;
p.textbox = NULL;
...
menu_option_1 = gtk_menu_item_new_with_mnemonic (" ");
g_signal_connect ( G_OBJECT(menu_option_1), "activate", G_CALLBACK(generate_om_from1), (gpointer) (&p) );
...
}
(gtk-menu:6928): GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GtkBox' (gtk-menu:6928): Gtk-CRITICAL **: file gtkbox.c: line 371 (gtk_box_pack_start): assertion `GTK_IS_BOX (box)' failed debuggando l'applicazione ho visto che all'interno della callback i valori di hbox non sono gli stessi di quelli nella funzione chiamante e l'errore dovrebbe stare li ... Ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
mentre scrivevo il post ho trovato la soluzione ....
ho semplicemente spostato tutta la funzione do_entry nel main del programma ed ora il programma funziona correttamente. la versione di gcc che uso è la seguente: gcc (GCC) 3.3.2 20031218 (Gentoo Linux 3.3.2-r5, propolice-3.3-7) ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:14.



















