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;
    },
    ...
};

TOP

TOP