PyGTKでファイルマネージャからファイルアイコンをドラッグ・アンド・ドロップを受け取る(ファイルマネージャや環境による挙動の違いについて)
「PyGTKでファイルマネージャからファイルアイコンをドラッグ・アンド・ドロップを受け取る(概要と簡単な例)」の続き。前回の記事の最後に貼り付けたコードを実行し、GUIファイルマネージャからファイルやディレクトリのアイコンをD&Dして、端末に表示される情報を比較してみる。
以下、ディレクトリ/tmp/work/に
- ディレクトリdir
- ファイルtest.txt
- ファイルs p a c e.txt(途中に4回半角スペースを入れている)
- ファイル日本語.txt
を用意して、これらをまとめてウィンドウにD&Dしている。
表示しているのは「drag_data_received」シグナルのハンドラに渡される引数と、引数contextの一部メンバ変数、引数selectionのメンバ変数dataとなる。
xとyはドロップしたウィンドウ内の座標となっていて、infoはgtk.Widgetのdrag_dest_set()の中で指定するリストの中の値と同一のもの(今回のコードでは12345という値)が入っている。
GNU/Linux上のPyGTK
Nautilus
context: <gtk.gdk.DragContext object at 0x1596b90 (GdkDragContext at 0x169d070)> x: 66 y: 124 selection: <GtkSelectionData at 0x7ffff2517600> info: 12345 time: 361691165 action: <flags GDK_ACTION_COPY of type GdkDragAction> actions: <flags GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK of type GdkDragAction> suggested_action: <flags GDK_ACTION_COPY of type GdkDragAction> targets: ['x-special/gnome-icon-list', 'text/uri-list', 'UTF8_STRING', 'COMPOUND_TEXT', 'TEXT', 'STRING', 'text/plain;charset=utf-8', 'text/plain'] selection.data: [file:///tmp/work/dir file:///tmp/work/%E6%97%A5%E6%9C%AC%E8%AA%9E.txt file:///tmp/work/s%20p%20a%20c%20e.txt file:///tmp/work/test.txt ]
selection.dataではファイル名はURLエンコードされ、各ファイルの場所は「file://[ファイルの絶対パス]」の形で示されている。
xffm4
context: <gtk.gdk.DragContext object at 0x1596b90 (GdkDragContext at 0x169d230)> x: 30 y: 68 selection: <GtkSelectionData at 0x7ffff2517600> info: 12345 time: 361723502 action: <flags GDK_ACTION_COPY of type GdkDragAction> actions: <flags GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK of type GdkDragAction> suggested_action: <flags GDK_ACTION_COPY of type GdkDragAction> targets: ['text/uri-list', 'text/x-moz-url', 'text/plain', 'UTF8_STRING', 'STRING'] selection.data: [file:/tmp/work/test.txt file:/tmp/work/日本語.txt file:/tmp/work/dir file:/tmp/work/s p a c e.txt ]
selection.dataではファイル名はURLエンコードされていなかった。各ファイルの場所は「file:[ファイルの絶対パス]」の形で示されている。
Wine上のWindows版PyGTK
「Windows版PyGTKをWine環境にインストール」と「Wine環境にWindows版のPyGTKをインストールする作業を自動化」で環境を作成したWindows版PyGTKではファイルの場所が「file:///[ドライブ]:[ファイルの絶対パス]」となっている。
場合によってはファイルのパスが変な切れ方をしてしまうが、これはWine上での問題かもしれない。
(2009/3/21)Wine上のD&Dには
http://wiki.winehq.org/DragAndDrop
によると幾つかの種類があり、PyGTKアプリケーションへのドロップは動作するが、他の種類では動作しないもの(Windowsアプリケーションどうしなど)もあるようだ。
Nautilus
context: <gtk.gdk.DragContext object at 0xb55378 (GdkDragContext at 0x1acb00)> x: 281 y: 239 selection: <GtkSelectionData at 0x41f64c> info: 12345 time: 153150 action: <flags 0 of type GdkDragAction> actions: <flags GDK_ACTION_COPY of type GdkDragAction> suggested_action: <flags GDK_ACTION_COPY of type GdkDragAction> targets: ['text/uri-list'] selection.data: [file:///Z:/tmp/work/dir file:///Z:/tmp/work/%E6%97%A5%E6%9C%AC%E8%AA%9E.tZ:/tmp/work/s%20p%20a%20c%20e.txt file:///Z:/tmp/work/test.txt ]
xffm4
context: <gtk.gdk.DragContext object at 0xb55378 (GdkDragContext at 0x1acb38)> x: 285 y: 244 selection: <GtkSelectionData at 0x41f64c> info: 12345 time: 280784 action: <flags 0 of type GdkDragAction> actions: <flags GDK_ACTION_COPY of type GdkDragAction> suggested_action: <flags GDK_ACTION_COPY of type GdkDragAction> targets: ['text/uri-list'] selection.data: [file:///Z:/tmp/work/test.txt file:///Z:/tmp/work/%E6%97%A5%E6%9C%AC%E8%AA%9E.tZ:/tmp/work/dir file:///Z:/tmp/work/s%20p%20a%20c%20e.txt ]
関連記事:
- Windows版PyGTKをWine環境にインストール
- Wine環境にWindows版のPyGTKをインストールする作業を自動化
- Mandriva Linux 2009.0にxffm4をインストール
- PyGTKでファイルマネージャからファイルアイコンをドラッグ・アンド・ドロップを受け取る(概要と簡単な例)
- PyGTKでファイルマネージャからファイルアイコンをドラッグ・アンド・ドロップを受け取る(URIリストの加工と環境による違いの吸収)
使用したバージョン: