I tried a couple different things. Including using an evenbox.
Code: Select all
Procedure GTKSignalConnect(*Widget, Signal$, Function, user_data)
CompilerIf #GTK_MAJOR_VERSION = 1
gtk_signal_connect_(*Widget, @Signal$, Function, user_data)
CompilerElse
g_signal_connect_data_(*Widget, @Signal$, Function, user_data, 0, 0)
CompilerEndIf
EndProcedure
; This is a signal callback. Note the CDLL declaration. that is important.
; the user_data field helps to pass additional data.
;
ProcedureCDLL EventCallback(*Widget, *Event.GdkEventCrossing, user_data)
Select user_data
Case 1 : Debug "container enter event"
Case 2 : Debug "container leave event"
Case 3 : Debug "button enter event"
Case 4 : Debug "button leave event"
EndSelect
EndProcedure
#MyContainer = 10
#MyButton = 11
If OpenWindow(0,0,0,345,105,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Event Test") And CreateGadgetList(WindowID(0))
ButtonGadget(#MyButton, 200, 10, 100, 30, "Test")
ContainerGadget(#MyContainer, 10,10,100,83,#PB_Container_Raised)
*event_box.GtkWidget = gtk_event_box_new_()
gtk_container_add_(*GadgetID(#MyContainer), *event_box)
gtk_widget_show_(*event_box)
; connect the signals...
gtk_widget_set_events_(*event_box, #GDK_ENTER_NOTIFY_MASK | #GDK_LEAVE_NOTIFY_MASK);
GTKSignalConnect(*event_box, "enter-notify-event", @EventCallback(), 1)
GTKSignalConnect(*event_box, "leave-notify-event", @EventCallback(), 2)
GTKSignalConnect(*GadgetID(#MyButton), "enter-notify-event", @EventCallback(), 3)
GTKSignalConnect(*GadgetID(#MyButton), "leave-notify-event", @EventCallback(), 4)
gtk_widget_realize_(*event_box);
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
Case #MyContainer : Debug "Container clicked!"
Case #MyButton : Debug "Button clicked!"
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
End
But this doesn't work. Very frusterating.
Anyway, did you try just using a button and packing the stuff into it? This actually does work.
Code: Select all
Procedure GTKSignalConnect(*Widget, Signal$, Function, user_data)
CompilerIf #GTK_MAJOR_VERSION = 1
gtk_signal_connect_(*Widget, @Signal$, Function, user_data)
CompilerElse
g_signal_connect_data_(*Widget, @Signal$, Function, user_data, 0, 0)
CompilerEndIf
EndProcedure
; This is a signal callback. Note the CDLL declaration. that is important.
; the user_data field helps to pass additional data.
;
ProcedureCDLL EventCallback(*Widget, *Event.GdkEventCrossing, user_data)
Select user_data
Case 1 : Debug "container enter event"
Case 2 : Debug "container leave event"
Case 3 : Debug "button enter event"
Case 4 : Debug "button leave event"
EndSelect
EndProcedure
; from the GTK+ tutorial
Procedure.l xpm_label_box( xpm_filename$, label_text$ )
*box.GtkWidget;
*label.GtkWidget;
*image.GtkWidget;
;/* Create box For image And label */
*box = gtk_hbox_new_(#FALSE, 0);
gtk_container_set_border_width_(*box, 2);
;/* Now on To the image stuff */
*image = gtk_image_new_from_file_(xpm_filename$);
;/* Create a label For the button */
*label = gtk_label_new_(label_text$);
;/* Pack the image And label into the box */
gtk_box_pack_start_(*box, *image, #FALSE, #FALSE, 3);
gtk_box_pack_start_(*box, *label, #FALSE, #FALSE, 3);
gtk_widget_show_(*image);
gtk_widget_show_(*label);
ProcedureReturn *box
EndProcedure
#MyContainer = 10
#MyButton = 11
If OpenWindow(0,0,0,345,105,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Event Test") And CreateGadgetList(WindowID(0))
ButtonGadget(#MyButton, 200, 10, 100, 30, "Test")
ContainerGadget(#MyContainer, 10,10,100,83,#PB_Container_Raised)
*box.GtkWidget = xpm_label_box("/tmp/test.xpm", "Testing!")
*button.GtkWidget = gtk_button_new_()
; /* Pack And show all our widgets */
gtk_widget_show_(*box);
gtk_container_add_(*button, *box);
gtk_container_add_(*GadgetID(#MyContainer), *button)
gtk_widget_show_(*button)
; connect the signals...
GTKSignalConnect(*button, "enter-notify-event", @EventCallback(), 1)
GTKSignalConnect(*button, "leave-notify-event", @EventCallback(), 2)
GTKSignalConnect(*GadgetID(#MyButton), "enter-notify-event", @EventCallback(), 3)
GTKSignalConnect(*GadgetID(#MyButton), "leave-notify-event", @EventCallback(), 4)
gtk_widget_realize_(*event_box);
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
Case #MyContainer : Debug "Container clicked!"
Case #MyButton : Debug "Button clicked!"
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
EndIf
End
You could set the colors in the callback.