Crie uma janela Gtk insensível a Show Desktop e não será mostrada no Launcher

7

Eu quero fazer um Gtk.Window que esteja afixado no Desktop e funcione como um widget de desktop. Descobri que posso fazer isso definindo self.set_type_hint(Gdk.WindowTypeHint.DESKTOP) , que o mantém abaixo de todas as janelas, inamovível e insensível ao plug-in Show Desktop Unity. No entanto, se você clicar na área de trabalho fora do widget, a janela ficará oculta atrás da área de trabalho e não consigo recuperá-la (tenho que matar o programa).

Qual é a melhor maneira de lidar com isso? Existe outro cenário? Descobri que também posso obter uma janela para ignorar comandos do Show Desktop se definir a dica skip_taskbar e desativar uma configuração no compiz, mas prefiro não mexer nas configurações de compiz das pessoas para obter esse efeito.

EDITAR: Descobri o Ignorar Show Desktop (veja abaixo), mas ainda não consigo ignorar a barra Launcher. A dica da janela DESKTOP funcionou para isso, mas tem as desvantagens mencionadas acima. Eu também brinquei com a configuração do WM_CLASS no arquivo .desktop, mas o Unity parece ignorar isso.

    
por Ian B. 20.02.2013 / 17:01

2 respostas

6

Descobri ... você precisa definir a dica de tipo como Gdk.WindowTypeHint.DOCK e também definir skip_taskbar_hint OR skip_pager_hint .

EDIT Isso funciona, mas mesmo com o skiptaskbar, a janela ainda aparece como um ícone na barra de inicialização. Eu preciso de um jeito melhor ...

EDIT2 Entendi! O problema veio de outros lançadores no bar com o mesmo WMClass do programa que eu estava tentando fazer um Desktop Widget. Para se distinguir, você precisa definir o WMClass da janela dentro do programa, bem como dentro do seu launcher .desktop:

No código:

Gtk.Window.set_wmclass(WMname,WMclass)

E no launcher do .desktop:

StartupWMClass=WMname
    
por Ian B. 20.02.2013 / 17:46
0

Eu tenho um aplicativo em execução que faz exatamente o que você deseja: rainlendar2 no modo desktop. Saída XwinInfo:

xwininfo: Window id: 0x1200086 "rainlendar2"

  Window manager hints:
      Client accepts input or input focus: Yes
      Initial state is Normal State
      Displayed on all desktops
      Window type:
          Dock
      Window state:
          Skip Pager
          Skip Taskbar
          Below
          Sticky

Como isso se traduz em sinalizadores Gtk + / Gdk é para ser visto. Mas parece que viscosidade desempenha um papel.

    
por aquaherd 27.02.2013 / 11:15