2012-11-09 147 views
5

我正试图用xcb编写一个全屏应用程序,以供我自己的建构,并且遇到了上述问题。我发现了一些使用Xlib执行此操作的代码,但没有一个代码使用xcb。我已经找到了xcb_ewmh_connection_t结构,我试探性地使用这样的:如何使用xcb提供_NET_WM_STATE_FULLSCREEN提示?

xcb_connection_t *Connection = xcb_connect(NULL, NULL); 
xcb_ewmh_connection_t EWMH; 
xcb_intern_atom_cookie_t *EWMHCookie = xcb_ewmh_init_atoms(Connection, &EWMH); 

,然后使用与EWMH._NET_WM_STATE结构内部的原子等

鉴于这一点背景,我怎么能去关于窗口管理器提示窗口应该全屏?

回答

3

检查xcb_ewmh.h,它看起来像你对我还需要调用

if(!xcb_ewmh_init_atoms_replies(&EWMH, EWMHCookie, NULL)) 
    /* handle errors */; 

一旦你做到了这一点,该_NET_WM_STATE文件应该帮助如何使用这个特定属性。

请参阅ICCCM关于Client Properties的部分,了解使用属性与窗口管理器进行通信的技术背景。

请参阅ChangeProperty关于如何设置属性的一般要求。它通过通常的protocol stub rules映射到xcb_change_property函数。

我希望这是足够的参考,让你去!

+1

啊,谢谢!我确定在得到原子后,事实上他们会得到帮助。 :P对不起,是一个xcb noob,但我有点改变属性本身的问题。我是否错误地使用了这个功能? 'xcb_change_property(Connection,XCB_PROP_MODE_REPLACE,WindowID,EWMH._NET_WM_STATE,XCB_ATOM,32,1,&(EWMH._NET_WM_STATE_FULLSCREEN));' – cdbfoster

+3

我想通了!对于那个很抱歉。通过使用XCB_ATOM_ATOM而不是XCB_ATOM类型,它按预期工作。 – cdbfoster

+0

感谢您的意见@cdbfoster我遇到了同样的问题! – Noitidart