X11:窗口属性不适用于gtk-windows

时间:2013-03-16 22:38:55

标签: properties gtk x11

在程序中我需要弄清楚当前焦点窗口的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);
}

此程序打印:

  

name:xterm,class:XTerm
  name:xterm,class:XTerm
  失败
  失败
  失败
  name:xterm,class:XTerm
  name:xterm,class:XTerm
  name:okular,class:Okular
  name:okular,class:Okular
  失败
  失败
  name:xterm,class:XTerm
  name:xterm,class:XTerm
  name:xterm,class:XTerm

如果重点关注gtk应用程序,则会出现

failed。我测试了emacs,gimp,chromium和ardor。

为什么?我如何得到WM_CLASS gtk-windows?

1 个答案:

答案 0 :(得分:0)

焦点不一定设置为顶级窗口。特别是,Gtk倾向于将其设置为这样一个窗口的孩子。

你需要走窗口树。