Странное поведение с g_signal_connect на GTK - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь отправить указатель на структуру, которую я создал для функции, используя g_signal_connect , но получаю ошибку сегментации.После некоторого тестирования я решил напечатать адрес указателя внутри вызываемой функции (эта функция отвечает за рисование в Drawing_area, что означает, что он вызывается регулярно через g_timeout_add )и, поочередно, он печатает «(ноль)» или правильный адрес.Я понятия не имею, что может быть причиной этого.

typedef struct{
...
}prog_info

gboolean on_draw_event(GtkWidget  *draw_area  ,
                       cairo_t    *cr         ,
                       prog_info  *info)
{
  printf("\ninfo: %p",info); //this will give "(nil)" or the correct
                               address, alternating
  ...
}

gboolean time_handler (GtkWidget *draw_area)
{
  if ((!GTK_IS_WIDGET(draw_area)) || (!gtk_widget_get_window (draw_area)))
    return FALSE;

  gtk_widget_queue_draw(draw_area);


  return TRUE;
}

int main(int argc, char *argv[]) {
  ...
  prog_info *info;

  info =(prog_info *) calloc (1,sizeof(prog_info));

  ...

  g_signal_connect(G_OBJECT(draw_area), "draw", G_CALLBACK(on_draw_event), info);

  g_timeout_add (10, (GSourceFunc) time_handler, draw_area);


  gtk_widget_show_all(window);
  gtk_main();
  return 0;
}

Решено

Было два разных g_signal_connect , один из которых былвсе разрушает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...