GTK2 против GTK3: определить тему GTK3 в скрипте bash - PullRequest
0 голосов
/ 25 января 2019

Наше Java / SWT-приложение использует скрипт запуска bash в Linux.Нам нужно выяснить, следует ли запускать с GTK2 (более старая версия SWT) или с GTK3 (более новая версия SWT), поскольку последние версии SWT больше не поддерживают GTK2 и вызывают проблемы на старых системах без поддержки GTK3 или более старых версиях GTK3.,Особенно GTK3-темы (! = Adwaita или Ambiance) вызывают проблемы.

Если система поддерживает GTK3, как узнать (в скрипте bash), какая тема GTK3 настроена?Необязательно: выясните, какие темы GTK3 доступны в системе?

Обновление: крошечное приложение на C, похожее на этот ответ также подойдет.

1 Ответ

0 голосов
/ 27 января 2019

One-вкладыш:

Gtk3ThemeName=/tmp/$RANDOM$$ && gcc -o $Gtk3ThemeName -include stdio.h -include gtk/gtk.h -xc <(echo 'int main() {gchar *prop; gtk_init(0, 0); g_object_get(gtk_settings_get_default(), "gtk-theme-name", &prop, 0); return !printf("%s\n", prop);}') $(pkg-config gtk+-3.0 --cflags --libs 2>/dev/null) 2>/dev/null && Gtk3ThemeName="$($Gtk3ThemeName && rm $Gtk3ThemeName)" || unset Gtk3ThemeName

Несколько более читабельно:

Gtk3ThemeName=/tmp/$RANDOM$$
if gcc -o $Gtk3ThemeName -include stdio.h -include gtk/gtk.h -xc <(echo '
    int main() {
        gchar *prop;
        gtk_init(0, 0);
        g_object_get(gtk_settings_get_default(), "gtk-theme-name", &prop, 0);
        return !printf("%s\n", prop);
    }') $(pkg-config gtk+-3.0 --cflags --libs 2>/dev/null) 2>/dev/null; then
    Gtk3ThemeName="$($Gtk3ThemeName && rm $Gtk3ThemeName)"
else
    unset Gtk3ThemeName
fi

После этого вы можете просто echo "$Gtk3ThemeName" напечатать название темы.

Если не установлен GTK3 (или если gcc или pkg-config не удалось, или если /tmp/ не доступен для записи или защиты от запуска), переменная в итоге окажется пустой.

...