Вот текущий доступный код оболочки для DND между окнами: https://github.com/GNOME/gnome-shell/blob/master/js/ui/xdndHandler.js С ним практически ничего нельзя сделать.
В Mutter есть более одной процедуры для обработки перетаскивания в окне, потому что есть одна реализация для окон X11 и другая реализация для окон Wayland.
Честно говоря, я не знаю, есть ли путь на Wayland и как он будет.
Я могу сказать вам, что в gnome-shell (точнее, в Mutter) нет полной реализации этой возможности на X11. Большинство из них, которые вы можете знать, это когда происходит перетаскивание из окна в оболочку и положение перетаскиваемого актера, но оболочка не предоставляет никакого API для создания внутреннего перетаскивания из оболочки в конкретное окно.
Перетаскивание оболочки, которое вы можете полностью использовать, это только внутреннее (просто оболочка) перетаскивание из оболочки и в нее (только для агентов беспорядка), а не внешнее между разными окнами.
В X11 процесс перетаскивания происходит только между окнами. Одно окно предоставляет перетаскиваемый объект и информацию, связанную с этим объектом. Другое окно (может быть то же самое) примет удаление объекта с учетом информации, предоставленной первым окном.
Поскольку в оболочке нет возможности установить требуемую информацию в целевом окне, и, как и ваш графический интерфейс, находится внутри большого верхнего окна (окно, представляющее глобальную стадию оболочки: https://github.com/GNOME/бормотание/BLOB/6c18bae83cd27a7397a1ed0c1c0c81b282f1b44e/SRC/компоновщик/мета-dnd.c#L152) и, поскольку у вас нет доступа к этому большому внутреннему окну, вы, наконец, ничего не можете сделать для прямого взаимодействия с другими окнами.
Здесь (https://github.com/swayfreeda/blender-2.77a/tree/5969d704f44952ea8cbecba2ba4150fb4a48e6de/extern/xdnd) вы можете найти полную реализацию перетаскивания на X11, вам нужно будет изменить код, чтобы адаптировать его к рабочему процессу Mutter, а затем добавить этот код в Mutter. После этого у вас будет поддержка, но вам нужно будет создать соответствующую процедуру, чтобы затем вызывать функции, предоставлять информацию и получать полезные события из оболочки в окно, чтобы можно было окончательно управлять им в gjs, но это будет только для X11, не для Wayland. Я полагаю, вам нужно будет сделать что-то подобное, если вы хотите получить поддержку на Wayland.
Хороший вид.
person
lestcape
schedule
19.01.2018