Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: libcha 11. 03. 2014, 09:49:25

Název: GTK+2, C++: gpointer data se nepředává handleru
Přispěvatel: 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"):
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 !
Název: Re:GTK+2, C++: gpointer data se nepředává handleru
Přispěvatel: gamer 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)
Název: Re:GTK+2, C++: gpointer data se nepředává handleru
Přispěvatel: libcha 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.
Název: Re:GTK+2, C++: gpointer data se nepředává handleru
Přispěvatel: fdvgdsfsda 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.