Como o meu tema selecionado é comunicado ao gtk?


2

Relacionado a Onde está o tema padrão Gtk + salvo

Estou usando a área de trabalho do Mate. Eu 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 é que fica a minha configuração? Variável de ambiente, dotfile, propriedade do servidor X, o que?

Respostas:


1

E eu diria que "gsettings" não é codificado na libgtk.

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

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

Na inicialização, cada cliente deve identificar a janela de configurações chamando XGetSelectionOwner () para a seleção _XSETTINGS_S [N] e selecionar a notificação na janela de configurações chamando XSelectInput () com uma máscara de StructureNotifyMask | PropertyChangeMask.

[…] O cliente pode então continuar a ler o conteúdo da propriedade _XSETTINGS_SETTINGS da janela de configurações e interpretar de acordo com as informações na seção "Formato _XSETTINGS_SETTINGS" deste documento

Desde que você está usando o MATE, mate-settings-daemon é o provedor XSETTINGS. Lê org.mate.interface da GSettings e re-publica 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 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 xsettingsd pacote também vem com um dump_xsettings ferramenta que despeja dados de qualquer provedor atualmente em execução.

Observe que nem todos os ambientes de desktop executam um provedor XSETTINGS. Por exemplo, usando o LXDE lxappearance 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. Estes são sempre ler, mas usado na prioridade mais baixa - os parâmetros especificados GSettings ou 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).
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.