void Dockable::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time) { if (selection_data.get_length() >= 0 && selection_data.get_format() == 8 && selection_data.get_data_type() == "SYNFIG_DOCK") { Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data()))); DockBook *parent = dynamic_cast<DockBook*>(get_parent()); DockBook *dockable_parent = dynamic_cast<DockBook*>(dockable.get_parent()); if (parent) { if (dockable_parent != parent) parent->add(dockable,parent->page_num(*this)); else parent->reorder_child(dockable,parent->page_num(*this)); dockable.present(); context->drag_finish(true, false, time); App::dock_manager->update_window_titles(); return; } } context->drag_finish(false, false, time); }
void TestDnDWindow::on_label_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time) { if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8)) { std::cout << "Received \"" << selection_data.get_data_as_string() << "\" in label " << std::endl; } context->drag_finish(false, false, time); }
void DockDialog::drop_on_append(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time) { if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8)) { Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data()))); append_dock_book()->add(dockable); context->drag_finish(true, false, time); return; } context->drag_finish(false, false, time); }
void Toolbox::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int /*x*/, int /*y*/, const Gtk::SelectionData& selection_data_, guint /*info*/, guint time) { // We will make this true once we have a solid drop bool success(false); if ((selection_data_.get_length() >= 0) && (selection_data_.get_format() == 8)) { synfig::String selection_data((gchar *)(selection_data_.get_data())); // For some reason, GTK hands us a list of URLs separated // by not only Carriage-Returns, but also Line-Feeds. // Line-Feeds will mess us up. Remove all the line-feeds. while(selection_data.find_first_of('\r')!=synfig::String::npos) selection_data.erase(selection_data.begin()+selection_data.find_first_of('\r')); std::stringstream stream(selection_data); while(stream) { synfig::String filename,URI; getline(stream,filename); // If we don't have a filename, move on. if(filename.empty()) continue; // Make sure this URL is of the "file://" type. URI=String(filename.begin(),filename.begin()+sizeof("file://")-1); if(URI!="file://") { synfig::warning("Unknown URI (%s) in \"%s\"",URI.c_str(),filename.c_str()); continue; } // Strip the "file://" part from the filename filename=synfig::String(filename.begin()+sizeof("file://")-1,filename.end()); synfig::info("Attempting to open "+filename); if(App::open(filename)) success=true; else synfig::error("Drop failed: Unable to open "+filename); } } else synfig::error("Drop failed: bad selection data"); // Finish the drag context->drag_finish(success, false, time); }
void DockBook::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time) { if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8)) { Dockable& dockable(**reinterpret_cast<Dockable**>(const_cast<guint8*>(selection_data.get_data()))); if(dockable.get_parent()!=this) add(dockable); dockable.present(); context->drag_finish(true, false, time); return; } context->drag_finish(false, false, time); }
void Gui_MyWindow::on_dropped_file(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time){ std::vector<std::string> paths; DEV_INFOS("D"); if ((selection_data.get_length() >= 0) && (selection_data.get_format() == 8)){ std::vector<Glib::ustring> file_list; file_list = selection_data.get_uris(); for (auto &str: file_list){ paths.push_back(str); } context->drag_finish(true, false, time); } else context->drag_finish(false, false, time); m_signal_drag_and_drop.emit(paths); }
void window_main::file_drag_data_received( const Glib::RefPtr<Gdk::DragContext> & context, //info about drag (available on source and dest) const int x, //x-coord of drop const int y, //y-coord of drop const Gtk::SelectionData & selection_data, //data dropped const guint info, //type of info dropped const guint time) //time stamp of when drop happened { //DEBUG, dragging file on to window does not work on windows, not sure why if(selection_data.get_length() >= 0 && selection_data.get_format() == 8){ //this will look like file:///home/foo/bar.txt std::string URI = selection_data.get_data_as_string(); if(URI.size() > 7){ std::string path = URI.substr(7); //get rid of newline on the end boost::trim(path); p2p::load_file(path); } } //tell other end we're done with drag and drop so it can free resources context->drag_finish(true, true, time); }