Help in GUI issue - lose the focus of a drop-down list when clicked somewhere else.

I’m working on an inventory system. When the player right-clicks an item, it displays some dropdown list of options, “Use”, “Equip”, etc.
Currently the inventory is a grid of buttons. When I right click on a button, the dropdown list appears and I start to use labels instead of actual buttons so that it appears as if the buttons are disabled. Now the issue is that, I want the dropdown to disappear when the player clicks somewhere else other than the list’s buttons. Here’s the dropdown list code - they’re just a bunch of buttons wrapped with a box:

public int Draw()
{
	if (entries == null)
	{
		Debug.Log("Something wrong with entries...");
		return -1;
	}

	float totalHeight = GetTotalEntriesHeight();
	float x_offset = spaceBetweenButtons * 4;
	float y_offset = spaceBetweenButtons * 4;
 
	GUI.Box(new Rect(position.x, position.y, entryDimensions.x + x_offset, totalHeight + y_offset), "", defaultMenuBackgoundStyle);

	int entryIndex = -1;
	for (int i = 0; i < entries.Count; i++)
	{
		// offsetting x by spaceBetweenButtons and y by the height of the entry * i + the space between buttons
		bool entryButtonPressed = GUI.Button(new Rect(position.x + x_offset / 2, position.y + i * entryDimensions.y + y_offset / 2, entryDimensions.x, entryDimensions.y), entries[i], defaultEntryStyle);

		if (entryButtonPressed) 
		{
			entryIndex = i; 
			shouldBeShown = false;
			break;
		}
	}
	return entryIndex;
}

I tried something like this:

//...
if(Input.GetMouseButtonDown(0) // and even GetMouseButton
{
        shouldBeShown = false;
	if (entryButtonPressed) 
	{
		entryIndex = i; 	
		break;
	}
//...

Now this does hide the list when the player clicks on somewhere else, but for some reason the entryButtonPressed is always false :frowning:
and I get some strange behavior when the player clicks on a button that’s directly above the item. So this is definitely not working, also tried repositioning this check in more than one place, all showed the same issue…

I recently knew there’s something called a GUIUtility but I don’t know how to use it, any help would be appreciated, thanks in advance :slight_smile:

OK I solved the issue my self - just had to check if the mouse is within the list box area, if not, check for left/right clicks, if there was any, just hide the list, easy enough!

// draw stuff...
if (!IsMouseContainedWithinBoxArea())
{
    if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1))
    {
        shouldBeShown = false; 
    }
}
// ...
private bool IsMouseContainedWithinBoxArea()
{
    Vector2 mousePosition_InGUI = GUIUtility.ScreenToGUIPoint(new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y));
    bool contained_horizontally = mousePosition_InGUI.x > boxRect.x  mousePosition_InGUI.x < boxRect.x + boxRect.width;
    bool contained_verticaally  = mousePosition_InGUI.y > boxRect.y  mousePosition_InGUI.y < boxRect.y + boxRect.height;
    return contained_horizontally  contained_verticaally;
}