def _drag_data_received_cb(self, widget, context, x, y, selection, info, t): if "application/x-color" not in context.targets: return False color = RGBColor.new_from_drag_data(selection.data) target_index = self.get_index_at_pos(x, y) source_widget = context.get_source_widget() if self is source_widget: # Move/copy assert self._current_index is not None self._palette.move(self._current_index, target_index) else: if target_index is None: # Append if the drop wasn't over a swatch target_index = len(self._palette) else: # Insert before populated swatches, or overwrite empties if self._palette.get_color(target_index) is None: self._palette.pop(target_index) self._palette.insert(target_index, color) self._call_palette_observers() self.update_layout() self.queue_draw() self._drag_insertion_index = None context.finish(True, True, t) self.set_managed_color(color) self.set_current_index(target_index)
def drag_data_received_cb(self, widget, context, x, y, selection, info, t): if "application/x-color" not in map(str, context.list_targets()): return False data = selection.get_data() data_type = selection.get_data_type() fmt = selection.get_format() logger.debug("drag-data-received: got type=%r", data_type) logger.debug("drag-data-received: got fmt=%r", fmt) logger.debug("drag-data-received: got data=%r len=%r", data, len(data)) color = RGBColor.new_from_drag_data(data) target_index = self.get_index_at_pos(x, y) mgr = self.get_color_manager() if Gtk.drag_get_source_widget(context) is self: # Move/copy current_index = mgr.palette.match_position logger.debug("Move/copy %r -> %r", current_index, target_index) assert current_index is not None mgr.palette.reposition(current_index, target_index) else: if target_index is None: # Append if the drop wasn't over a swatch target_index = len(mgr.palette) else: # Insert before populated swatches, or overwrite empties if mgr.palette.get_color(target_index) is None: mgr.palette.pop(target_index) mgr.palette.insert(target_index, color) self.queue_draw() self._drag_insertion_index = None context.finish(True, True, t) self.set_managed_color(color) mgr.palette.set_match_position(target_index)