Переопределить install4j UnixLauncher свойство WM_CLASS - PullRequest
1 голос
/ 02 апреля 2019

Можно ли переопределить WM_CLASS, установленный install4j в средах Linux?

В настоящий момент выполнение

xprop WM_CLASS 

в моем приложении, развернутом с помощью install4j, всегда возвращает com-install4j-runtime-launcher-UnixLauncher,Это проблема при создании правильных файлов .desktop, я не хочу группировать все приложения, развернутые с помощью install4j.

Я собираю , этот вопрос касается аналогичной проблемы.Тем не менее, ответ не работает для меня.Упомянутая переменная компилятора sys.ext.windowClass не документирована нигде, которую я могу найти, и, насколько я вижу, она ничего не делает.

1 Ответ

0 голосов
/ 03 апреля 2019

В Linux диспетчеры окон группируют окна и назначают правильные значки с помощью свойства WM_CLASS.

Это свойство можно проверить с помощью xprop :

xprop WM_CLASS

Чтобы указать, на какой WM_CLASS должен влиять файл .desktop, вы можете использовать свойство StartupWMClass в файле рабочего стола:

StartupWMClass=<my-applications-wm-class>

Проблема с install4j заключается в том, что все развернутые приложения будут использовать com-install4j-runtime-launcher-UnixLauncher какWM_CLASS.

Как Инго Кегель упоминает в своем теперь отредактированном ответе на этот вопрос , это можно обойти, если явно установить свойство окна WM_CLASS в приложении Java с помощью следующего кода:

String wmClass = ...;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class<?> toolkitClass = toolkit.getClass();

if (Objects.equals("sun.awt.X11.XToolkit", toolkitClass.getName())) {

    Field awtAppClassName = toolkitClass.getDeclaredField("awtAppClassName");
    awtAppClassName.setAccessible(true);
    awtAppClassName.set(null, wmClass);
}

Если у вас есть предварительные диалоги при запуске приложения (например, для выбора рабочей области), важно, чтобы вы делали это для всех диалогов по отдельности.

...