Xlib如何在不同的程序中使用XSaveContext / XFindContext

时间:2014-04-25 13:13:57

标签: c++ xlib

我有两个程序,我希望一个程序将一个结构附加到它的窗口,另一个程序来读取这个结构。我必须使用X.

我尝试使用XSaveContextXFindContext。我设法将一个结构附加到一个窗口,然后在同一个程序中读取它。

然后我创建了一个使用XSaveContext将结构附加到其窗口的程序。同时,另一个程序列出了所有打开的窗口,并尝试为每个窗口找到一个结构

保存上下文

XContext contextUserData = 100;
UserData data;
UserData *ptr_data = &data;

data.name = "app01 userdata name";
data.refNumber = 777;

XSaveContext(disp, win, contextUserData, XPointer(ptr_data));

std::cout<<"disp "<<disp<<" win "<<parent<<std::endl;

查找上下文:

XContext contextUserData = 100;
UserData data_return;
UserData *ptr_data = &data_return;
XPointer xpointer = XPointer(ptr_data);
XPointer *xptr = &xpointer;

if (XFindContext(mDisplay(), allWin[i], contextUserData, (xptr)) == 0)
{
    ptr_data = (UserData*)(*xptr);
    std::cout<<"name : "<<ptr_data->name<<" refNumber : "<<ptr_data->refNumber<<std::endl;
}
else
{
    std::cout<<"disp "<<mDisplay()<<" win "<<allWin[i]<<" No info"<<std::endl;
}

附加结构的程序显示:

disp 0x983d488 win 33554435

并且查找结构的程序显示:

disp 0x9f922f0 win 31457287 No info
disp 0x9f922f0 win 31457316 No info
disp 0x9f922f0 win 23137913 No info
disp 0x9f922f0 win 33554434 No info
disp 0x9f922f0 win 33554435 No info (the right window)
disp 0x9f922f0 win 23138015 No info

我测试了正确的窗口,但我没有得到任何结果。

我想知道是否必须使用相同的显示调用XSaveContext和XFindContext来返回结构。

所以我的问题是,如何将个人数据添加到窗口并使其可被其他窗口读取?

谢谢。

1 个答案:

答案 0 :(得分:1)

您无法通过这种方式在两个流程之间共享数据:

  

请注意,这是您的计划的本地内容;数据没有存储在   属性列表中的服务器

我建议使用window properties作为共享数据存储