[Xcb] XCB naming conventions

Ian Osgood iano at quirkster.com
Sat Sep 16 15:14:45 PDT 2006


On Sep 16, 2006, at 1:47 PM, Bernardo Innocenti wrote:

> Jeremy A. Kolb wrote:
>
>> For functions:
>> xcb_ followed by the extension and function name all in lowercase,  
>> words separated by underscores.
>> Ex.
>> xcb_window_new
>> xcb_glx_create_context.
>
>
> I know I'm late to suggest this, but wouldn't it be better if we  
> prefixed
> functions with "x_" instead of "xcb_"?
>
> XConnection connection = x_connect(NULL, NULL);
> XWindow window = x_window_new(connection);
> ...
>
> The advantage is that it shifts focus from libary name (XCB) to  
> technology
> being used (X).  Someone reading the code will be less likely to say
> "what's this xcb thing?".  Besides it's shorter and easier to type :-)

Works for me.  In fact, you could argue that the XCB library is more  
X than Xlib.

One minor problem; discussing the API verbally might lead to  
confusion with the old Xlib API.

>
> And as we're breaking source level compatibility, I'd like to ask for
> another change: could we re-order the fields in XCB*Event  
> structures so
> that it could be dispatched in a more polymorphic fashion?  The  
> current
> scheme requires lots of pointer casting and is very unsafe.

No, because those structures also mirror the X wire protocol, which  
is set in stone.

Perhaps what you would rather have is an xcb::Event base class, a  
tree of subclasses for the specific events, and a factory for  
producing them given an XCBGenericEvent.  Then you could have an  
Event::window() method that really could be polymorphic, regardless  
of the internal structure of the event on the wire.

(BTW, you mean e->window below, right? Only the Graphics/No exposure  
events have drawables.)

>
> An application event loop will usually want to delegate handling some
> events such as XCBExposeEvent or XCBResizeRequestEvent to the  
> underlying
> object associated with the drawable or with the window:
>
>   void Screen::exec()
>   {
>       while (XCBGenericEvent *e = XCBPollForEvent(connection, 0))
>       {
>           switch (e->response_type & ~0x80)
>           {
>                // Dispatch all window-related events to windows
>                case XCBExposeEvent:
>                case XCBResizeRequestEvent:
>                ...
>                {
>                    MyFancyWindowClass *w;
>
>                    if (w = find_Window(e->drawable))
>                        w->handleEvent(e);
>                    break;
>                }
>           }
>       }
>   }
>
> By the way, has anybody written a C++ wrapper for XCB?  I felt the
> need for some wrapper classes when I wrote some XCB code in C++.

The core XCB devs all seem to be allergic to C++.  Taking the "XCB"  
off of every identifier and putting it in a namespace would be nice,  
though.

On a related note, one of the Google Summer of Code projects was to  
develop XCB Objective-C bindings.  How did that turn out?

Ian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freedesktop.org/archives/xcb/attachments/20060916/1f94b7ba/attachment.html


More information about the Xcb mailing list