def on_entry_drop_targets_drag_data_received(self, entry, context, x, y, selection_data, info, timestamp): if not Gtk.targets_include_uri(context.targets): return uris = drop_get_uris(selection_data) if not uris: return if entry.get_text(): mimes = [entry.get_text()] else: mimes = [] for uri in uris: try: mime = Gio.content_type_guess(uri) except: mime = None if mime: mimes.append(mime) entry.set_text(', '.join(mimes)) self.on_entry_drop_targets_focus_out(entry, None) context.finish(True, False, timestamp) entry.stop_emission('drag_data_received')
def on_drag_data_received(self, view, context, x, y, data, info, timestamp): if not (Gtk.targets_include_uri(context.list_targets()) and data.data and self.in_bounds(x, y)): return if not self.view.get_editable(): return uris = drop_get_uris(data) uris.reverse() stop = False for uri in uris: try: mime = Gio.content_type_guess(uri) except: mime = None if not mime: continue snippets = Library().from_drop_target(mime, self.language_id) if snippets: stop = True self.apply_uri_snippet(snippets[0], mime, uri) if stop: context.finish(True, False, timestamp) view.stop_emission('drag-data-received') view.get_toplevel().present() view.grab_focus()
def on_tree_view_drag_motion(self, widget, context, x, y, timestamp): # Return False if we are dragging if self.dragging: return False # Check uri target if not Gtk.targets_include_uri(context.targets): return False # Check action action = None if context.suggested_action == Gdk.DragAction.COPY: action = Gdk.DragAction.COPY else: for act in context.actions: if act == Gdk.DragAction.COPY: action = Gdk.DragAction.COPY break if action == Gdk.DragAction.COPY: context.drag_status(Gdk.DragAction.COPY, timestamp) return True else: return False