【发布时间】:2014-12-21 06:02:09
【问题描述】:
我正在将此用于屏幕保护程序的测试从 linux 代码转换为 js-ctypes。
它大量使用X11,但我找不到任何菜单功能。
这是我正在尝试转换的代码:
1012 XMenuList::GetInstance()->InsertMenuWindowXIDs(&windows);
1013 // Enumerate the menus first.
1014 for (iter = windows.begin(); iter != windows.end(); iter++) {
1015 if (delegate->ShouldStopIterating(*iter))
1016 return true;
1017 }
1018 windows.clear();
此代码可在此处找到:http://mxr.mozilla.org/chromium/source/src/ui/base/x/x11_util.cc#1012
基本上我试图通过窗口进行枚举,但他们在寻找屏幕保护程序时也会检查菜单。
我偶然发现了这张纸条:
X11 本身不做菜单。这就是创建 GTK、Qt、Motif 等工具包的原因。
http://www.linuxquestions.org/questions/programming-9/x11-menus-how-to-839904/
这是否意味着我应该ctypes.open X11 以外的另一个库,有人知道是哪一个吗?我找不到。
谢谢
这是我正在编写的代码:https://github.com/Noitidart/_scratchpad/blob/master/ScreensaverWindowExists.js#L365
这是我用于 x11 函数的 freedocs 页面:http://www.xfree86.org/4.4.0/manindex3.html
【问题讨论】:
-
不清楚您指的是哪种菜单。正如您正确引用的注释所说,X11 没有菜单的概念。工具包可以帮助你的程序实现菜单,它不会将菜单引入 X 服务器,也不能帮助你检测其他程序实现的菜单。 “枚举 X11 中的菜单”是什么意思?
-
好的,如果您查看here,您会发现对于Mozilla,菜单只是一个将
_NET_WM_WINDOW_TYPE属性设置为_NET_WM_WINDOW_TYPE_MENU的窗口。这是一个“撕下”主应用程序并固定在桌面上的菜单。您不需要任何特殊的库来检测这一点,只需使用普通的属性操作函数即可。我不太明白为什么屏幕保护程序需要它。 -
谢谢@n.m。 !!其他人,如果您知道为什么 google chrome 会执行“enum menus 1st”上方的代码,请告诉我 :)
-
@n.m.如果不是您,您能否将您的 cmets 移至解决方案,直到现在我都会迷路,即使您不是 jsctypes 人,我也非常感谢您的 cmets。谢谢!!
标签: firefox-addon x11 jsctypes