# Manual do Gerenciador de Janelas

O Time KDE
24/06/1998
0.11.13

Esta documentação foi atualizada pela última vez para o Kwm versão 0.11.13. Queira dirigir comentários e adições ao autor.

KDE
KWM
window manager

## Introdução

Este documento contém informações gerais sobre o Kwm, uma referência de recursos, e informações técnicas úteis a desenvolvedores do módulo de controle do Kwm e do módulo de sons do sistema.

Para maiores informações sobre como customizar o Kwm em baixo nível (interessa somente aos desenvolvedores do kwinconfig), queira consultar o arquivo kwmrc e o código-fonte.

Para todos os programadores: verifiquem o arquivo `kwm.h` na biblioteca libkdecore para informar-se sobre como usar o Kwm para seus propósitos. No caso dos módulos, a classe `KWMModuleApplication` é um bom exemplo sobre como escrever módulos.

### Recursos

Kwm é o gerenciador de janelas ideal para o KDE. Entre outras coisas, ele oferece:

- Integração completa com o KDE.

- Controle completo do teclado;

- Interface moderna com títulos de janela e ícones exclusivos e que não precisam ser definidos em arquivos crípticos de recursos;

- Uma mini-janela de linha de comando com histórico;

- Habilidade de ser reconfigurado em tempo de execução sem precisar reiniciar;

- Gerenciador de janelas de segunda geração, o Kwm usa uma ferramenta moderna de interface gráfica para seus controles (botões, menus, caixas de listagem etc.) ao invés de empanturrar o código com uma implementação proprietária ou medíocre do Xlib.

- Excelente manipulação do foco, mesmo que você trabalhe em diferentes ambientes virtuais (nada mais de comutar-ambiente-e-perder-foco) como é o padrão em outros gerenciadores de janelas);

- Inclui gerenciamento de sessão e um proxy de gerenciamento de sessão funcional para aplicações de legado. Esse proxy pode restaurar suas aplicações a seu estado anterior, incluindo propriedades de janela (maximizada, pregada, iconificada etc.) e no ambiente de trabalho correto;

- Moderno conceito de módulos que utiliza o servidor X onde é possível. Os módulos do Kwm também são bastante independentes: podem ser iniciados antes ou depois do Kwm. O Kwm pode ser reiniciado enquando os módulos continuam rodando, e irá reconectar-se a eles automaticamente;

- Oferece algumas extensões ao servidor X em `kwm.h`: Agora as aplicações podem maximizar a si mesmas (ou pregar-se ou decorar-se ou o que for), e definir mini-ícones. Isto funciona também para janelas visíveis.

## Usando o Kwm

### Opções de linha de comando

O Kwm oferece as seguintes opções de linha de comando:

-version

  Mostra a versão, inclusive o patchlevel; não inicia o Kwm.

-nosession

  Inicia o Kwm sem restaurar a seção anterior.

### Atalhos de teclado

Alt-Esc ou Control-Esc

  Gerenciador da "Sessão Corrente" com botão de logout

Alt-Tab and Alt-Shift-Tab

  Navega pelas janelas do ambiente de trabalho corrente

Ctrl-Tab e Ctrl-Shift-Tab

  Navega pelos ambientes virtuais (pode ser desligado em kwmrc)

Alt-F2

  Abrir a mini-janela de linha de comando

Alt-F3

  Menu de operações de janela

Alt-F4

  Fechar janela

Ctrl-F&lsqb;1..8&rsqb;

  Comutar para o ambiente virtual de número correspondente

Ctrl-Alt-Esc

  Modo de destruição de janela (cursor torna-se uma caveira)

### Controle do mouse

Clique sobre a borda ou sobre a barra de título

- botão esquerdo do mouse ativa e traz a janela ao primeiro plano

- botão central do mouse ativa e coloca a janela em segundo plano

- botão direito do mouse mostra o menu de operações de janela se ela estiver ativa, do contrário ativa-a sem colocá-la em primeiro plano.

