¿Cómo se comunica mi tema seleccionado a gtk?

2

Relacionado con ¿Dónde se guarda Gtk + tema predeterminado?

Estoy usando el escritorio de Mate. Veo que mi configuración de Apariencia se guarda en 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

Si escribo un programa gtk hello-world simple y lo vinculo con solo libgtk, sin bibliotecas de mate o gnome o de escritorio, funciona. Muestra la apariencia seleccionada. Estoy bastante seguro de que "org.mate.interface" no está codificado en libgtk. Y asumo que "gsettings" no está codificado en libgtk. Entonces, ¿cómo se obtiene mi configuración? Variable de entorno, archivo de puntos, propiedad del servidor X, ¿qué?

Sal Valente
fuente

Respuestas:

1

Y asumo que "gsettings" no está codificado en libgtk.

Esa es una mala suposición, ya que GSettings es el almacenamiento de configuración principal para la mayoría de los programas de GNOME y, de hecho, se utiliza para recuperar el nombre del tema en GTK 3 en Wayland. Específicamente, gdkdisplay-wayland utiliza gtk-theme en el org.gnome.desktop.interface esquema.

En X11, sin embargo, GTK usa el Protocolo XSETTINGS , donde un demonio específico de DE obtiene distintas configuraciones de donde quiere, y las vuelve a publicar en un formato estándar utilizando el mecanismo de selección de X11.

En el inicio, cada cliente que debe identificar la ventana de configuración llamando a XGetSelectionOwner () para la selección _XSETTINGS_S [N] y selecciona una notificación en la ventana de configuración llamando a XSelectInput () con una máscara de StructureNotifyMask | PropertyChangeMask.

[…] Luego, el cliente puede proceder a leer los contenidos de la propiedad _XSETTINGS_SETTINGS desde la ventana de configuración e interpretar de acuerdo con la información en la sección "Formato _XSETTINGS_SETTINGS" de este documento.

Ya que estás usando MATE, mate-settings-daemon es el proveedor de XSETTINGS. Se lee org.mate.interface desde GSettings y re-publica el valor como Net/ThemeName a través de XSETTINGS, donde GTK finalmente puede recuperarlo.

El uso del protocolo XSETTINGS hace que el backend sea irrelevante, por ejemplo, las versiones anteriores de GNOME y MATE utilizaban GConf, mientras que Xfce usa XfConf, y hay una versión independiente xsettingsd que utiliza un archivo de texto. (Por otro lado, como puede ver, el protocolo es muy específico para X11 y no se puede usar dentro de Wayland).

los xsettingsd paquete también viene con una dump_xsettings herramienta que descarga datos de cualquier proveedor que se esté ejecutando actualmente.

Tenga en cuenta que no todos los entornos de escritorio ejecutan un proveedor de XSETTINGS. Por ejemplo, utilizando LXDE lxappearance simplemente edita los archivos de configuración: ~/.gtkrc-2.0 para GTK 2, y ~/.config/gtk-3.0/settings.ini para GTK 3. Estos son siempre lea, pero se usa con la prioridad más baja: los parámetros especificados de GSettings o XSETTINGS siempre ganan.

Resumen:

  • GTK 3 soporta $ GTK_THEME para temporalmente anular el tema.
  • En Wayland, GTK 3 lee el nombre del tema de GSettings, con el archivo de configuración como alternativa.
  • En X11, GTK 2/3 recupera el nombre del tema de un demonio XSETTINGS, con el archivo de configuración como respaldo.
  • GTK 1 no admite nada, excepto la configuración basada en archivos (gtkrc).
grawity
fuente