Рабочие пространства ака рабочие столы в Java
Был ли достигнут какой-либо прогресс в обнаружении и / или настройке рабочего стола / рабочего пространства, в котором находится мое приложение (конечно, под Linux/Solaris)?
2 ответа
Обнаружение / настройка рабочего стола в современных оконных менеджерах осуществляется через чтение / настройку _NET_WM_DESKTOP
свойство из спецификации EWMH ( http://packages.debian.org/search?keywords=proftpd-basic&searchon=names&suite=all§ion=all)
Мне не известны какие-либо аккуратно инкапсулированные API, которые предоставляют эту функциональность, но Google обнаружил http://code.google.com/p/ewm/source/browse/trinity/fusion-X11/trunk/src/main/java/org/fusion/x11/ewmh/NetFrameExtents.java который может быть началом.
Я - автор проекта, связанного с "NetFrmeExtents.java"
Вот мой ответ:
Это трудно сделать в чистом Java, если не невозможно, если уже не реализован Swing / AWT. Самый простой (и единственный?) Способ - использовать JNI и делать это через xlib/xcb. Но можно делать то, что вы просите.
Существует соглашение для рабочих столов под названием EWMH, которое может помочь вам с тем, что вы хотите. Основной порядок шагов, который вам нужен:
- Получить идентификатор окна вашего приложения. Для этого Google, как получить дескриптор окна / идентификатор окна в AWT.
- Далее вам нужно прочитать несколько "свойств", определенных атомами. Если вы не знаете, что это за Google, как прочитать свойство из окна в xlib/xcb.
- В EWMH есть свойство, которое перечисляет все виртуальные рабочие столы, определенные оконным менеджером. См. http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html
- Задайте для свойства свойство в окне вашего приложения, см. По http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html номер виртуального рабочего стола, на котором вы хотите, чтобы ваше приложение было включено.
Если вы все сделали правильно и оконный менеджер поддерживает ewmh (большинство так и делает), это должно сработать.