void VariablesView::TreeTableCellMouseDown(TreeTable* table, const TreeTablePath& path, int32 columnIndex, BPoint screenWhere, uint32 buttons) { if ((buttons & B_SECONDARY_MOUSE_BUTTON) == 0) return; _FinishContextMenu(true); ModelNode* node = (ModelNode*)fVariableTableModel->NodeForPath(path); if (node == NULL) return; TableCellValueRenderer* cellRenderer = node->TableCellRenderer(); if (cellRenderer == NULL) return; Settings* settings = cellRenderer->GetSettings(); if (settings == NULL) return; SettingsMenu* settingsMenu; status_t error = node->GetValueHandler()->CreateTableCellValueSettingsMenu( node->GetValue(), settings, settingsMenu); BReference<SettingsMenu> settingsMenuReference(settingsMenu, true); if (error != B_OK) return; TableCellContextMenuTracker* tracker = new(std::nothrow) TableCellContextMenuTracker(node, Looper(), this); BReference<TableCellContextMenuTracker> trackerReference(tracker); if (tracker == NULL || tracker->Init(settings, settingsMenu) != B_OK) return; fTableCellContextMenuTracker = trackerReference.Detach(); fTableCellContextMenuTracker->ShowMenu(screenWhere); }