Clique duplo na barra de título comuta a maximização

Arrasto da barra de título

- botão esquerdo do mouse move a janela e traz a mesma para ao primeiro plano

- botão central do mouse move a janela sem trazê-la ao primeiro plano

Arrasto das bordas ou cantos

- botão esquerdo do mouse redimensiona a janela e traz a mesma para o primeiro plano

- botão central do mouse redimensiona a janela sem trazê-la para o primeiro plano

A janela inteira

- Alt-botão esquerdo do mouse move a janela

- Alt-botão central do mouse coloca a janela em segundo plano se estiver em primeiro plano

- Alt-botão direito do mouse redimensiona a janela

Botões da barra de título (configuráveis)

- Menu mostra uma lista de operações de janela

- Pregar liga/desliga o modo Pregado (que é quando a janela permanece na tela mesmo ao se trocar de ambiente de trabalho)

- Criar ícone / Minimizar esconde a janela sem eliminá-la

- Maximizar

  - botão esquerdo do mouse maximiza

  - botão central do mouse maximiza verticalmente

  - botão direito do mouse maximiza horizontalmente

- Fechar fecha a janela (algumas aplicações podem perguntar se devem salvar documentos abertos etc.)

### Mini-janela de linha de comando

Pressione `Alt-F2` para mostrar uma pequena janela de linha de comando. Digite um comando do Unix (a variável de ambiente SHELL é utilizada para determinar que interpretador -- shell -- executará o comando), ou:

- Digite uma URL para abrir uma janela do Kfm contendo a URL informada. Você pode omitir o prefixo http:// ou ftp:// se o nome do servidor começa com www ou ftp, respectivamente.

- Digite `man:` comando para abrir uma janela kfm mostrando a página `man` correspondente ao comando.

Você pode usar a seta para cima para voltar a comandos previamente utilizados. Além disso, você pode usar a tecla Tab para completar nomes de arquivo parcialmente digitados, do mesmo modo que na maioria dos avisos de comando em modo texto.

### Comandos

Você pode mandar comandos ao kwm das seguintes formas:

`KWM::sendKWMCommand(QString)` (de dentro das aplicações KDE) ou `kwmcom` comando (da linha de comando)

Isso é de interesse especial dos desenvolvedores do KGlobalShortcut.

No momento o kwm entende os seguintes comandos:

- refreshScreen atualiza a tela.

- darkenScreen escurece a tela. Cuidado: esse comando deixa o ambiente insensível ao teclado/mouse.

- logout mostra a janela de logout.

- commandLine abre a mini-janela de linha de comando

- taskManager mostra o gerenciador de sessão

- configure recarrega a configuração do arquivo kwmrc.

- winMove winResize winRestore winIconify winClose winShade winSticky winOperations Estes comandos afetam a janela ativa e fazem o que se espera deles. (`winOperations` mostra o menu de operações de janela.)

- deskUnclutter deskCascade Estes comandos reorganizam as janelas no ambiente.

- desktop&lsqb;1-8&rsqb; muda para o ambiente de trabalho especificado.

- desktop+1 desktop+2 desktop-1 desktop-2 desktop&percnt;2 Estes comandos comutam entre ambientes de trabalho. A chave `desktop&percnt;2` comuta entre um ambiente ímpar e o próximo ambiente par. Isso significa comutar entre 1 e 2 ou entre 3 e 4. Isso é útil para emular "Acima" e "Abaixo" numa matriz virtual n*2, que é usada pelo pager do KDE. Similarmente, `desktop+2` significa "Direita"; `desktop-1` significa "Esquerda".

## Configuração

O Kwm pode ser configurado usando-se o Centro de Controle do KDE (menu Iniciar > Centro de Controle KDE). Abra a árvore Janelas para ver as várias opções de configuração. Para configurar os ambientes virtuais, abra a árvore Aplicações e escolha Painel.

