Listbox - Detect A Single Right Mouse Click?!

BlitzMax Forums/BlitzMax GUI Programming/Listbox - Detect A Single Right Mouse Click?!

Hey there!

I know the listbox code has been changed a bit over the past.

A right mouse click on the listbox currently also generates a left a left one as well?

Seems broken for me...

Grisu

Example code:
' Listbox Example - Thanks JSP
SuperStrict
Import MaxGui.Drivers
Import MaxGui.Win32MaxGuiEX

Local Window14:TGadget = CreateWindow:TGadget("Window14",261,106,141,143,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS )
	Local ListBox1:TGadget = CreateListBox:TGadget(27,28,80,100,Window14:TGadget,Null)
		AddGadgetItem( ListBox1:TGadget,"Item1",GADGETITEM_DEFAULT )
		AddGadgetItem( ListBox1:TGadget,"Item2",GADGETITEM_NORMAL )

Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			Select EventSource()
				Case Window14	Window14_WC( Window14:TGadget )
			End Select

		Case EVENT_GADGETACTION
			Select EventSource()
				Case ListBox1	ListBox1_GA( ListBox1:TGadget , EventData() , EventExtra:Object() )
			End Select

		Case EVENT_GADGETSELECT
			Select EventSource()
				Case ListBox1	ListBox1_GS( ListBox1:TGadget , EventData() , EventExtra:Object() )
			End Select

		Case EVENT_GADGETMENU
			Select EventSource()
				Case ListBox1	ListBox1_GM( ListBox1:TGadget , EventData() , EventExtra:Object() , Window14:TGadget )
			End Select

	End Select
Forever

Function Window14_WC( Window:TGadget )
	DebugLog "Window Window14 wants to be closed"

	End
End Function

Function ListBox1_GA( ListBox:TGadget , Number:Int , Extra:Object )
	DebugLog "ListBox ListBox1 double clicked an Item " + Number
    If Number => 0 DebugLog "Selected Text = "+ GadgetItemText( ListBox:TGadget , Number:Int )
	
End Function

Function ListBox1_GS( ListBox:TGadget , Number:Int , Extra:Object )
	DebugLog "ListBox ListBox1 single clicked an Item"	
End Function

Function ListBox1_GM( ListBox:TGadget , Number:Int , Extra:Object , Window:TGadget=Null )
	DebugLog "ListBox ListBox1 right clicked an Item"	
End Function


This isn't really broken as it is sending the correct events. The docs say...

EVENT_GADGETSELECT: An item has been selected, or the selection has been cleared.

EVENT_GADGETMENU: The user has right-clicked somewhere in the listbox.

Observe what happens when you right-click an item. The item you right-clicked is selected (highlighted), and so an EVENT_GADGETSELECT is emitted as the selection has changed.

If you want to trap mouse events, you should be using SetGadgetSensitivity():

SuperStrict
Import MaxGui.Drivers

AppTitle = "Mouse Events from Listboxes"

Local Window:TGadget = CreateWindow( AppTitle,261,106,141,143,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_STATUS|WINDOW_CLIENTCOORDS )
	Local ListBox:TGadget = CreateListBox(27,28,80,100,Window,Null)
		AddGadgetItem( ListBox,"Item1",GADGETITEM_DEFAULT )
		AddGadgetItem( ListBox,"Item2",GADGETITEM_NORMAL )
		
		SetGadgetSensitivity( ListBox, SENSITIZE_MOUSE )

AddHook EmitEventHook, eventHandler

Repeat;WaitSystem();Forever

Function eventHandler:Object( pID%, pData:Object, pContext:Object )
	Local pEvent:TEvent = TEvent(pData)
	If Not pEvent Then Return pData
	
	Select pEvent.id
		Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE;End
		Case EVENT_MOUSEUP, EVENT_MOUSEDOWN
			Print pEvent.ToString()
	EndSelect
EndFunction