首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mutter、gdk、wnck或gtk在gnome-shell中隐藏窗口标题。

使用mutter、gdk、wnck或gtk在gnome-shell中隐藏窗口标题。
EN

Ask Ubuntu用户
提问于 2012-05-04 01:42:46
回答 1查看 4.6K关注 0票数 4

我想找个办法:

  1. 获取当前打开的所有应用程序窗口的列表,作为Gdk或Gtk窗口
  2. 删除所选窗口的窗口装饰(在我的情况下最大化)。

我想用mutter,gdk,wnck或gtk (或GdkX11,.)来做这件事。(即任何带有客观反省的事物)。

我已经看到了以下问题:从最大化的终端窗口中删除标题栏,但我很难将它转换为有用的东西。

(我使用的语言是javascript,但这有点无关紧要,因为它都使用gobject自省)。

我目前正在使用GNOME3.2(不过,我可以使用GNOM3.4解决方案)。

至于1.我知道我可以很容易地获得wnckmutter的所有窗口(例如Wnck.Screen.get_default().get_windows()),但是如何将这些窗口转换为G(t或d?)k窗口以删除装饰?

我可以将喃喃的窗口转换为Gdk窗口,如下所示:

代码语言:javascript
复制
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窗口,并且它正确地响应诸如unmaximizemaximize之类的事件,而不是当我使用foreign_new_for_display时),然后按照前面链接的问题尝试删除装饰,窗口(& process)就会死!我不知道这是什么错误。

代码语言:javascript
复制
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为Ubuntu的统一上网本混音)。我确实希望使用Gtk/Gdk/wnck/mutter/任何带有gobject内省功能的应用程序,而不是像compiz这样的外部应用程序或修改元操作窗口主题的XML (我知道您可以这样做)。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2013-01-22 00:15:31

在与gnome开发人员进行了一些讨论之后,这个问题得到了解决。

我试图在1中进行的转换从来不是一种选择--这类事情不起作用。

2中的版本是正确的代码,但只有在gnome扩展之外运行时才能工作(即使用gjs二进制文件运行javascript文件,而不是使用外观玻璃或扩展名)。事实证明,在gnome/喃喃过程中乱搞这样的窗口装饰会导致崩溃。

因此,只要代码从扩展外部运行,问题就可以解决。启动外部进程以运行选项2中的脚本是有效的(尽管结果证明只生成xprop并在窗口上将_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED原子设置为true更容易(通过其XID标识,它是窗口参与者的XID的子窗口)。

(如果有人感兴趣,最终结果是极大gnome壳扩展)

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/131159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档