I was able to test your code and I modified it to include ImageGadget within the Container gadget. I resized the Container gadget to the same size as the ImageGadget to give the illusion that its just an image. Then coded the image switcheroo when capturing the Container events.
Here is the revised code now with hover goodness:
Code: Select all
; From glib-2.0/gobject/gsignal.h:239
; #define g_signal_connect(instance, detailed_signal, c_handler, Data) \
; g_signal_connect_data ((instance), (detailed_signal), (c_handler), (Data), NULL, (GConnectFlags) 0)
UsePNGImageDecoder()
#MyContainer = 10
#MyButton = 11
#MyImageGadget = 12
#MyImage = 21
#MyImage1 = 22
#MyImage2 = 23
Procedure g_signal_connect(*object, name$, *func, *func_data)
g_signal_connect_data_(*object, @name$, *func, *func_data, 0, 0)
EndProcedure
ProcedureCDLL BEventCallback(*Widget, *Event.GdkEventAny, user_data)
Select user_data
Case 3 : Debug "button enter event"
Case 4 : Debug "button leave event"
EndSelect
EndProcedure
ProcedureCDLL CEventCallback(*Widget, *Event.GdkEventAny, user_data)
Debug Str(*Event\type) + " user_data: " + Str(user_data)
Select *Event\type
Case #GDK_DELETE
Debug "Event: GDK_DELETE: 0"
Case #GDK_DESTROY
Debug "Event: GDK_DESTROY: 1"
Case #GDK_EXPOSE
Debug "Event: GDK_EXPOSE: 2"
Case #GDK_MOTION_NOTIFY
Debug "Event: GDK_MOTION_NOTIFY: 3"
Case #GDK_BUTTON_PRESS
Debug "Event: GDK_BUTTON_PRESS: 4"
Case #GDK_2BUTTON_PRESS
Debug "Event: GDK_2BUTTON_PRESS: 5"
Case #GDK_3BUTTON_PRESS
Debug "Event: GDK_3BUTTON_PRESS: 6"
Case #GDK_BUTTON_RELEASE
Debug "Event: GDK_BUTTON_RELEASE: 7"
Case #GDK_KEY_PRESS
Debug "Event: GDK_KEY_PRESS: 8"
Case #GDK_KEY_RELEASE
Debug "Event: GDK_KEY_RELEASE: 9"
Case #GDK_ENTER_NOTIFY
Debug "Event: GDK_ENTER_NOTIFY: 10"
SetGadgetState(#MyImageGadget,UseImage(#MyImage2))
Case #GDK_LEAVE_NOTIFY
Debug "Event: GDK_LEAVE_NOTIFY: 11"
SetGadgetState(#MyImageGadget,UseImage(#MyImage))
Case #GDK_FOCUS_CHANGE
Debug "Event: GDK_FOCUS_CHANGE: 12"
Case #GDK_CONFIGURE
Debug "Event: GDK_CONFIGURE: 13"
Case #GDK_MAP
Debug "Event: GDK_MAP: 14"
Case #GDK_UNMAP
Debug "Event: GDK_UNMAP: 15"
Case #GDK_PROPERTY_NOTIFY
Debug "Event: GDK_PROPERTY_NOTIFY: 16"
Case #GDK_SELECTION_CLEAR
Debug "Event: GDK_SELECTION_CLEAR: 17"
Case #GDK_SELECTION_REQUEST
Debug "Event: GDK_SELECTION_REQUEST: 18"
Case #GDK_SELECTION_NOTIFY
Debug "Event: GDK_SELECTION_NOTIFY: 19"
Case #GDK_PROXIMITY_IN
Debug "Event: GDK_PROXIMITY_IN: 20"
Case #GDK_PROXIMITY_OUT
Debug "Event: GDK_PROXIMITY_OUT: 21"
Case #GDK_DRAG_ENTER
Debug "Event: GDK_DRAG_ENTER: 22"
Case #GDK_DRAG_LEAVE
Debug "Event: GDK_DRAG_LEAVE: 23"
Case #GDK_DRAG_MOTION
Debug "Event: GDK_DRAG_MOTION: 24"
Case #GDK_DRAG_STATUS
Debug "Event: GDK_DRAG_STATUS: 25"
Case #GDK_DROP_START
Debug "Event: GDK_DROP_START: 26"
Case #GDK_DROP_FINISHED
Debug "Event: GDK_DROP_FINISHED: 27"
Case #GDK_CLIENT_EVENT
Debug "Event: GDK_CLIENT_EVENT: 28"
Case #GDK_VISIBILITY_NOTIFY
Debug "Event: GDK_VISIBILITY_NOTIFY: 29"
Case #GDK_NO_EXPOSE
Debug "Event: GDK_NO_EXPOSE: 30"
Case #GDK_SCROLL
Debug "Event: GDK_SCROLL: 31"
Case #GDK_WINDOW_STATE
Debug "Event: GDK_WINDOW_STATE: 32"
EndSelect
EndProcedure
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,91,55,#PB_Container_BorderLess)
; connect the signals...
LoadImage(#MyImage,"/home/ubuntu/normal.png")
LoadImage(#MyImage2,"/home/ubuntu/highlight.png")
ImageGadget(#MyImageGadget, 0, 0, 87, 51, UseImage(#MyImage))
gtk_widget_add_events_(*GadgetID(#MyContainer), #GDK_ENTER_NOTIFY_MASK|#GDK_LEAVE_NOTIFY_MASK)
g_signal_connect(*GadgetID(#MyContainer), "event", @CEventCallback(), 1)
;g_signal_connect(*GadgetID(#MyButton), "enter-notify-event", @BEventCallback(), 3)
;g_signal_connect(*GadgetID(#MyButton), "leave-notify-event", @BEventCallback(), 4)
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
Normal:

Highlight:

BTW, I noticed that the container gadget needs to be 4 pixels wider and 4 pixels higher than the image gadget, not a big deal.
Thanks again.