ich arbeite zur Zeit das Buch von Andrew Krause "Foundations of GTK+ Development" durch. Mir ist auch vollkommen bewusst, dass sich das Buch an GTK+ 2 anlehnt. Allerdings nutze ich GTK+ 3, weil ich möglichst auf dem neuesten Stand der Dinge bleiben möchte. Bisher war ich auch glücklicherweise in der Lage, Beispielcodes des Buches so umzuschreiben, dass sie sich auch fehlerfrei unter GTK+ 3 kompilieren ließen.
Doch nun bräuchte ich Hilfe oder vielleicht einfach nur einen Tipp.

Hier zunächst das Listing:
Code: Alles auswählen
/* eventboxes.c */
#include <gtk/gtk.h>
/* compile: gcc -Wall -g eventboxes.c -o eventboxes `pkg-config --libs --cflags gtk+-3.0` */
static void destroy( GtkWidget *, gpointer );
static gboolean button_pressed( GtkWidget *, GdkEventButton *, GtkLabel * );
int main( int argc, char *argv[] )
{
GtkWidget *window, *eventbox, *label;
gtk_init( &argc, &argv );
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
gtk_window_set_title( GTK_WINDOW( window ), "Event Box" );
gtk_container_set_border_width( GTK_CONTAINER( window ), 10 );
gtk_widget_set_size_request( window, 200, 50 );
g_signal_connect( G_OBJECT( window ), "destroy",
G_CALLBACK( destroy ), NULL );
eventbox = gtk_event_box_new();
label = gtk_label_new( "Double-Click Me!" );
/* Set the order in which widgets will receive notification of events */
gtk_event_box_set_above_child( GTK_EVENT_BOX( eventbox ), FALSE );
g_signal_connect( G_OBJECT( eventbox ), "button_press_event",
G_CALLBACK( button_pressed ), ( gpointer ) label );
gtk_container_add( GTK_CONTAINER( eventbox ), label );
gtk_container_add( GTK_CONTAINER( window ), eventbox );
/* Allow the event box to catch button presses, realize the widget, and set the *
* cursor that will be displayed when the mouse is over the event box */
gtk_widget_set_events( eventbox, GDK_BUTTON_PRESS_MASK );
gtk_widget_realize( eventbox );
gdk_window_set_cursor( eventbox->window, gdk_cursor_new( GDK_HAND1 ) );
gtk_widget_show_all( window );
gtk_main();
return 0;
}
/* This is called every time a button-press event occurs on the GtkEventBox */
static gboolean button_pressed( GtkWidget *eventbox,
GdkEventButton *event,
GtkLabel *label )
{
if( event->type == GDK_2BUTTON_PRESS )
{
const gchar *text = gtk_label_get_text( label );
if( text[0] == 'D' )
gtk_label_set_text( label, "I Was Double-Clicked!" );
else
gtk_label_set_text( label, "Double-Click Me Again!" );
}
return FALSE;
}
static void destroy( GtkWidget *window, gpointer data )
{
gtk_main_quit();
}
Wenn man jetzt immer wieder mit Double-Clicks auf das Button klickt, ändert sich das Label im Wechsel von "I Was Double-Clicked" zu "Double-Click Me Again!". Desweiteren ändert sich das Mauszeigersymbol sobald sich der Mauzeiger über den zu drückenden Button befindet.
Nun zum eigentlichen Problem bei der Kompilierung mit GTK+ 3:
Der Compiler meckert bei folgender Zeile im Quellcode:
Code: Alles auswählen
gdk_window_set_cursor( eventbox->window, gdk_cursor_new( GDK_HAND1 ) );
Code: Alles auswählen
eventboxes.c: In Funktion »main«:
eventboxes.c:40:36: Fehler: »GtkWidget« hat kein Element namens »window«
Würde mich sehr über eure Hilfe freuen.

Gruß Dave
PS: Das o.g. Listing ließ sich unter GTK+ 2 problemlos kompilieren.