Eu estou atrás de uma maneira de:
- obtenha uma lista de todas as janelas de aplicativos abertas no momento, como uma janela Gdk ou Gtk
- 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).