Inconsistent mouse click events on ListViewGadget, ListIconGadget and TreeGadget
Posted: Fri Dec 19, 2025 4:30 am
Noticed that left and right mouse click messages are not consistent across ListViewGadget, ListIconGadget and TreeGadget.
Also, the different platforms and subsystems behave in a different way.
TreeGadget looks to have multiple issues.
Could not test this on Mac or RPi.
ListViewGadget
ListIconGadget
TreeGadget
Also, the different platforms and subsystems behave in a different way.
TreeGadget looks to have multiple issues.
Could not test this on Mac or RPi.
ListViewGadget
Code: Select all
; ListViewGadget (Windows):
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is NOT highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
;
; ListViewGadget (Linux GTK2):
; #PB_EventType_LeftClick: Left-clicked item is highlighted, but #PB_EventType_LeftClick is sent for BOTH LMB-Down and LMB-Up.
; #PB_EventType_RightClick: Right-clicked item is highlighted, but a #PB_EventType_LeftClick is sent for LMB-Down and #PB_EventType_RightClick is sent for LMB-Up.
;
; ListViewGadget (Linux GTK3):
; #PB_EventType_LeftClick: Left-clicked item is highlighted, but #PB_EventType_LeftClick is sent for BOTH LMB-Down and LMB-Up.
; #PB_EventType_RightClick: Right-clicked item is highlighted, but a #PB_EventType_LeftClick is sent for LMB-Down and #PB_EventType_RightClick is sent for LMB-Up.
;
; ListViewGadget (Linux Qt):
; #PB_EventType_LeftClick: Left-clicked item is highlighted, but #PB_EventType_LeftClick is sent for BOTH LMB-Down and LMB-Up.
; #PB_EventType_RightClick: Right-clicked item is highlighted, but a #PB_EventType_LeftClick is sent for LMB-Down and #PB_EventType_RightClick is sent for LMB-Up.
#win = 0
#ListView = 0
If OpenWindow(0, 0, 0, 320, 140, "ListViewGadget Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#ListView, 10, 10, 300, 120)
For a = 0 To 9
AddGadgetItem (#ListView, -1, "Item " + Str(a) + " of the ListView")
Next
Repeat
wEvent.i = WaitWindowEvent()
If wEvent = #PB_Event_Gadget
Select EventGadget()
Case #ListView
If EventType() = #PB_EventType_LeftClick
Debug "#PB_EventType_LeftClick: " + GetGadgetItemText(#ListView, GetGadgetState(#ListView))
ElseIf EventType() = #PB_EventType_RightClick
Debug "#PB_EventType_RightClick: " + GetGadgetItemText(#ListView, GetGadgetState(#ListView))
ElseIf EventType() = #PB_EventType_LeftDoubleClick
Debug "#PB_EventType_LeftDoubleClick: " + GetGadgetItemText(#ListView, GetGadgetState(#ListView))
EndIf
EndSelect
EndIf
Until wEvent = #PB_Event_CloseWindow
EndIf
Code: Select all
; ListIconGadget (Windows):
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
;
; ListIconGadget (Linux GTK2):
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
;
; ListIconGadget (Linux GTK3):
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
;
; ListIconGadget (Linux Qt):
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
#win = 0
#ListIcon = 0
If OpenWindow(0, 0, 0, 320, 140, "ListIconGadget Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#ListIcon, 10, 10, 300, 120, "Column-0", 200)
For a = 0 To 9
AddGadgetItem (#ListIcon, -1, "Item " + Str(a) + " of the ListIcon")
Next
Repeat
wEvent.i = WaitWindowEvent()
If wEvent = #PB_Event_Gadget
Select EventGadget()
Case #ListIcon
If EventType() = #PB_EventType_LeftClick
Debug "#PB_EventType_LeftClick: " + GetGadgetItemText(#ListIcon, GetGadgetState(#ListIcon))
ElseIf EventType() = #PB_EventType_RightClick
Debug "#PB_EventType_RightClick: " + GetGadgetItemText(#ListIcon, GetGadgetState(#ListIcon))
ElseIf EventType() = #PB_EventType_LeftDoubleClick
Debug "#PB_EventType_LeftDoubleClick: " + GetGadgetItemText(#ListIcon, GetGadgetState(#ListIcon))
ElseIf EventType() = #PB_EventType_RightDoubleClick
Debug "#PB_EventType_RightDoubleClick: " + GetGadgetItemText(#ListIcon, GetGadgetState(#ListIcon))
EndIf
EndSelect
EndIf
Until wEvent = #PB_Event_CloseWindow
EndIf
Code: Select all
; TreeGadget (Windows):
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
;
; TreeGadget (Linux GTK2): Just moving the window generates a lot of #PB_EventType_LeftClick events! Same happens when moving the mouse in and out of the client area.
; #PB_EventType_LeftClick: Left-clicked item is highlighted. For each LMB-Up TWO #PB_EventType_LeftClick events are sent.
; #PB_EventType_RightClick: Right-clicked item is highlighted. For each RMB-Up first a #PB_EventType_RightClick then a #PB_EventType_LeftClick event is sent.
;
; TreeGadget (Linux GTK3): Any mouse movement inside the window generates a lot of #PB_EventType_LeftClick events!
; #PB_EventType_LeftClick: Left-clicked item is highlighted. A lot of #PB_EventType_LeftClick events generated for LMB-Down and LMB-Up.
; #PB_EventType_RightClick: Right-clicked item is highlighted. A lot of #PB_EventType_LeftClick events generated for LMB-Down and LMB-Up and one #PB_EventType_RightClick.
;
; TreeGadget (Linux Qt): Moving the mouse in and out of the client area generates a #PB_EventType_LeftClick event.
; #PB_EventType_LeftClick: Left-clicked item is highlighted. #PB_EventType_LeftClick sent only for LMB-Up (which sounds correct).
; #PB_EventType_RightClick: Right-clicked item is highlighted. #PB_EventType_RightClick sent only for RMB-Up (which sounds correct).
#win = 0
#Tree = 0
If OpenWindow(0, 0, 0, 320, 140, "TreeGadget Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(#Tree, 10, 10, 300, 120)
For a = 0 To 9
AddGadgetItem (#Tree, -1, "Item " + Str(a) + " of the Tree")
Next
Repeat
wEvent.i = WaitWindowEvent()
Select EventGadget()
Case #Tree
If EventType() = #PB_EventType_LeftClick
Debug "#PB_EventType_LeftClick: " + GetGadgetItemText(#Tree, GetGadgetState(#Tree))
ElseIf EventType() = #PB_EventType_RightClick
Debug "#PB_EventType_RightClick: " + GetGadgetItemText(#Tree, GetGadgetState(#Tree))
ElseIf EventType() = #PB_EventType_LeftDoubleClick
Debug "#PB_EventType_LeftDoubleClick: " + GetGadgetItemText(#Tree, GetGadgetState(#Tree))
ElseIf EventType() = #PB_EventType_RightDoubleClick
Debug "#PB_EventType_RightDoubleClick: " + GetGadgetItemText(#Tree, GetGadgetState(#Tree))
EndIf
EndSelect
Until wEvent = #PB_Event_CloseWindow
EndIf