GTK+2, C++: gpointer data se nepředává handleru

libcha

GTK+2, C++: gpointer data se nepředává handleru
« kdy: 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"):
Kód: [Vybrat]
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 !


gamer

Re:GTK+2, C++: gpointer data se nepředává handleru
« Odpověď #1 kdy: 11. 03. 2014, 12:22:52 »
GTK moc neznám, ale řekl bych, že funkce kresleni má špatný prototyp a mělo by to být
Kód: [Vybrat]
void kresleni(GtkWidget *widget, gpointer data)

libcha

Re:GTK+2, C++: gpointer data se nepředává handleru
« Odpověď #2 kdy: 11. 03. 2014, 13:48:53 »
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.

fdvgdsfsda

Re:GTK+2, C++: gpointer data se nepředává handleru
« Odpověď #3 kdy: 11. 03. 2014, 18:38:27 »
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.