선택한 테마는 gtk와 어떻게 통신합니까?


2

관련 GTK +의 기본 테마가 저장되는 경우

Mate 데스크톱을 사용하고 있습니다. 내 외관 설정이 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

간단한 gtk hello-world 프로그램을 작성하고 mate, gnome 또는 desktop 라이브러리없이 libgtk와 링크하면 작동합니다. 선택한 모양을 표시합니다. "org.mate.interface"가 libgtk로 하드 코딩되지 않았 음을 확신합니다. 그리고 "gsettings"는 libgtk에 하드 코딩되지 않았다고 가정합니다. 어떻게 구성을 얻습니까? 환경 변수, 도트 파일, X 서버 속성, 무엇?

답변:


1

그리고 "gsettings"는 libgtk에 하드 코딩되지 않았다고 가정합니다.

GSettings 대부분의 그놈 프로그램의 기본 구성 저장소이며 실제로 Wayland에서 GTK 3의 테마 이름을 검색하는 데 사용 되기 때문에 나쁜 가정 입니다. 특히 gdkdisplay-wayland는 스키마 gtk-theme에서 사용 합니다 org.gnome.desktop.interface.

그러나 X11에서 GTK는 XSETTINGS 프로토콜을 사용합니다 . 여기서 별도의 DE 특정 데몬은 원하는 곳에서 다양한 설정을 가져오고 X11의 선택 메커니즘을 사용하여 표준 형식으로 다시 게시합니다.

시작시, _XSETTINGS_S [N] 선택에 대해 XGetSelectionOwner ()를 호출하여 설정 창을 식별하고 StructureNotifyMask | PropertyChangeMask의 마스크로 XSelectInput ()을 호출하여 설정 창에서 알림을 선택해야하는 각 클라이언트.

[…] 클라이언트는 설정 창에서 _XSETTINGS_SETTINGS 속성의 내용을 읽고이 문서의 "_XSETTINGS_SETTINGS 형식"섹션의 정보에 따라 해석 할 수 있습니다.

MATE를 사용 mate-settings-daemon하고 있으므로 XSETTINGS 제공자입니다. org.mate.interfaceGSettings에서 읽고 Net/ThemeNameGTK가 최종적으로 검색 할 수있는 XSETTINGS 를 통해 값을 다시 게시 합니다.

XSETTINGS 프로토콜을 사용하면 백엔드와 관련이 없습니다. 예를 들어 구 그놈 및 MATE 버전은 GConf를 사용했지만 Xfce는 XfConf 를 사용하고 텍스트 파일을 사용하는 독립형 xsettingsd 가 있습니다. (반면, 프로토콜은 X11에만 한정되어 있고 Wayland에서는 사용할 수 없습니다.)

xsettingsd의 패키지도 함께 제공 dump_xsettings현재 실행중인 어떤 공급자로부터 데이터를 덤프 도구입니다.

모든 데스크탑 환경이 XSETTINGS 제공자를 실행하는 것은 아닙니다. 예를 들어, LXDE를 사용 lxappearance하면 ~/.gtkrc-2.0GTK 2 및 ~/.config/gtk-3.0/settings.iniGTK 3 의 구성 파일을 간단히 편집 할 수 있습니다. 이 파일 은 항상 읽지 만 가장 낮은 우선 순위로 사용됩니다. GSettings 또는 XSETTINGS 지정 매개 변수는 항상 이깁니다.

요약:

  • GTK 3는 테마 를 일시적으로 무시 하기 위해 $ GTK_THEME를 지원합니다 .
  • Wayland에서 GTK 3는 구성 파일을 폴백으로하여 GSettings에서 테마 이름을 읽습니다.
  • X11에서 GTK 2/3는 구성 파일을 폴백으로하여 XSETTINGS 데몬에서 테마 이름을 검색합니다.
  • GTK 1은 파일 기반 구성 (gtkrc) 이외의 것을 지원하지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.