
Ubuntu日本語フォーラム

ログインしていません。
半年ほど前からGTK+でプログラミングを始めました。
現在、ペイントソフトを作成中でレイヤーの入れ替えに
ドラッグ&ドロップを利用しようとしているのですが、
"drag-motion"にコネクトした関数が
呼び出されないケースが頻発して困っております。
状況説明のためにYoutubeに投稿してみました。
http://www.youtube.com/watch?v=-qlgBKj8qAw
30秒前後からドラッグを始めた場合は
drag-motionに登録した関数が呼び出され、
マウスの座標が出力されているのに対して
(segmentation faultになってるのは気にしないで下さい…)
保存したファイルから開いた場合は
ドラッグを始めても関数が呼び出されず、
座標が出力されません。
また、
"gtk_selection_convertion != GDK_NONE is failed"
の警告がどのような理由で呼び出されているのかもわからない状況です。
現在はdrag-endの関数で座標を取得してレイヤーの
入れ替え自体はできるようにしているのですが、
drag-motionが呼び出されないと
レイヤーの移動先を強調することができません。
どなたかアドバイスはないでしょうか。
よろしくお願い致します。
オフライン
根本的な解決には至っていませんが、進捗があったので報告します。
「gtk+」、「box」、「reorder」、「drag」のキーワードで調べたところ
Google Chromeのソースコードが検索にヒット。
そこではドラッグをスムーズにするためにウィジェットを
リサイズしているようでしたが、
どのようなサイズにどのタイミングでするのかは
Chromeのソースコードを深く読み進めないと判断できないと考え、
一旦中断。
今度は「drag」、「smoother」で検索。
Timoutを設定してカーソルの位置を調べるとの記述を発見。
とりあえずはこれで座標の取得はできそうです。
ただ、アイコンの表示がDnDに失敗しているような
表示になっているため、表示しない方向になりそうです。
GTK+3.0にはドラッグをスムーズにするようなことが
書かれていたと思うので、そちらに切り替えれば
解決するかもしれませんが、
Visual Studioをメインに開発しているため、
しばらくは2.0に留まりそうです。
長文失礼致しました。
オフライン