Funkcja wywoływana przy naciskaniu przycisku.

0

Mam problem z danymi przesyłanymi przez gpointer w gtk. Zaalokowane dane nie są dobrze interpretowane (lub przekazywane) do funkcji, która wywoływana jest przy naciśnięciu przycisku. Oto mój kod:

typedef struct Pakiet{
    Kontroler * kontroler;
    int wcisniety_x;
    int wcisniety_y;
}Pakiet;

struct Kontroler{
    Ekran * ekran;
    Plansza * plansza;
    int zaznaczony_x,zaznaczony_y;
    bool zaznaczony;
};

void wybierz_pole(GtkWidget * widget,gpointer data){
    Pakiet* pakiet = (Pakiet*)data;
    printf("Pakiet nie jest poprawny. Dowód: pakiet->wcisiniety_x = %d\n",pakiet->wcisniety_x);
    //Po nacisnieciu wyswietlilo: 377753484
    //W tej czesci kodu odnosze sie do elementu kontroler co powoduje wywalenie sie programu
}

Kontroler * stworz_kontroler(Ekran * ekran,Plansza * plansza){
    Kontroler * nowy = (Kontroler*)malloc(sizeof(Kontroler));

    nowy->ekran = ekran;
    nowy->plansza = plansza;

    nowy->zaznaczony=false;
    nowy->zaznaczony_x=0;
    nowy->zaznaczony_y=0;

    //Podlaczanie ramek pod kontroler
    Pakiet * pakiet;
    for(int x = 0; x < zwroc_szerokosc(plansza);x++){
        for(int y = 0; y < zwroc_wysokosc(plansza);y++){
            pakiet = (Pakiet*)malloc(sizeof(Pakiet));

            pakiet->wcisniety_x = x;
            pakiet->wcisniety_y = y;
            pakiet->kontroler = nowy;

            g_signal_connect(G_OBJECT(zwroc_ramke(ekran,x,y)),"button_press_event",G_CALLBACK(wybierz_pole),(gpointer)pakiet);
        }
    }
    odswiez(ekran,plansza);
    return nowy;
}

Nigdzie poza tym kodem nie zmieniam callback'a ani też nie zwalniam pakietu.
Z góry dziękuję za pomoc.

0

Już naprawione. Okazało się, że callback do event_box powinien wyglądać tak:

void wybierz_pole(GtkWidget * widget,GdkEventButton* event,gpointer data)

A nie tak:

void wybierz_pole(GtkWidget * widget,gpointer data)

1 użytkowników online, w tym zalogowanych: 0, gości: 1