On Windows, it seems to be working okay.
It's Linux that makes the active item selected under all 3 subsystems, even if flag #PB_ListIcon_AlwaysShowSelection is not being used.
Code: Select all
Enumeration
#btnActive1
#btnActive2
#btnSetItem0
#btnSetItem1
#btnSetItem2
#txtGetItem1
#txtGetItem2
#txtGetItem3
#txtGetItem4
#txtGetItem11
#txtGetItem12
#txtGetItem13
#txtGetItem14
#btnMsgBox
#ListIcon1
#ListIcon2
EndEnumeration
#win = 0
#NumItems = 4
Procedure _UpdateInfo()
Protected item = GetGadgetState(#ListIcon1)
SetGadgetText(#txtGetItem2, Str(item))
SetGadgetText(#txtGetItem3, "GetGadgetItemState(#ListIcon1, " + Str(item) + "):")
SetGadgetText(#txtGetItem4, Str(GetGadgetItemState(#ListIcon1, item) & #PB_ListIcon_Selected))
item = GetGadgetState(#ListIcon2)
SetGadgetText(#txtGetItem12, Str(item))
SetGadgetText(#txtGetItem13, "GetGadgetItemState(#ListIcon2, " + Str(item) + "):")
SetGadgetText(#txtGetItem14, Str(GetGadgetItemState(#ListIcon2, item) & #PB_ListIcon_Selected))
EndProcedure
If OpenWindow(#win, 0, 0, 550, 470, "ListIconGadget SetGadgetState / SetGadgetItemState", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#btnSetItem0, 10, 10, 230, 25, "SetGadgetState to -1")
ButtonGadget(#btnSetItem1, 10, 40, 230, 25, "SetGadgetState Random")
ButtonGadget(#btnSetItem2, 10, 70, 230, 25, "SetGadgetItemState Random")
ButtonGadget(#btnMsgBox, 10, 100, 230, 25, "MsgBox Selected Items...")
TextGadget(#txtGetItem1, 250, 10, 260, 25, "GetGadgetState(#ListIcon1): ", #PB_Text_Border)
TextGadget(#txtGetItem2, 510, 10, 30, 25, "x", #PB_Text_Border|#PB_Text_Center)
TextGadget(#txtGetItem3, 250, 35, 260, 25, "GetGadgetItemState(#ListIcon1, -1): ", #PB_Text_Border)
TextGadget(#txtGetItem4, 510, 35, 30, 25, "x", #PB_Text_Border|#PB_Text_Center)
TextGadget(#txtGetItem11, 250, 70, 260, 25, "GetGadgetState(#ListIcon2): ", #PB_Text_Border)
TextGadget(#txtGetItem12, 510, 70, 30, 25, "x", #PB_Text_Border|#PB_Text_Center)
TextGadget(#txtGetItem13, 250, 95, 260, 25, "GetGadgetItemState(#ListIcon2, -1): ", #PB_Text_Border)
TextGadget(#txtGetItem14, 510, 95, 30, 25, "x", #PB_Text_Border|#PB_Text_Center)
ButtonGadget(#btnActive1, 10, 130, 150, 25, "Active #ListIcon1")
ButtonGadget(#btnActive2, 10, 300, 150, 25, "Active #ListIcon2")
ListIconGadget(#ListIcon1, 170, 130, 370, 160, "#ListIcon1: AlwaysShowSelection OFF", 320)
ListIconGadget(#ListIcon2, 170, 300, 370, 160, "#ListIcon2: AlwaysShowSelection ON", 320, #PB_ListIcon_AlwaysShowSelection)
For a = 0 To #NumItems
AddGadgetItem (#ListIcon1, -1, "Item " + Str(a) + " of #ListIcon1")
AddGadgetItem (#ListIcon2, -1, "Item " + Str(a) + " of #ListIcon2 [AlwaysShowSelection ON]")
Next
_UpdateInfo()
; *** SetGadgetState() ***
; Windows: Works okay (#PB_ListIcon_AlwaysShowSelection on/off works as expected)
; Linux GTK2: #PB_ListIcon_AlwaysShowSelection seems to be ALWAYS ON. Selected item is always hightlighted.
; Linux GTK3: #PB_ListIcon_AlwaysShowSelection seems to be ALWAYS ON. Selected item is always hightlighted.
; Linux Qt: #PB_ListIcon_AlwaysShowSelection seems to be ALWAYS ON. Selected item is always hightlighted.
; *** SetGadgetItemState() ***
; Windows: Works okay (#PB_ListIcon_AlwaysShowSelection on/off works as expected)
; Linux GTK2: #PB_ListIcon_AlwaysShowSelection seems to be ALWAYS ON. Selected item is always hightlighted.
; Linux GTK3: #PB_ListIcon_AlwaysShowSelection seems to be ALWAYS ON. Selected item is always hightlighted.
; Also, it seems at program start item-0 is "active" but not hightlighted:
; click on "Active #ListIcon1" or "Active #ListIcon2" after program start to see that they are "active".
; Linux Qt: #PB_ListIcon_AlwaysShowSelection seems to be ALWAYS ON. Selected item is always hightlighted.
; *** GetGadgetState() ***
; Windows: Works okay: if no item is active: returns -1
; Linux GTK2: Works okay: if no item is active: returns -1
; Linux GTK3: Works okay: if no item is active: returns -1
; Linux Qt: Works okay: if no item is active: returns -1
; *** GetGadgetItemState() ***
; Windows: Works okay, querying item "-1" returns 0
; Linux GTK2: Works okay, querying item "-1" returns 0 and a WARNING: [WARNING] Gtk (CRITICAL): IA__gtk_tree_model_iter_nth_child: assertion 'n >= 0' failed
; Linux GTK3: Works okay, querying item "-1" returns 0 and a WARNING: [WARNING] Gtk (CRITICAL): gtk_tree_model_iter_nth_child: assertion 'n >= 0' failed
; Linux Qt: Works okay, querying item "-1" returns 0
Repeat
wEvent = WaitWindowEvent()
If wEvent = #PB_Event_Gadget
Select EventGadget()
Case #btnActive1
SetActiveGadget(#ListIcon1)
Case #btnActive2
SetActiveGadget(#ListIcon2)
Case #btnSetItem0
SetGadgetState(#ListIcon1, -1)
SetGadgetState(#ListIcon2, -1)
SetActiveGadget(-1)
_UpdateInfo()
Case #btnSetItem1
item = Random(#NumItems)
SetGadgetState(#ListIcon1, item)
SetGadgetState(#ListIcon2, item)
_UpdateInfo()
Case #btnSetItem2
item = Random(#NumItems)
SetGadgetItemState(#ListIcon1, item, 1)
SetGadgetItemState(#ListIcon2, item, 1)
_UpdateInfo()
Case #btnMsgBox
item = GetGadgetState(#ListIcon1)
msg$ = "GetGadgetState(#ListIcon1): " + Str(item) + #LF$
msg$ + "GetGadgetItemState(#ListIcon1, "+Str(item)+"): " + Str(GetGadgetItemState(#ListIcon1, item) & #PB_ListIcon_Selected) + #LF$
msg$ + #LF$
item = GetGadgetState(#ListIcon2)
msg$ + "GetGadgetState(#ListIcon2): " + Str(item) + #LF$
msg$ + "GetGadgetItemState(#ListIcon2, "+Str(item)+"): " + Str(GetGadgetItemState(#ListIcon1, item) & #PB_ListIcon_Selected)
MessageRequester("Selected items", msg$)
Case #ListIcon1
If EventType() = #PB_EventType_LeftClick
_UpdateInfo()
EndIf
Case #ListIcon2
If EventType() = #PB_EventType_LeftClick
_UpdateInfo()
EndIf
EndSelect
EndIf
Until wEvent = #PB_Event_CloseWindow
EndIf