Skip to content

Desenvolvimento

SmileYzn edited this page Oct 30, 2026 · 1 revision

Estrutura

Pasta Conteúdo
Theme/Win2k Tema de janelas: gtk-2.0, gtk-3.0, gtk-4.0, xfwm4, xfwm4_hidpi, openbox-3, metacity-1, cinnamon, gnome-shell, xfce-notify-4.0
Icon/Win2k Pacote de ícones. Icon/icones.html é gerado
Cursor/Win2k_Cursors Cursores Xcursor
Sound/Win2k Tema de sons (stereo/*.wav) e win2k-logon-sound.desktop
Wallpaper/Win2k Papéis de parede
Menu win2k-start.menu, applications/, desktop-directories/, win2k-logoff.py
Panel Perfil do xfce4-panel-profiles
Setup win2k-installer.py e imagens do assistente
tools win2k-sounds.py, icon-gallery.py
Screenshots Capturas do README e do wiki

Convenções

  • Interface em português do Brasil. Os .desktop têm Name em inglês e Name[pt_BR].
  • CSS GTK 3: indentação de 2 espaços e seletores relacionados empilhados (veja as notas no topo de cada arquivo).
  • Comentários: CSS e .menu em inglês; scripts Python em português.
  • O gtk-4.0 é independente do gtk-3.0: os assets dele ficam em gtk-4.0/assets.

Tema GTK 3

  • gtk.css define as cores (@define-color) e importa os arquivos por widget (gtk-buttons.css, gtk-menu.css, gtk-treeviews.css...) e os de aplicativos (apps/xfce.css, apps/thunar.css, apps/whiskermenu.css, apps/xfce-panel-hacks.css...).
  • Painel do XFCE: o widget do plugin (#separator-7, #showdesktop-1) não desenha nada. A estilização vai nos filhos (#tasklist-N > box, #showdesktop-button). Os IDs dos plugins mudam conforme o layout; por isso xfce-panel-hacks.css lista -1 a -24.
  • Menus de contexto herdam o CSS do widget que os abre: font: initial em menu, .menu, .context-menu.
  • border-image só tem efeito com border-style diferente de none. Uma regra border: none zera a largura e esconde a imagem.

Tema GTK 4

  • Os seletores seguem o Adwaita do GTK 4.22 e do libadwaita (gtk-adwaita.css).
  • Popovers herdam a fonte do widget pai: popover.background { font: initial; }.
  • Para testar como os apps libadwaita veem o tema, sincronize com ~/.config/gtk-4.0.

xfwm4

  • O degradê da barra de título vem de title-active-stretch.png e title-inactive-stretch.png, com 2048 px de largura. O xfwm4_hidpi tem as mesmas imagens em 2×.
  • O fundo dos botões nos .xpm é transparente (c None), para o degradê aparecer por trás. As cores das bordas ficam em themerc (active_color_1, inactive_color_1...).

Instalador

Setup/win2k-installer.py tem três partes:

  1. Cópia de arquivos (install_files, remove_files): copia para .new e troca com rename. COMPONENTS define origem e destino de cada componente nos modos user e system. Para um componente novo, basta uma entrada ali.
  2. Configurações (apply_component, restore_component): grava pelo xfconf-query e guarda o valor anterior em ~/.local/share/win2k-installer/state.json.
  3. Interface (gui_main): assistente GTK 3 sobre o fundo do Setup, com o diálogo desenhado num Gtk.Overlay (posição pelo sinal get-child-position, arrastável pela barra de título).

Modo sistema: o script chama a si mesmo com pkexec python3 -I win2k-installer.py --root install <componentes>. O lado root só aceita nomes de COMPONENTS e destinos fixos no código, nunca caminhos vindos da linha de comando. A janela não roda como root.

Tema da janela: use_project_theme cria links Win2k-Setup para o tema e os ícones do projeto num diretório temporário, colocado no XDG_DATA_DIRS antes de o GTK iniciar. Os comandos chamados recebem CHILD_ENV, o ambiente original.

Com PyGObject, sempre fixe a versão do Gdk junto com a do Gtk:

gi.require_version("Gtk", "3.0")
gi.require_version("Gdk", "3.0")

Sem isso, o Gdk 4 pode ser carregado primeiro e o GTK 3 falha.

Testar sem mexer no sistema

Tema numa janela isolada (sem instalar):

mkdir -p /tmp/w2k/themes && ln -s "$PWD/Theme/Win2k" /tmp/w2k/themes/Win2k
Xephyr :5 -screen 1024x768 -ac &
env -u DBUS_SESSION_BUS_ADDRESS DISPLAY=:5 XDG_DATA_DIRS=/tmp/w2k:/usr/share \
    GTK_THEME=Win2k gtk3-widget-factory

Sessão XFCE completa isolada (como nas capturas): dbus-run-session com um HOME de demonstração contendo cópias dos canais xfconf (xsettings, xfwm4, xfce4-panel, xfce4-desktop...), rodando xfsettingsd, xfwm4, xfdesktop e xfce4-panel no Xephyr.

Instalador sem efeitos reais: rode com um HOME falso e versões falsas de xfconf-query, xfce4-panel e xfce4-panel-profiles no começo do PATH, que só registram as chamadas.

Painel: copie xfce4-panel.xml e ~/.config/xfce4/panel para um XDG_CONFIG_HOME temporário e rode xfce4-panel dentro de dbus-run-session, no Xephyr. Um gtk.css em $XDG_CONFIG_HOME/gtk-3.0/ permite testar regras sem editar o tema.

Tela de login: lightdm --test-mode --config <arquivo> abre o greeter num Xephyr.

Sem xdotool/wmctrl, cliques e teclas podem ser enviados com ctypes e libXtst (XTestFakeButtonEvent, XTestFakeKeyEvent), e janelas podem ser posicionadas com Wnck.

Capturas de tela

As capturas do README foram feitas numa sessão XFCE isolada, com pasta pessoal de demonstração (/home/usuario, montada num namespace com unshare), ícones da área de trabalho ocultos e o tema direto do projeto. Antes de publicar capturas, confira se não aparecem nomes de usuário, caminhos pessoais, dispositivos ou IPs.

Galeria de ícones

python3 tools/icon-gallery.py

Gera Icon/icones.html com os ícones listados em SECTIONS. Os caminhos apontam para o arquivo real (links resolvidos).

Clone this wiki locally