Ocultar o título da janela no gnome-shell usando mutter, gdk, wnck ou gtk

4

Eu estou atrás de uma maneira de:

  1. obtenha uma lista de todas as janelas de aplicativos abertas no momento, como uma janela Gdk ou Gtk
  2. remova as decorações das janelas selecionadas (maximizadas no meu caso).

Eu gostaria de fazer isso usando mutter, gdk, wnck ou gtk (ou GdkX11, ...) (ou seja, qualquer coisa com introspecção de objetos).

Eu vi a seguinte pergunta: Remover a barra de título do terminal maximizado janela , mas estou lutando com a conversão para algo que funciona.

(A linguagem que estou usando é javascript, mas isso é um pouco irrelevante, já que está tudo usando a introspecção do gobject).

Atualmente estou usando o GNOME 3.2 (estou aberto às soluções GNOME 3.4).

Quanto a 1. , sei que posso obter facilmente todas as janelas com wnck e mutter (por exemplo, Wnck.Screen.get_default().get_windows() ), mas como convertê-las em G (t ou d?) k janelas para remover decorações?

Eu posso converter uma janela para um Gdk assim:

xwin = GdkX11.X11Window.foreign_new_for_display( 
                          Gdk.Display.get_default(), 
                          mutterWindow.get_compositor_private()['x-window'] );

No entanto, , esse objeto xwin não responde a comandos como xwin.unmaximize() e xwin.maximize() , então acho que algo deu errado na conversão!

A razão pela qual eu quero converter a janela em Gdk ou Gtk é para que eu possa usar o Gdk set_decorations ou Gtk's set_hide_titlebar_when_maximized .

Eu dei uma olhada em Gdk.Screen.get_default().get_toplevel_windows() e Gtk.Window.list_toplevels() , mas essas listas de retorno de mais janelas foram abertas, e não tenho certeza se as janelas reais do aplicativo estão na lista e como combiná-las.

Como para 2. , se primeiro obtenho a janela ativa de dentro do Gdk (já que sei que é uma janela do Gdk e responde adequadamente a eventos como unmaximize e maximize , diferentemente de quando eu uso foreign_new_for_display ) e, em seguida, tente remover a decoração conforme a pergunta vinculada anteriormente, a janela (e o processo) morre! Não tenho certeza qual é o erro.

const Gdk = imports.gi.Gdk;

// get current window. It's a terminal, not null.
// For now assume it's maximized.
curwin = Gdk.Screen.get_default().get_active_window();
// decorations don't seem to updated unless I unmaximize & re-maximize
curwin.unmaximize();
// try remove decorations: window + process dies!
curwin.set_decorations(0);
curwin.maximize();

Se eu usar curwin.set_decorations(Gdk.WMDecoration.BORDER) (nota: documentação da janela do GDK aqui ), a janela aparece como eu desejo quando a janela está unmaximized (barra de título foi), mas quando maximizada, espaço para a barra de título ainda é deixado, embora o texto em si não é mostrado.

Alguém poderia me dar uma ideia de como alcançar meus objetivos? (Por fim, a ocultação da barra de título da automagic de janelas maximizadas, como maximus para o remix de netbook Unity do Ubuntu). Eu realmente quero usar isso usando Gtk / Gdk / wnck / mutter / qualquer coisa com introspecção do gobject, ao contrário de um aplicativo externo como compiz ou modificar o XML do tema da janela de metacity (que eu sei que você pode fazer para conseguir isso).

    
por mathematical.coffee 04.05.2012 / 03:42

1 resposta

3

Depois de um pouco de discussão com os devs do gnome-shell, isso foi resolvido.

A conversão que tentei fazer em 1. nunca foi uma opção - esse tipo de coisa não funciona.

A versão em 2. era o código correto, mas funcionaria apenas se fosse executada a partir de fora de uma extensão do gnome-shell (por exemplo, executar o arquivo javascript usando o gjs binário espelho ou uma extensão). Descobriu-se que mexer com enfeites de janela como o de dentro do processo gnome-shell / mutter causaria o acidente.

Assim, o problema poderia ser resolvido desde que o código fosse executado a partir de fora da extensão. O lançamento de um processo externo para executar o script na opção 2) funcionou (embora tenha sido mais fácil simplesmente gerar xprop e definir o _GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED atom para true na janela (identificado por seu X ID, sendo o filho da janela com o XID do ator da janela.

(Se alguém estiver interessado, o resultado final é extensão do shell do gnome Maximus )

    
por mathematical.coffee 22.01.2013 / 01:15