В gtk можно поместить функцию и ее обратный вызов все в одну функцию?

Что-то в роде такого


typedef void (*CallWhichButton) ( );

  typedef void (*WhichButton)(GtkWidget  * ,GdkEventButton *  ,int   );


  void whichButton(GtkWidget  *btn,GdkEventButton * event,int but)
    {


        but=event->button;


    }



  void callWhichButton (GtkWidget  *but )
    {

        g_signal_connect(GTK_BUTTON(but), "button-press-event", G_CALLBACK(whichButton), NULL);

    }

        

  extern "C" void whichMousButton  (GtkWidget  *but ,int  sig )
    {

        GdkEventButton *  event;
        []( CallWhichButton callWhichButton(GtkWidget  *  but),WhichButton whichButton(GtkWidget  *  but, GdkEventButton *  event, int  sig)){};


    }

//////////////////////////////////////////////////////////////////////////

 extern "C"
{ 
void whichMousButton  (GtkWidget  * ,int    );
}

main (int   argc,char *argv[])
{
   GtkWidget *window;
    GtkWidget *button;
    int but;
    gtk_init(argc, argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
    gtk_window_set_default_size(GTK_WINDOW(window),640,480);


   button=gtk_button_new_with_label("");




    gtk_container_add(GTK_CONTAINER(window), button);
     
 whichMousButton  (button, but);

 if (but== 3)
      {
           g_print("Нажата правая кнопка мышки\n");
              
      }
gtk_widget_show(button);
gtk_widget_show(window);

gtk_main();
    return 0;
}

Я предполагал , что функции callWhichButton и whichButton будут вызываться одновременно(синхронно) и вроде как должно работать но кнопка нажимается и ничего не происходит .


Ответы (1 шт):

Автор решения: Yaroslav

Макрос g_signal_connect() этот макрос связывает событие и функцию для обработки этого события. Вначале Вы привизали обработчик к событию, но обработка события и вызов обработчиков будет только в функции gtk_main().

→ Ссылка