« ロッカージェスチャの実装 Part 2 | ダイアログから開いたモーダルダイアログが Linux ではモーダルでない » |
Custom Tree View でドラッグ&ドロップ時に固まる
Custom Tree Views を使って階層構造がない単純なデータを表示するツリーを作成し、ツリーアイテムのドラッグ&ドロップによる並び替えを実装しようとしたところ、ドロップ時に Firefox が固まる問題が発生。
原因は nsITreeView#getParentIndex で「return -1;」していなかったことであることに気付くまで、3時間くらい無駄にした。
CustomTreeView.prototype = { ... getParentIndex: function(rowIndex) { return -1; }, ... };
また、 nsDragAndDrop.js を使ってドラッグしたときの転送データを生成する際、データフレーバに「text/plain」とすると、なぜか実際に転送データの中身が文字化けしたようなデータになってしまうという問題にも悩まされた。これは、データフレーバを「text/unicode」にすることで解決した。
gDragAndDropObserver = { ... onDragStart: function(aEvent, aXferData, aDragAction) { aXferData.data = new TransferData(); aXferData.data.addDataForFlavour("text/unicode", "Hello!"); aDragAction.action = Ci.nsIDragService.DRAGDROP_ACTION_MOVE; }, ... };