[Xcb] EWMH API for XCB

Jamey Sharp jamey at minilop.net
Tue Dec 15 19:34:35 PST 2009

On Wed, Dec 16, 2009 at 01:14:47AM +0100, Arnaud Fontaine wrote:
> >>>>> Jamey Sharp <jamey at minilop.net> writes:
>     >> I'm a bit confused by this macro and does not understand anything
>     >>  besides of  the basic  principle.  I was  thinking about  simply
>     >> adding an assertion otherwise.
>     > Absolutely, that would be better than nothing.
> Well, I think  it would be better to  not make it static as  it could be
> useful to any program implementing extensions to EWMH.

That makes sense.

> Therefore, I have just added an assert()[0]. I think it's ok this way,
> isn't it?

Josh's explanation of the difficulties with asserts aside, it's fine
with me. :-)

>     >  I'm not talking  about different  connections. I'm  talking about
>     >  different screens  on  the  same connection.  All  the atoms  are
>     > guaranteed to be the same in that case, except for _NET_WM_CM_Sn.
> Oh  ok, I  didn't think  at all  about that  as I  have never  used such
> configuration.

A nice way to test a multi-screen setup is with Xnest or Xephyr, which
let you configure several screens that all show up as windows on your
real screen.

> Therefore, I removed root member of xcb_ewmh_connection_t
> in favor  of screens  and nb_screens.  I  added a parameter,  namely the
> screen  number, to all  the functions  using the  root window.   Also, I
> modified _NET_WM_CM_Sn  which is now  per-screen (xcb_atom_t *).  I have
> committed it there[1].

Cool, I like this much better! I hope passing the screen number to all
those calls doesn't make using this code too painful?

Minor further suggestions, in xcb_ewmh_init_atoms:

You don't need to count the number of screens. You have a bunch of
options, but since you're getting an iterator over them, I'd just set
ewmh->nb_screens = screen_iter.rem before using the iterator in any
loops. Or if you want your code to be more self-explanatory, set
ewmh->nb_screens = xcb_setup_roots_length(setup).

Each entry in wm_cm_sn is used only once, so I'd declare it inside the
loop as a single buffer that you reuse each time, instead of using C99's
variable-length arrays (VLA). It's nice that C99 added VLA support, but
you don't need it here, and last I checked GDB did a bad job debugging
functions with VLAs in them.

> Hrm ok, oops... I have  silently and discretly edited my previous commit
> to hide that :).

Nicely done. ;-) Looks right to me now, and the history clearly shows
that it was right all along. ;-)

>     >> > Do you really want it in the xcb-util bundle though?
> I think it  does make sense and  I will put it in  a separate repository
> then. However, I think it would  be good to share at least configure.ac,
> coding style (I  have not found anything like that  except by looking at
> existing  code but  it's  pretty unconsistent  ATM  AFAIK), and  Doxygen
> configuration in  order to  have something consistent  across libraries,
> even though I'm  not sure how it could be achieve.   Maybe a document on
> the  wiki giving  some templates  such as  Doxygen and  configure.ac and
> another one for the coding style as it's more general?

I'm not as concerned as you are about consistency across different
projects, but I think there's a lot of value in documenting "best
practices" for setting up these projects. I'd completely approve of
additions to the wiki about these topics, but of course it's a wiki, so
you don't need my approval anyway. :-)

> Thank you  very much for all  your comments. The code  looks much better
> now!

Thanks for your hard work. :-) This is cool!

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
Url : http://lists.freedesktop.org/archives/xcb/attachments/20091215/962c6529/attachment.pgp 

More information about the Xcb mailing list