Para os que preferem editar um arquivo de configuração, esta seção explica as opções do arquivo `kwmrc`, localizado em ˜/.kde/share/config.

### Kwmrc

A configuração do kwmrc é dividida nas seguintes seções:

- Botões

- Geral

- Sessão

- Ambiente de Trabalho

- Decoração

- Foco

#### &lsqb;Botões&rsqb;

Esta seção controla o posicionamento dos botões de janela na barra de título. Contém linhas na forma ButtonX=nome-de-botão onde X é uma letra A-F, e nome-de-botão pode ser `Menu, Sticky, Iconify, Maximize, Close, Off`. Botões A, B e C aparecem do lado esquerdo do título da janela, e D, E e F aparecem do lado direito.

#### &lsqb;Geral&rsqb;

Esta seção define uma miscelânea de itens de configuração:

- AltTabStyle=`KDE&verbar;CDE` (padrão é KDE) Recurso AltTab no estilo do CDE, para ser utilizado com a política de foco clássica. O estilo CDE é o padrão com a política clássica de foco, já que o estilo do KDE não faz muito sentido nessas circunstâncias. Para todas as outras políticas de foco, você pode escolher o estilo.

- AutoRaise=valor (em milissegundos) Se `FocusPolicy` é igual a `FocusFollowMouse`, este item determina o tempo entre o momento em que a janela ganha o foco e o momento em que a janela é trazida para o primeiro plano.

- BorderSnapZone=valor (em pixels) Quando o usuário está posicionado uma janela, e uma das bordas aproxima-se da borda do ambiente, a janela irá fixar-se à borda; valor determina quão perto a janela tem de estar da borda do ambiente para isso acontecer.

- Button3Grab=`on&verbar;off` Quando desligado `(off)`, as operações de janela envolvendo o botão direito do mouse são desligadas, de modo que as aplicações possam receber os eventos de botão direito do mouse.

- ControlTab=`on&verbar;off` Quando ligado `(on)`, permite ao usuário pressionar `Ctrl+Tab` para comutar entre ambientes virtuais.

- ElectricBorder=valor (em milissegundos) Se você tem mais de um ambiente virtual, o recurso ElectricBorder permite a você mover-se entre os ambientes movendo o mouse para a borda da tela. O parâmetro value especifica o tempo que você deve manter o ponteiro encostado na borda até que o ambiente mude. Um valor de -1 desliga esse recurso.

- ElectricBorderPointerWarp=`NoWarp&verbar;MiddleWarp&verbar;FullWarp` Se a opção `ElectricBorder` for igual a `on`, configure esta opção para que o ponteiro do mouse mova-se à posição desejada quando o ambiente muda.

- ElectricBorderNumberOfPushes=valor (padrão é 5 passos) O número de passos do mouse dentro do tempo especificado pela propriedade `ElectricBorder` para mudar para outro ambiente virtual sem estar arrastando uma janela.

- FocusPolicy=`ClickToFocus&verbar;FocusFollowMouse&verbar;ClassicFocusFollowsMouse&verbar;ClassicSloppyFocus` `ClickToFocus` requer que o usuário clique uma janela paa lhe dar o foco. `FocusFollowMouse` dá sempre o foco para a janela sob o ponteiro do mouse. Com `ClassicFocusFollowsMouse`, a janela não ganha o foco se o ponteiro não estiver sobre ela. O `focusFollowMouse` do `Kwm` costumava dar o foco para novas janelas ou Alt-tab para permitir m elhor controle via teclado.

- MaximizeOnlyVertically=`off&verbar;on` Quando ligado `(on)`, essa item restringe a maximização de janela à direção vertical.

- ResizeAnimation=`1..10` (velocidade máxima) Quando ligado `(on)`, minimização e maximização envolvem animação gráfica. (padrão é 1)

- RstartProtocol=`...` (padrão é `rstart -v`)

