首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gnome-shell-extensions拖放

gnome-shell-extensions拖放
EN

Stack Overflow用户
提问于 2017-10-09 20:55:31
回答 1查看 480关注 0票数 0

在尝试为我正在编写的gnome-shell-extension添加D&D支持时,我遇到了一些麻烦。我可以在任何打开的窗口中创建拖放目标,但这就是我所能做到的全部。

我不能区分窗户。我试着使用global.get_stage().get_actor_at_pos(Clutter.PickMode.ALL, x, y).get_parent().get_parent().get_meta_window().get_wm_class(),但是有一半的时间它给了我错误的窗口,并且时不时地返回null。此外,我不确定如何将信息放入目标中。

我所要做的就是将文件URI放入浏览器窗口,或将文件放入文件管理器。

这在gnome-shell-extensions中是可能的吗?我将如何实现它?欢迎任何建议!

EN

回答 1

Stack Overflow用户

发布于 2018-01-19 14:39:59

下面是当前可用的关于窗口间DND的shell代码:https://github.com/GNOME/gnome-shell/blob/master/js/ui/xdndHandler.js,您几乎不能使用它做任何事情。

在Mutter中,有多个过程来处理窗口中的拖放,因为有一个实现用于X11-windows,另一个实现用于Wayland-windows。

老实说,我不知道Wayland上有没有办法,也不知道会怎样。

我可以告诉你,在gnome-shell (具体地说是Mutter)中,没有在X11上完全实现这一功能。大多数人都知道,如果从窗口到shell和被拖动角色的位置发生了拖放,但是shell没有提供任何api来创建从shell到特定窗口的内部拖放。

您可以充分利用的shell拖放,它只是内部(只是shell)与shell之间的拖放(仅适用于杂乱的角色),而不是不同窗口之间的外部拖放。

在X11中,拖放过程仅发生在窗口之间。一个窗口提供被拖动的对象及其与该对象相关联的信息。考虑到第一个窗口提供的信息,另一个窗口(可能是相同的)将接受对象的放置。

由于在shell中无法将所需的信息设置为目标窗口,并且您的图形用户界面位于一个大的顶部窗口(代表shell全局舞台的窗口:https://github.com/GNOME/mutter/blob/6c18bae83cd27a7397a1ed0c1c0c81b282f1b44e/src/compositor/meta-dnd.c#L152)中,并且您无法访问这个大的内部窗口,最后您无法执行任何操作来直接与其他窗口交互。

在这里(https://github.com/swayfreeda/blender-2.77a/tree/5969d704f44952ea8cbecba2ba4150fb4a48e6de/extern/xdnd)你可以在X11上找到拖放的完整实现,你需要修改代码以适应Mutter工作流程,然后将此代码添加到Mutter中。在此之后,您将获得支持,但您将需要创建相应的过程,然后调用功能,提供信息,并接收从外壳到窗口的完整事件,以便最终可以在gjs中控制它,但它将只用于X11,而不是Wayland。我想如果你想在Wayland上获得支持,你也需要做一些类似的事情。

锁得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46647038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档