2015-10-20 9 views
2

Я пытаюсь получить перетаскивание содержимого между экземплярами одного и того же приложения из 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

Методы перетаскивания для GtkTreeview, по-видимому, ограничены перемещением внутри тот же виджет дерева. Используйте регулярные GTK перетаскивание между программами, для примера см Tutorial de GTK+ 2.0 TreeView

Чтобы ограничить перетаскивание для конкретного приложения можно установить/получить имя виджета, при необходимости с использованием PID в строке, что-то вроде «MyApp .tree1-PID».