在一个程序中,我需要找出WM_CLASS
当前焦点窗口的属性。只要焦点窗口不是 gtk 应用程序,它就可以正常XGetInputFocus()
工作。XGetClassHint()
我编写了以下最小示例程序wmclass.c
:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
int main(int argc, char** argv)
{
Window win;
Display *d;
XClassHint *clh;
int rev;
int status;
clh = XAllocClassHint();
d = XOpenDisplay(0);
for(;;) {
XGetInputFocus(d, &win, &rev);
status = XGetClassHint(d,win,clh);
if (status)
printf("name: %s, class: %s\n", clh->res_name,clh->res_class);
else
printf("failed\n");
sleep(1);
}
XFree(clh);
}
该程序打印:
名称:xterm,类:XTerm
名称:xterm,类:XTerm
失败
失败
失败
名称:xterm,类:XTerm
名称:xterm,类:XTerm
名称:okular,类:Okular
名称:okular,类:Okular
失败
失败
名称:xterm ,类:XTerm
名称:xterm,类:XTerm
名称:xterm,类:XTerm
failed
如果 gtk 应用程序专注,就会出现。我测试了 emacs、gimp、chromium 和 ardour。
这是为什么?我如何获得WM_CLASS
gtk-windows?