我正在尝试从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 >kSelData, 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
,但这根本没有帮助。我得到了一个提示,这可以与剪贴板一起使用,但我不知道这应该如何工作,因为接收事件没有被触发......
答案 0 :(得分:1)
GtkTreeview的拖放方法似乎仅限于在同一个树窗口小部件中拖动。在程序之间使用常规的gtk拖放,例如参见 Tutorial de GTK+ 2.0 TreeView
要将拖放限制为特定应用程序,可以设置/获取窗口小部件名称,可选择使用字符串中的PID,例如“myapp.tree1-PID”。