def _dnd_data_received(self, treeview, context, x, y, selection, targetType, time): model = treeview.get_model() data = selection.get_data() drop_info = treeview.get_dest_row_at_pos(x, y) if drop_info: path, position = drop_info iterator = model.get_iter(path) if not os.path.isdir(model[iterator][1]): iterator = model.iter_parent(iterator) dest_path = model[iterator][1] # Only move on valid move if self.can_move_file(data, dest_path): new_filepath = os.path.join(dest_path, os.path.basename(data)) if os.path.exists(new_filepath): # Ask user to overwrite or rename new file if self.overwrite_file_dialog(): model.append(iterator, [os.path.basename(data), new_filepath]) Util.cp_file(data, new_filepath) else: text = self.rename_file_dialog() if text is not None and not os.path.exists(os.path.join(dest_path, text)): new_filepath = os.path.join(dest_path, text) model.append(iterator, [text, new_filepath]) Util.cp_file(data, new_filepath) else: new_filepath = os.path.join(dest_path, os.path.basename(data)) model.append(iterator, [os.path.basename(data), new_filepath]) Util.cp_file(data, new_filepath) # update treeview treepath = model.get_path(iterator) self._treeview.collapse_row(treepath) self._treeview.expand_to_path(treepath) if Gdk.DragAction.MOVE == context.get_actions(): context.finish(True, True, etime) return