- ShapeMode=`off&verbar;on` Quando ShapeMode está ligado `(on)`, o Kwm usa os pixmaps definidos pelo usuário para as bordas de janela ao invés do padrão (veja abaixo).

- ShapePixmapTop=pixmap ShapePixmapBottom=pixmap ShapePixmapLeft=pixmap ShapePixmapRight=pixmap ShapePixmapTopLeft=pixmap ShapePixmapTopRight=pixmap ShapePixmapBottomLeft=pixmap ShapePixmapBottomRight=pixmap Estas opções especificam que imagens serão mostradas nos respectivos lados/cantos das janelas quando `ShapeMode` for igual a `on`. O pixmap deve ser o nome de um arquivo de pixmap (.xpm), que deve estar localizado em share/apps/kwm/pics.

  Os fontes do Kwm incluem uma subpasta "images", que é um exemplo para as extensões de aparência.

- TitlebarLook=`shaded&verbar;plain&verbar;pixmap` Esta opção determina a aparência das barras de título da janela. Escolha `pixmap` para fazer o Kwm mostrar uma imagem definida pelo usuário na barra de título, conforme especifico nos itens a seguir.

- TitlebarPixmapActive=pixmap TitlebarPixmapInactive=pixmap Estas opções especificam que imagens são mostradas nas barras de título de janelas ativas e inativas, respectivamente, quando TitleBarLook for igual a `pixmap`.

- TitleAnimation=valor (em milissegundos) Habilitar TitleAnimation diz ao kwm para fazer oscilar lateralmente os títulos de janela longos, que não caibam inteiros na área colorida da barra de título, O valor especifica a velocidade da oscilação. Zero desliga a oscilação.

- TitlebarDoubleClickCommand=`winMaximize &verbar; winShade &verbar; winMove &verbar; winResize &verbar; winRestore &verbar; winIconify &verbar; winClose &verbar; winSticky &verbar; winOperations` Esta opção permite especiicar que comportamento de janela deve ocorrer quando o usuário clica duas vezes a barra de título.

- TraverseAll=`on&verbar;off` Quando ligado (`on`), a operação `Alt-tab` faz o ciclo por todas as janelas em todos os ambientes. Quando desligado (`off`), `Alt-tab` faz o ciclo pelas janelas do ambiente atual.

- WindowMoveType=`Opaque&verbar;Transparent` Esta opção controla o efeito visual que ocorre enquanto o usuário arrasta uma janela. `Transparent` mostra somente uma borda durante o arrasto, enquanto `Opaque` mostra a janela inteira.

- WindowsPlacement=`cascade&verbar;interactive&verbar;manual&verbar;random&verbar;smart` Esta opção determina como o kwm posiciona as janelas no ambiente de trabalho quando são criadas; `manual` permite ao usuário posicionar a janela; `interactive` toma um valor adicional de percentagem, como no exemplo a seguir: `WindowsPlacement=interactive,25` Com posicionamento interativo `(interactive)`, o kwm usa o algoritmo de posicionamento inteligente, a não ser que a posição cubra janelas preexistentes em mais do que a porcentagem especificada, caso em que o posicionamento `manual` é usado para permitir ao usuário posicionar a janela. A porcentagem pode ser maior que 100.

  As outras opções dão autonomia ao kwm para posicionar a janela.

- WindowSnapZone=valor (em pixels) Quando o usuário está posicionando uma janela, e uma das bordas aproxima-se da borda de outra janela, a borda da primeira irá grudar à da segunda; valor determina quão perto a janela em movimento deve estar da outra para que esse efeito aconteça.

#### &lsqb;Sessão&rsqb;

- proxyignore=`xemacs,xterm,...,` Lista delimitada por vírgulas das aplicações (não-KDE) cujo estado não deve ser salvo quando o usuário sai do KDE. Lista o nome da aplicação com quaisquer argumentos de linhas de comando.

