在同一应用程序的实例之间拖放。 (GtkTreeView)

时间:2015-10-20 05:39:33

标签: c++ drag-and-drop gtk gtkmm gtktreeview

我正在尝试从GtkTreeView接收同一应用程序的实例之间的拖放内容。内容是指向对象的指针,我无法在目标应用程序树视图上触发接收事件。我只能在同一个树视图中接收拖动内容。这是代码部分:

...
vector<Gtk::TargetEntry> gtkTargetsDest, gtkTargetsSrc;
gtkTargetsDest.push_back(Gtk::TargetEntry(
  "SrcFile **pSrcFiles", Gtk::TargetFlags(0), 0));
gtkTargetsSrc.push_back(Gtk::TargetEntry(
   "SrcFile **pSrcFiles", Gtk::TargetFlags(0), 1));
_gtkTreeView.enable_model_drag_dest(gtkTargetsDest);
_gtkTreeView.enable_model_drag_source(gtkTargetsSrc);
...

void onGtkTreeViewDragDataReceived(
  const Glib::RefPtr<Gdk::DragContext> &pGdkDragContext, int x, int y,
  const Gtk::SelectionData &gtkSelData, guint info, guint time)
{
  if (info == 0) {
    SrcFile** pSrcFiles
      = (SrcFile**)gtkSelData.get_data();
    while (*pSrcFiles) {
      _ptrMFieldRef->add(*pSrcFiles); // add dropped src files
      ++pSrcFiles;
    }
  }
}

而不是Gtk::TargetFlags(0)我尝试了Gtk::TARGET_OTHER_APP,但这根本没有帮助。我得到了一个提示,这可以与剪贴板一起使用,但我不知道这应该如何工作,因为接收事件没有被触发......

1 个答案:

答案 0 :(得分:1)

GtkTreeview的拖放方法似乎仅限于在同一个树窗口小部件中拖动。在程序之间使用常规的gtk拖放,例如参见 Tutorial de GTK+ 2.0 TreeView

要将拖放限制为特定应用程序,可以设置/获取窗口小部件名称,可选择使用字符串中的PID,例如“myapp.tree1-PID”。