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


person Sanane Lan    schedule 20.10.2015    source источник


Ответы (1)


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

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

person Wiley    schedule 22.05.2016