Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: libcha 11. 03. 2014, 09:49:25
-
Ahoj,
doufám že se tu najde někdo zkušený kdo mi poradí.
Potřebuju předat pointer na instanci do handleru, který je (samozřejmě) statický. Následující kód osvětlý sitaci (ořezaný o "zbytečnosti"):
class moje_trida {
GtkWidget * drawing_area;
moje_trida() {
g_signal_connect(drawing_area, "expose-event", G_CALLBACK(kresleni), this /* tady posilam THIS */);
}
static gboolean kresleni(GtkWidget *da, GdkEventExpose *event, gpointer data /* ale tady prijde NULL*/) {
delej_neco_s((moje_trida *) data);
}
};
Jak už je naznačeno v komentářích, přestože v g_signal_connect registruji jako data pointer na instanci mojí třídy, v handleru se objeví (data == NULL), což je ošklivé, protože v něm potřebuju se svojí třídou pracovat (a ne jen s drawing_area).
Samozřejmě, že by to šlo nějak hnusně ohackovat (mapování drawing_area->moje_trida), ale já bych chtěl být relativně elegantní.
Kde je chyba ?
Díky moc !
-
GTK moc neznám, ale řekl bych, že funkce kresleni má špatný prototyp a mělo by to být
void kresleni(GtkWidget *widget, gpointer data)
-
Díky za reakci.
Nakonec jsem přišel na to, že jsem vůl, protože s tím NULL jsem si to jinde v kódu volal sám ručně.
Závěr je, že co jsem tvrdil že nefunguje, funguje.
-
Díky za reakci.
Nakonec jsem přišel na to, že jsem vůl, protože s tím NULL jsem si to jinde v kódu volal sám ručně.
Závěr je, že co jsem tvrdil že nefunguje, funguje.
nakonec z toho bude i uzitek, zjistili jsme, ze se null rymuje s vul :-)
a to si zazijeme nekdy kazdy.