【问题标题】:workspaces aka desktops in JavaJava中的工作区又名桌面
【发布时间】:2011-09-03 23:14:57
【问题描述】:

在发现和/或设置我的应用程序所在的桌面/工作区方面是否有任何进展(当然是在 Linux/Solaris 下)?

【问题讨论】:

    标签: java desktop x11 workspace ewmh


    【解决方案1】:

    在现代窗口管理器上发现/设置桌面是通过读取/设置 EWMH 规范 (http://packages.debian.org/search?keywords=proftpd-basic&searchon=names&suite=all&section=all) 中的 _NET_WM_DESKTOP 属性来完成的

    我不知道有任何巧妙封装的 API 公开了此功能,但 google 找到了 http://code.google.com/p/ewm/source/browse/trinity/fusion-X11/trunk/src/main/java/org/fusion/x11/ewmh/NetFrameExtents.java,这可能是一个开始。

    【讨论】:

    • 我通过 KD3 KWin 找到了一种使用窗口 ID 的方法,但我发现同样难以发现窗口 ID。如何获得 _NET_VM_DESKTOP 属性?
    • 我最终通过 JIN 从 Xlib 中获取窗口 ID,然后进入 KWIN 来操作 Frame 的桌面设置。
    【解决方案2】:

    我是由“NetFrmeExtents.java”链接的项目的作者

    这是我的答案:

    如果不是不可能的话,在纯 java 中很难做到,除非 swing/awt 现在已经实现了。最直接(也是唯一?)的方法是使用 JNI 并通过 xlib/xcb 来完成。但可以按照你的要求去做。

    有一个名为 EWMH 的桌面约定可以帮助您实现所需。 您需要执行的基本步骤顺序是:

    1. 获取应用程序的窗口 ID。为此,Google 如何在 awt 中检索窗口句柄/窗口 ID。
    2. 接下来您需要阅读由原子定义的几个“属性”。如果你不知道这是什么,谷歌如何从 xlib/xcb 中的窗口读取属性。
    3. 在 EWMH 中有一个属性列出了由窗口管理器定义的所有虚拟桌面。 见http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2449367
    4. 将属性设置为应用程序窗口上的属性,请参阅http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2507080 为您希望应用程序所在的虚拟桌面的编号。

    如果你做的一切都是正确的,并且窗口管理器支持 ewmh(大多数都支持)它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2014-10-22
      • 2013-01-17
      • 1970-01-01
      • 2011-01-25
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多