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

2

Решение

Методы перетаскивания для GtkTreeview, по-видимому, ограничены перетаскиванием внутри одного и того же виджета дерева. Используйте обычный gtk Drag and Drop между программами, например, см.
Учебное пособие по GTK + 2.0 TreeView

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]