Как программно запретить “Overlay scrollbar” в Ubuntu

472
06 февраля 2017, 15:46

Я пытаюсь портировать на Ubuntu свое приложение, построенное на SWT, и столкнулся с проблемой с т. наз. "overlay scrollbars". Когда программа работает из-под Eclipse, всё нормально, но когда она запускается из JAR, скроллбары становятся "overlay scrollbars" - превращаются в тонкие оранжевые полоски. При этом события от скроллбаров тоже меняются (видимо, какие-то другие значения в stateMask или в detail), и программа перестает их обрабатывать (игнорирует). Для моей программы такие скроллбары категорически не подходят (даже если бы я разобрался с событиями), мне нужны традиционные скроллбары и нужно самому особым образом обрабатывать их события.

Исправить это поведение легко - достаточно добавить export LIBOVERLAY_SCROLLBAR=0 в ~/.profile, но это негодный вариант - мне нужно, чтобы любой пользователь мог запустить программу, просто ткнув мышкой по JAR-файлу, без необходимости делать какие-то специальные настройки в системе, поэтому я ищу способ сделать то же самое из своего программного кода. Я новичок в программировании для Linux, и, видимо, плохо понимаю, как можно решать подобные задачи программно. Пробовал в своем коде перед загрузкой SWT выполнить

 System.setProperty("LIBOVERLAY_SCROLLBAR", "0"); 

и

 new ProcessBuilder("export LIBOVERLAY_SCROLLBAR=0").start();

но ни то, ни другое эффекта не дает. При этом установка переменной SWT_GTK3=0 таким вот образом

 System.setProperty("SWT_GTK3","0"); 

очевидно, срабатывает, т. е. дает ожидаемый эффект. Возможно, дело в том, что LIBOVERLAY_SCROLLBAR срабатывает только при входе пользователя, а SWT_GTK3 - в любой момент, лишь бы была уже установлена к моменту загрузки SWT.

Как можно побороть эти "overlay scrollbars" из программного кода? P.S. Работающие решения для других языков, возможно, помогут найти решение и для JAVA - пробема не JAVA-специфическая.

READ ALSO
Оценка кода своей реализации TreeSet

Оценка кода своей реализации TreeSet

Дали задание создать свою реализацию TreeSet, в котором должны быть методы add(E e) и List<E> get()

430
Медленный выбор item в RecyclerView

Медленный выбор item в RecyclerView

Есть RecyclerView в виде сетки из квадратовНужно реализовать режим выбора квадрата, то есть при выборе другого квадрата, подсветка у прежнего должна...

500
Изменить код адаптера ListView на RecyclerView

Изменить код адаптера ListView на RecyclerView

Добрый деньНаписал приложение в котором есть ListView и написал для нее адаптер

552