В 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().