Code: Select all
;-TOP by Idle, v0.00.0, 21.02.2011
; Fixed by mk-soft, v1.01.1, 06.11.2025
;GdkEventTypes
; #GDK_NOTHING = -1
; #GDK_DELETE = 0
; #GDK_DESTROY = 1
; #GDK_EXPOSE = 2
; #GDK_MOTION_NOTIFY = 3
; #GDK_BUTTON_PRESS = 4
; #GDK_2BUTTON_PRESS = 5
; #GDK_3BUTTON_PRESS = 6
; #GDK_BUTTON_RELEASE = 7
; #GDK_KEY_PRESS = 8
; #GDK_KEY_RELEASE = 9
; #GDK_ENTER_NOTIFY = 10
; #GDK_LEAVE_NOTIFY = 11
; #GDK_FOCUS_CHANGE = 12
; #GDK_CONFIGURE = 13
; #GDK_MAP = 14
; #GDK_UNMAP = 15
; #GDK_PROPERTY_NOTIFY = 16
; #GDK_SELECTION_CLEAR = 17
; #GDK_SELECTION_REQUEST = 18
; #GDK_SELECTION_NOTIFY = 19
; #GDK_PROXIMITY_IN = 20
; #GDK_PROXIMITY_OUT = 21
; #GDK_DRAG_ENTER = 22
; #GDK_DRAG_LEAVE = 23
; #GDK_DRAG_MOTION = 24
; #GDK_DRAG_STATUS = 25
; #GDK_DROP_START = 26
; #GDK_DROP_FINISHED = 27
; #GDK_CLIENT_EVENT = 28
; #GDK_VISIBILITY_NOTIFY = 29
; #GDK_NO_EXPOSE = 30
; #GDK_SCROLL = 31
; #GDK_WINDOW_STATE = 32
; #GDK_SETTING = 33
; #GDK_OWNER_CHANGE = 34
; #GDK_GRAB_BROKEN = 35
; #GDK_DAMAGE = 36
#GDK_TOUCH_BEGIN = 37
#GDK_TOUCH_UPDATE = 38
#GDK_TOUCH_END = 39
#GDK_TOUCH_CANCEL = 40
#GDK_TOUCHPAD_SWIPE = 41
#GDK_TOUCHPAD_PINCH = 42
#GDK_PAD_BUTTON_PRESS = 43
#GDK_PAD_BUTTON_RELEASE = 44
#GDK_PAD_RING = 45
#GDK_PAD_STRIP = 46
#GDK_PAD_GROUP_MODE = 47
#GDK_EVENT_LAST = 48
#GDK_SCROLL_SMOOTH = 4 ; Since 3.4
Structure GdkEventScrollEx Extends GdkEventScroll
delta_x.d
delta_y.d
is_stop.l
EndStructure
CompilerIf Not Defined(GdkEvent, #PB_Structure)
Structure GdkEvent
StructureUnion
Type.l
any.GdkEventAny
expose.GdkEventExpose
no_expose.GdkEventNoExpose
visibility.GdkEventVisibility
motion.GdkEventMotion
button.GdkEventButton
scroll.GdkEventScrollEx
key.GdkEventKey
crossing.GdkEventCrossing
focus_change.GdkEventFocus
configure.GdkEventConfigure
property.GdkEventProperty
selection.GdkEventSelection
proximity.GdkEventProximity
client.GdkEventClient
dnd.GdkEventDND
window_state.GdkEventWindowState
setting.GdkEventSetting
EndStructureUnion
EndStructure
CompilerEndIf
Macro SetWindowCallback(EventFunction, UserData)
gdk_event_handler_set_(EventFunction, UserData, 0);
EndMacro
Macro ProcessPureBasicEvents(Event)
gtk_main_do_event_(Event);
EndMacro
; Example
CompilerIf #PB_Compiler_IsMainFile
;Our call back function
ProcedureC MyWindowCallBack(*Event.GdkEvent, UserData);
If *Event\Type = #GDK_SCROLL
If *Event\scroll\direction = #GDK_SCROLL_UP
Debug "Scroll UP"
ElseIf *Event\scroll\direction = #GDK_SCROLL_DOWN
Debug "Scroll Down "
EndIf
ElseIf *Event\Type = #GDK_BUTTON_PRESS
Debug "Button Press " + *Event\button\button
;ProcedureReturn 1
EndIf
;Pass control back to pb so it can get events
ProcessPureBasicEvents(*Event)
EndProcedure
OpenWindow(1,0,0,200,300,"test",#PB_Window_SystemMenu)
SetWindowCallback(@MyWindowCallBack(), 1)
ButtonGadget(0,10,10,60,20,"quit")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 0
quit = 1
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow Or quit
CompilerEndIf


