Come implementare un evento-pulsante-pulsante su GtkTable

Cercare sul web le risposte non mi ha aiutato a risolvere il mio problema:

Non voglio che il mio GtkTable lanci un evento, se clicco su una cella.

Poiché non esiste un evento click, accetta per GtkButton, volevo implementare un GDK_BUTTON_PRESS_MASK e GDK_BUTTON_RELEASE_MASK per rilevare la posizione del mouse sulla tabella durante il clic . Funziona alla grande con GtkDrawingArea!

Provato il muggito, ma niente è successo, forse qualcuno può darmi un indizio 🙂

piccolo campione:

static void table_press(GtkWidget *widget, GdkEventButton *event) { printf("table pressed"); } int main(int argc, char **argv) { GtkWidget *window; GtkWidget* table; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW (window), "table click"); table = gtk_table_new(2, 5, TRUE); gtk_container_add(GTK_CONTAINER (window), table); gtk_widget_add_events(table, GDK_BUTTON_PRESS_MASK); g_signal_connect(GTK_OBJECT (table), "button-press-event", G_CALLBACK (table_press), NULL); g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_widget_show_all(window); gtk_main(); main_exit(); return 0; } 

Non si ricevono eventi perché a GtkTable non è associato un GdkWindow . Puoi utilizzare GtkEventBox che ti consente di accettare eventi su widget che normalmente non accetterebbero eventi. Questo è derivato da GtkBin quindi il codice interessante sarebbe simile a questo.

 table = gtk_table_new(2, 5, TRUE); event_box = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER (window), event_box); gtk_container_add(GTK_CONTAINER (event_box), table); g_signal_connect(GTK_OBJECT (event_box), "button-press-event", G_CALLBACK (table_press), NULL);