I’m building a custom TreeView and I have two event listeners for ContextClicked (OnContextClicked) and ContextClickedItem (OnContextClickedItem)
ContextClicked is only supposed to get called when clicking outside any items *(Unity - Scripting API: IMGUI.Controls.TreeView.ContextClicked), however, it is getting called at the same time as OnContextClickedItem when right-clicking a row.
Related event dispatcher code (in class which extends TreeView):
public delegate void selectionDelegate(ScriptableObject[] selection);
public selectionDelegate OnContextClickedItem;
public Action OnContextClicked;
private ScriptableObject[] GetSelectedObjects(IList<int> selectedIds) {
return selectedIds.Select(id => m_dataModel.GetRowByID(id).targetObject as ScriptableObject).ToArray();
}
protected override void ContextClicked() {
base.ContextClicked();
if (OnContextClicked != null) {
OnContextClicked();
}
}
protected override void ContextClickedItem(int id) {
base.ContextClickedItem(id);
if (OnContextClickedItem != null) {
OnContextClickedItem(GetSelectedObjects(GetSelection()));
}
}
Event listener
void init() {
m_ModelsListView.OnContextClickedItem += modelContextClickedItem;
m_ModelsListView.OnContextClicked += modelContextClicked;
}
void modelContextClickedItem(ScriptableObject[] selection) {
Debug.Log("contextItem");
}
void modelContextClicked() {
Debug.Log("context");
}
When clicking outside a row, I get “context” printed. When I click on a row, I get “contextItem” and “context” printed.