Ok, voltando a postar depois de um tempo. Como já tinha falado antes estou bem ocupado essas últimas semanas e por isso o Plasma NM está meio parado. Uma boa notícia é que a nova tela de shutdown em QML que implementei para o KDE estará na versão 4.9.0
No início do mês eu fiz o push da implementação que fiz para a basysKom:
A aparência é praticamente a mesma da versão antiga, mas se você programa em QML você pode mudar o tema padrão ou mesmo criar o seu próprio tema. Acho que é possível fazer isso com o Qt Creator também.
O tema padrão está em $(kde4-config –path data –locate ksmserver/themes/default/). Existem quatro arquivos .qml no diretório, um .js e um .desktop também. O main.qml é o mais importante deles. Basicamente o main.qml é a caixa de diálogo de desligamento (shutdown) e a única exigência para ela é emitir os signais abaixo, que são os que realmente acionam as ações:
signal logoutRequested()
signal haltRequested()
signal suspendRequested(int spdMethod)
signal rebootRequested()
signal rebootRequested2(int opt)
signal cancelRequested()
signal lockScreenRequested()
spdMethod contem um dos valores do enum Solid::PowerManagement::SleepState (StandbyState, SuspendState or HibernateState). StandbyState é raramente usado hoje em dia, mas ainda suportado.
O parâmetro opt em rebootRequested2 contem o índice da opção de boot escolhida no menu de reboot (mais sobre isso adiante). O rebootRequested() reinicia o sistema sem alterar as configurações do grub. Os outros sinais são auto-explicativos.
Algumas informações importantes são passadas como propriedades QML da parte C++ do ksmserver para a caixa de diálogo:
- choose, sdtype, maysd: esses são os mesmos parâmetros (e na mesma ordem) usados em “qdbus org.kde.ksmserver /KSMServer logout x y z” e KWorkSpace::requestShutDown(ShutdownConfirm, ShutdownType, ShutdownMode). Leia /usr/include/kworkspace/kworkspace.h para uma explicação mais longa sobre eles.
- rebootOptions é um hash (vetor associativo, dicionário). rebootOptions["options"] é um “string list” (lista de strings) contendo os sistemas operacionais configurados no grub. Ele é usado para criar o menu de boot que aparece no screenshot no início deste post. rebootRequested2 passa o índice (começa de zero) deste string list como parâmetro. rebootOptions["default"] é o índice da opção atual selecionada em rebootOptions["options"].
- ShutdownType e spdMethods são as versões em Javascript dos enums KWorkSpace::ShutdownType (/usr/include/kworkspace/kworkspace.h) e Solid::PowerManagement::SleepState (/usr/include/solid/powermanagement.h). Eles foram adicionados por conveniência para que não seja necessário utilizar valores “hardcoded” nos arquivos .qml.
OBS: Acho que QML não suporta passar variáveis como valores padrão de propriedades entre { } como na linha abaixo:
contextMenu.append({itemIndex: spdMethods.HibernateState, itemText: i18n(“Suspend to &Disk”)})
spdMethods.HibernateState é igual 4 mas itemIndex retorna o valor 1 quando eu a leio. Tive que utilizar valores hardcoded no menu de shutdown para contornar este problema.


