Como o meu tema selecionado é comunicado ao gtk?

2

Relacionado a Onde o tema padrão do Gtk + é salvo

Estou usando a área de trabalho do Mate. Vejo que minhas configurações de Aparência são salvas em gsettings:

$ gsettings get org.mate.interface gtk-theme
'TraditionalOk'
$ gsettings get org.mate.interface font-name
'Ubuntu 11'
$ gsettings get org.mate.font-rendering dpi 
173.0

Se eu escrever um programa gtk hello-world simples e vinculá-lo apenas a libgtk, sem bibliotecas de mate ou gnome ou desktop, ele funciona. Exibe a aparência selecionada. Tenho certeza de que "org.mate.interface" não está codificado no libgtk. E eu diria que "gsettings" não é codificado na libgtk. Então, como fica minha configuração? Variável de ambiente, dotfile, propriedade do servidor X, o que?

    
por Sal Valente 18.04.2018 / 07:17

1 resposta

1

And I'd assume that "gsettings" is not hardcoded into libgtk.

Essa é uma suposição ruim, já que o GSettings é o armazenamento de configuração principal para a maioria dos programas GNOME e usado para recuperar o nome do tema no GTK 3 sob Wayland. Especificamente, o gdkdisplay-wayland usa gtk-theme no org.gnome.desktop.interface schema.

No X11, no entanto, o GTK usa o protocolo XSETTINGS , em que um daemon específico do DE é separado obtém várias configurações de onde quiser e republica-as em um formato padrão usando o mecanismo de seleções do X11.

On startup, each client that should identify the settings window by calling XGetSelectionOwner() for the _XSETTINGS_S[N] selection and select for notification on the settings window by calling XSelectInput() with a mask of StructureNotifyMask|PropertyChangeMask.

[…] The client can then proceed to read contents of the _XSETTINGS_SETTINGS property from the settings window and interpret according to the information in the "_XSETTINGS_SETTINGS Format" section of this document

Como você está usando o MATE, mate-settings-daemon é o provedor XSETTINGS. Ele lê org.mate.interface do GSettings e republica o valor como Net/ThemeName via XSETTINGS, onde o GTK pode finalmente recuperá-lo.

O uso do protocolo XSETTINGS torna o back-end irrelevante - por exemplo, versões mais antigas do GNOME e do MATE usavam o GConf, enquanto o Xfce usa o XfConf, e há um xsettingsd autônomo que usa um arquivo de texto. (Por outro lado, como você pode ver, o protocolo é muito específico para o X11 e não pode ser usado no Wayland.)

O pacote xsettingsd também vem com uma ferramenta dump_xsettings que despeja dados de qualquer provedor que esteja atualmente em execução.

Observe que nem todos os ambientes de desktop executam um provedor XSETTINGS. Por exemplo, usar lxappearance do LXDE simplesmente edita os arquivos de configuração: ~/.gtkrc-2.0 para o GTK 2 e ~/.config/gtk-3.0/settings.ini para o GTK 3. Eles são sempre lidos, mas usados na prioridade mais baixa - o GSettings ou os parâmetros especificados em XSETTINGS sempre ganham.

Resumo:

  • O GTK 3 suporta $ GTK_THEME para temporariamente substituir o tema.
  • No Wayland, o GTK 3 lê o nome do tema do GSettings, com o arquivo de configuração como fallback.
  • No X11, o GTK 2/3 recupera o nome do tema de um daemon XSETTINGS, com o arquivo de configuração como fallback.
  • O GTK 1 não suporta nada, exceto a configuração baseada em arquivo (gtkrc).
por 18.04.2018 / 10:52

Tags