#### &lsqb;Ambiente de trabalho&rsqb;

Esta seção define o número de ambientes virtuais, seus nomes e posições. Contém linhas como as seguintes:

- NumberOfDesktops=value Especifica o número de ambientes virtuais. Hoje o kwm suporta até 8 ambientes.

- Desktop&num;&lsqb;idioma&rsqb;=nome Especifica o nome do ambiente &num;, por exemplo, `Desktop1[pt&lowbar;BR]=Um` Os ambientes são numerados de 1 a 8.

- Desktop&num;Region=geometry Especifica a geometria do ambiente &num;; por exemplo, `Desktop1Region=101+0+923+722`

#### &lsqb;Decoração&rsqb;

- noDecorationTitles=,

- tinyDecorationTitles=,

- noDecorationClasses=,

- tinyDecorationClasses=,

#### &lsqb;Foco&rsqb;

- noFocusTitles=,

- noFocusClasses=,

Cada propriedade permite especificar uma lista delimitada por vírgulas de expressões regulares. Uma janela cujo título ou classe fecha com uma determinada expressão será decorada apropriadamente. Nota: Essas dicas afetam somente as janelas NOVAS. Não esqueça de chamar `kwmcom` configure ou reiniciar `Kwm` depois de mudar o arquivo `kwmrc`.

## Eventos de Som

O Kwm gera alguns eventos de som, que podem ser usados num módulo de sons de sistema. No presente momento, os seguintes eventos de som estão implementados:

- Iconificar (minimizar) janela

- Restaurar (desminimizar, desiconificar) janela

- Maximizar janela

- Desmaximizar janela

- Pregar janela

- Despregar janela

- Nova janela

- Apagar Janela

- Novo Trans

- Deletar Trans

- Shade Up

- Shade Down

- Sair

- Mensagem de saída

## Perguntas mais freqüentes

### Por que eu devo usar o Kwm?

Eu perdi vários dias aprenndendo como configurar dez gerenciadores de janela diferentes. Agora que eu tenho 678 linhas de arquivos de recurso fazendo exatamente o que eu quero, você vem e quer tirar meu gerenciador de janelas !

Resposta: Você não precisa abandonar seu gerenciador de janelas atual, é só uma oferta gratuita. O KDE suporta todos os gerenciadores de janela atualmente em uso, mas para obter todos os benefícios do KDE é recomendável usar o Kwm. Veja a lista de Recursos.

### Por que eu não posso definir novos atalhos de teclado para iniciar aplicativos ?

Resposta: Porque isso não é tarefa do gerenciador de janelas. Utilize `KGlobalShortcut` para esse propósito.

### Por que o Kwm parece tanto com o Windows 95?

Resposta: Ops, deixe-me ver ... (Matthias tentando encontrar alguém que tem Windows 95 pois ele não tem Windows 95 em nenhum de seus computadores.... hmmmm, ninguém usa Windows 95 aqui. Bem, vamos pegar uma distribuição Linux meio velha e instalar o fvwm95-2 ...) Não, não posso confirmar isso. O Kwm tem melhor aparência e oferece mais funcionalidade de gerenciamento de janelas.

### É possível adicionar extensões do KDE a outros gerenciadores de janelas ?

Resposta: Sim, é possível. Basta você estudar os programas `kwm.h` e `kwm.C` do pacote `libkdecore` e estender seu gerenciador de janelas favorito para que responda corretamente às estensões. Também é possível implementar um intermediário de requisição de objetos em assembler x86. É só uma questão de relação investimento/resultado.

### O Kwm suporta janelas sombreadas a la OpenStep?

Resposta: Sim.

## Epílogo

### Desenvolvedor

`Matthias Ettrich`

### Autores

`Matthias Ettrich`

`Stephen Schaub` - Editor

`Kalle Dalheimer` - Editor

`Robert Williams` - Editor

`Tradução para Português do Brasil: Elvis Pfützenreuter`