Page 1 of 1

Inconsistent mouse click events on ListViewGadget, ListIconGadget and TreeGadget

Posted: Fri Dec 19, 2025 4:30 am
by bal
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

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
ListIconGadget

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
TreeGadget

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