続:NSTableViewのダブルクリック

XO: NSTableViewのダブルクリック

今回はとりあえず,NSTableViewのダブルクリック問題に気が付かなかったことにして,次に進みます。

次に進んだんだけど,気付く気付く。

とにかく,NSTableViewのmouseDown:実装が奇妙な動きをするので,ここは一つオーバーライドするか,と挑んだのはいいんだけど,これが厳しかった。

mouseDown:をオーバーライドしても,クリックされたセルに値を始め何から何までちゃんと設定されてなくて,そのままtrackMouse:inRect:ofView:untilMouseUp:を呼んでもダメ。
どうも中を追ってくと,_NXSetCellParamというのが現われて,これが各種の設定を行なっているらしい。

紆余曲折を経て,最終的にたどり着いた回避策は,

「mouseDown:の引数でもらったマウスダウンイベントを,クリック数を1にして複製し,オリジナルのmouseDown:に渡してやる」

だった。

こんな感じ。


- (void)mouseDown:(NSEvent*)inEvent
{
NSEvent* event = [NSEvent mouseEventWithType:[inEvent type]
location:[inEvent locationInWindow]
modifierFlags:[inEvent modifierFlags]
timestamp:[inEvent timestamp]
windowNumber:[inEvent windowNumber]
context:[inEvent context]
eventNumber:[inEvent eventNumber]
clickCount:1
pressure:[inEvent pressure]];
[super mouseDown:event];
}

なんだかね。

あと,編集可能なセルの場合はもうちょっと工夫が必要かも。