У меня есть способ:
Я хотел бы сделать это, используя mutter, gdk, wnck или gtk (или GdkX11, ...) (то есть что-нибудь с самоанализом объекта).
Я видел следующий вопрос: Удалите заголовок заголовка из развернутого окна терминала , но я пытаюсь преобразовать его во что-то, что работает.
(Язык, который я использую, - это javascript, но это несколько не имеет значения, так как все использует интроспекцию gobject).
В настоящее время я использую GNOME 3.2 (хотя я открыт для решений GNOME 3.4).
Что касается 1. , я знаю, что могу получить все окна с wnck
и mutter
довольно легко (например, Wnck.Screen.get_default().get_windows()
), но как мне затем преобразовать их в G (t или d?) k окон, чтобы убрать украшения?
Я могу преобразовать окно бормочущего в Gdk примерно так:
xwin = GdkX11.X11Window.foreign_new_for_display(
Gdk.Display.get_default(),
mutterWindow.get_compositor_private()['x-window'] );
Однако , этот объект xwin
не отвечает на команды, такие как xwin.unmaximize()
и xwin.maximize()
, поэтому я чувствую, что что-то пошло не так при преобразовании!
Причина, по которой я хочу преобразовать окно в Gdk или Gtk, заключается в том, что поэтому я могу использовать Gdk set_decorations
или Gtk set_hide_titlebar_when_maximized
.
Я взглянул на Gdk.Screen.get_default().get_toplevel_windows()
и Gtk.Window.list_toplevels()
, но они возвращают списки большего количества окон, чем у меня, и я не уверен, есть ли в списке мои фактические окна приложений и как их сопоставить.
Что касается 2. , если я сначала получу активное окно из GDK (поскольку я знаю, что это окно GDK, и оно правильно реагирует на такие события, как unmaximize
и maximize
в отличие от того, когда я использую foreign_new_for_display
), а затем пытаюсь удалить оформление согласно ранее связанному вопросу, окно (& process) умирает! Я не уверен, в чем ошибка.
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();
Если я использую curwin.set_decorations(Gdk.WMDecoration.BORDER)
(примечание: документация окна GDK здесь ), окно появляется так, как я хочу, когда окно не максимизировано (строка заголовка пропала), но когда развернуто, пространство для строка заголовка все еще остается, хотя сам текст не отображается.
Кто-нибудь сможет дать мне представление о том, как достичь любой из моих целей? (В конечном счете, автоматическое скрытие заголовков максимизированных окон, например, maximus
для ремикса нетбука Unity от Ubuntu). Я действительно хочу использовать это, используя Gtk / Gdk / wnck / mutter / что-нибудь с интроспекцией gobject, в отличие от внешнего приложения, такого как compiz, или изменения XML-темы окна метасити (что, я знаю, вы можете сделать для достижения этой цели).
После небольшого количества обсуждения с оболочкой гнома devs, это было разрешено.
преобразование я попытался сделать в 1. никогда не была опция - такая вещь не работает.
версия в 2. был корректный код, но будет только работать, если выполнено от внешний расширение оболочки гнома (т.е. выполните файл JavaScript с помощью gjs
двоичный файл в противоположность от зеркала или расширения). Оказалось, что слоняние без дела с художественными оформлениями окна как этот из процесса gnome-shell/mutter вызовет катастрофический отказ.
, Таким образом, проблема могла быть решена, пока код был выполнен от внешний расширение. Запуск внешнего процесса для выполнения сценария в опции 2), работал (хотя оказалось легче просто породить xprop
и установить _GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED
атом к true
на окне (определенный его X идентификаторами, будучи ребенок из окна с XID агента окна).
(Если кому-либо интересно, конечный результат расширение оболочки гнома Maximus )