7

次のようなウィンドウをテストしています。

代替テキスト

タグをカードにドラッグすると、タグがカードにリンクされます。カードをタグにドラッグすることも同様です。

2枚のカードの間にタグをドロップしたり、2枚のタグの間にカードをドロップしたりしても意味がありません。Handle...DataReceived次のような関数では、これらの結果を無視できます。

if (dropPos != TreeViewDropPosition.IntoOrAfter &&
    dropPos != TreeViewDropPosition.IntoOrBefore)
    return;

ただし、ドラッグしても、ユーザーには次を挿入するオプションが表示されます。

代替テキスト

これを防ぐにはどうすればよいですか?

4

2 に答える 2

3

シグナルに接続しdrag-motion、デフォルトの動作を変更して、ドロップの前後を示さないようにする必要があります。

def _drag_motion(self, widget, context, x, y, etime):
    drag_info = widget.get_dest_row_at_pos(x, y)
    if not drag_info:
        return False
    path, pos = drag_info
    if pos == gtk.TREE_VIEW_DROP_BEFORE:
        widget.set_drag_dest_row(path, gtk.TREE_VIEW_DROP_INTO_OR_BEFORE)
    elif pos == gtk.TREE_VIEW_DROP_AFTER:
        widget.set_drag_dest_row(path, gtk.TREE_VIEW_DROP_INTO_OR_AFTER)
    context.drag_status(context.suggested_action, etime)
    return True
于 2010-02-06T05:38:46.397 に答える
1

タグとカードに異なるターゲットを定義でき、左側のウィジェットはタグを表すターゲットのみを受け入れます。Gtk.Drag.DestSetメソッドを使用します。多分次のようなものです:

        Gtk.Drag.DestSet (widget, DestDefaults.All,
                      new TargetEntry[1] { new TargetEntry ("MYAPP_TAGS", TargetFlags.App, 1) },
                      DragAction.Default);

宛先にモーションイベントを発行させようとしました:

        Gtk.Drag.DestSet (widget, DestDefaults.Motion,
                      new TargetEntry[1] { new TargetEntry ("MYAPP_TAGS", TargetFlags.App, 1) },
                      DragAction.Default);

理論的には、正しく理解すればうまくいくはずです。しかし、私はそれを発砲モーションイベントにすることができませんでした:(

于 2010-02-05T23:36:45.613 に答える