问题标签 [icccm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
759 浏览

x11 - 令人困惑的_NET_SUPPORTING_WM_CHECK

我正在尝试使我的窗口管理器符合 ICCCM 规范。我完全理解 _NET_SUPPORTING_WM_CHECK 原子的原因 - 这可以确保在窗口管理器不再运行时不会留下无效信息。

我不明白的是,为什么除了 _NET_WM_NAME 和 _NET_SUPPORTING_WM_CHECK 本身之外,支持窗口上没有像 _NET_NUMBER_OF_DESKTOPS 这样的其他原子。

窗口管理器应该设置和覆盖数据,但如果新窗口管理器不兼容,这可能会产生误导。

0 投票
3 回答
14897 浏览

c++ - 如何使用 xlib 识别顶级 X11 窗口?

我正在尝试获取 X11 会话中所有顶级桌面窗口的列表。基本上,我想获取在窗口管理器应用程序切换 UI 中显示的所有窗口的列表(通常在用户按下 ALT+TAB 时打开)。

我以前从未做过任何 X11 编程,但到目前为止,我已经设法枚举了整个窗口列表,代码如下所示:

enumerateWindows()最初使用根窗口调用。

就它打印出有关数百个窗口的信息而言,这是可行的-我需要的是弄清楚我可以询问哪个属性以确定给定Window的是否是顶级桌面应用程序窗口(不确定官方术语是什么), 或不。

任何人都可以对此有所了解吗?我为 X11 编程找到的所有参考文档都非常枯燥且难以理解。也许有人可以指出更好的资源?

0 投票
1 回答
488 浏览

x11 - X11,如何检测我是显示器上的最后一个窗口/应用程序

我有一个带有窗口管理器的 x11 显示器(遗憾的是不是一个特定的显示器,可能是 twm、dtwm、mwm、metacity ...)、myApp 和其他带有窗口的应用程序。如果其他应用程序已关闭并且 myApp 是唯一一个在显示屏上带有窗口的应用程序,我想关闭显示屏。我确实知道 myApp 的窗口,但是如何区分 windowmanger 的窗口和其他应用程序的窗口。

我目前正在使用 xwininfo -tree -root -children 进行轮询并将其与我的预期进行比较,但这仅适用于“定义明确”的环境。

似乎上面提到的许多窗口管理器都不支持 EWMH。

0 投票
1 回答
1025 浏览

utf-8 - X11 XM_NAME 类型是 'UTF-8' 而不是 STRING_UTF8

我正在查看一些XmbTextListToTextProperty用于设置WM_NAME属性的 X11 代码,带有 encoding style XTextStyle

http://tronche.com/gui/x/xlib/ICC/client-to-window-manager/XmbTextListToTextProperty.html建议XTextStyle意味着属性的类型/编码将取决于当前的语言环境。

我不知道如何解释http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.2.1,似乎它允许的类型WM_NAME取决于当前的语言环境。

我当前的语言环境是“en_US.UTF-8”。到目前为止,我所看到的一切都表明 of 的类型应该WM_NAME是 typeSTRING或.COMPOUND_STRINGUTF8_STRING

但是,xprop报告UTF-8xwininfo报告 'name in unsupported encoding UTF-8'。检查代码,确实支持UTF8_STRING但不支持UTF-8

我不知道这UTF-8是从哪里来的。有任何想法吗?

0 投票
1 回答
68 浏览

linux - 是否有一种标准方法可以知道窗口是浮动的还是平铺的?

我正在修改任务栏以仅显示浮动或最小化的窗口。我知道有ICCCMEWMH标准。我可以使用它们来检查窗口是浮动的还是平铺的?或者还有什么我可以使用的吗?

我不想专门为窗口管理器做这件事,因为我即将切换到另一个。

0 投票
2 回答
1645 浏览

linux - 剪贴板是由 xlib 实现还是由单个应用程序实现

ICCCM 定义了三个选择 1) 主要 2) 次要 3) 剪贴板。但是在 xlib 中,xatom.h 只定义了 XA_PRIMARY 和 XA_SECONDARY 但剪贴板没有这样的原子。所以我怀疑剪贴板是由 xlib 实现还是必须由诸如 primary 和 secondary 等单个应用程序实现?

如果它必须由单个应用程序实现,不同的应用程序将如何与剪贴板交互,就像从一个应用程序的窗口复制并粘贴到另一个应用程序的窗口一样......?不同的应用程序如何共享一个公共缓冲区?任何人都可以帮助在linux中实际实现剪贴板..吗?我已经通过这个链接。但是我很难找到有关实施的很多信息。

0 投票
0 回答
1252 浏览

window - X11:列出顶层窗口

到目前为止,我找到了两种方法:

  1. 对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),列出每个直接子窗口。递归地搜索每个直接子节点以查找具有该WM_STATE属性的窗口;该窗口成为直接子级的顶级应用程序窗口,并且所有递归都可以停止。如果直接子级的层次结构中没有窗口具有该WM_STATE属性,则假定直接子级本身就是顶级应用程序窗口。

    • 使用xcb_get_property, and xcb_query_tree(尽管名称仅列出直系子级)。

    • 这就是xlsclients通过 XCB 使用的(与上面相同的算法,或多或少)。

    • 要求:需要 ICCCM(窗口管理器)支持WM_STATE

  2. 对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),获取“_NET_CLIENT_LIST”属性,该属性列出了由窗口管理器管理的所有顶级应用程序窗口。

    • 使用xcb_get_property.

    • 这就是wmctrl通过 Xlib 使用的。

    • 需要窗口管理器来维护列表。一些窗口似乎逃脱了列表

    • 要求:EWMH(窗口管理器)支持_NET_CLIENT_LIST_WIN_CLIENT_LIST(我不知道第二个是什么;我找不到任何文档)。

问题:

  1. 还有其他方法吗?是否有任何不依赖于外部机制(如 ICCCM 或 EWMH)的方法?

  2. 哪种方法最有弹性?

    1. EWMH。我发现了一些报告(上面链接),某些应用程序没有在_NET_CLIENT_LIST. 为什么是这样?
    2. 国际商会。WM_STATE这种方法似乎更灵活,但是如果假设缺少的层次结构的直接子级是顶级应用程序窗口,则不会匹配其他无窗口应用程序吗?更糟糕的是,它不会在虚拟根窗口下严重崩溃吗?例如,虚拟根窗口成为唯一的直接子窗口,递归将在第一个应用程序窗口上停止,使用WM_STATE; 只会匹配一个窗口。针对这种可能性,xlsclients不包括对虚拟根窗口的任何检查......那么为什么它与 GNOME(使用虚拟根窗口)一起工作?
0 投票
1 回答
108 浏览

rust - 自定义窗口管理器:一些 GTK+ 3 窗口接收焦点但不接受鼠标点击

正如标题所说。我正在使用xcb库在 Rust 中编写自定义 X11 窗口管理器。一个特定的窗口——“配置”窗口cairo-dock——在聚焦时不会点击按钮 1,尽管在该窗口上取消了按钮 1。

以前,我认为所说的窗口没有保持焦点,但事实证明这是不正确的。相反,有问题的窗口正在接收焦点,但不允许单击任何按钮 1。


设置焦点的相关代码: