Manual Pages for Linux CentOS command on man xcb-requests
MyWebUniversity

Manual Pages for Linux CentOS command on man xcb-requests

xcb-requests(3) XCB examples xcb-requests(3)

NAME

xcb-requests - about request manpages DESCRIPTION Every request in X11, like MapWindow, corresponds to a number of func‐ tions and data structures in XCB. For MapWindow, XCB provides the func‐ tion xcbmapwindow, which fills the xcbmapwindowrequestt data structure and writes that to the X11 connection. Since the MapWindow request does not have a reply, this is the most simple case. REPLIES Many requests have replies. For each reply, XCB provides at least a corresponding data structure and a function to return a pointer to a filled data structure. Let's take the InternAtom request as an example: XCB provides the xcbinternatomreplyt data structure and xcbinternatomreply function. For replies which are more complex (for example lists, such as in xcblistfonts), accessor functions are pro‐ vided. COOKIES

XCB returns a cookie for each request you send. This is an XCB-specific data structure containing the sequence number with which the request was sent to the X11 server. To get any reply, you have to provide that cookie (so that XCB knows which of the waiting replies you want). Here is an example to illustrate the use of cookies: void myexample(xcbconnection *conn) { xcbinternatomcookiet cookie; xcbinternatomreplyt *reply; cookie = xcbinternatom(conn, 0, strlen("NETWMNAME"), "NETWMNAME"); /* ... do other work here if possible ... */ if ((reply = xcbinternatomreply(conn, cookie, NULL))) {

printf("The NETWMNAME atom has ID %u\n", reply->atom); } free(reply); } CHECKED VS. UNCHECKED The checked and unchecked suffixes for functions determine which kind of error handling is used for this specific request. For requests which have no reply (for example xcbmapwindow), errors will be delivered to the event loop (you will receive an X11 event of type 0 when calling xcbpollforevent). If you want to explicitly check for errors in a blocking fashion, call the checked version of the function (for example xcbmapwindowchecked) and use xcbrequestcheck. For requests which have a reply (for example xcbinternatom), errors will be checked when calling the reply function. To get errors in the event loop instead, use the unchecked version of the function (for example xcbinternatomunchecked). Here is an example which illustrates the four different ways of han‐ dling errors: /* * Request without a reply, handling errors in the event loop (default) * */ void myexample(xcbconnection *conn, xcbwindowt window) { /* This is a request without a reply. Errors will be delivered to the event * loop. Getting an error to xcbmapwindow most likely is a bug in our * program, so we don't need to check for that in a blocking way. */ xcbmapwindow(conn, window); /* ... of course your event loop would not be in the same function ... */ while ((event = xcbwaitforevent(conn)) != NULL) {

if (event->responsetype == 0) {

fprintf("Received X11 error %d\n", error->errorcode); free(event); continue; } /* ... handle a normal event ... */ } } /* * Request without a reply, handling errors directly * */ void myexample(xcbconnection *conn, xcbwindowt deco, xcbwindowt window) { /* A reparenting window manager wants to know whether a new window was * successfully reparented. If not (because the window got destroyed * already, for example), it does not make sense to map an empty window * decoration at all, so we need to know this right now. */ xcbvoidcookiet cookie = xcbreparentwindowchecked(conn, window, deco, 0, 0); xcbgenericerrort *error; if ((error = xcbrequestcheck(conn, cookie))) { fprintf(stderr, "Could not reparent the window\n"); free(error); return; } /* ... do window manager stuff here ... */ } /* * Request with a reply, handling errors directly (default) * */ void myexample(xcbconnection *conn, xcbwindowt window) { xcbinternatomcookiet cookie; xcbinternatomreplyt *reply; xcbgenericerrort *error; cookie = xcbinternatom(c, 0, strlen("NETWMNAME"), "NETWMNAME"); /* ... do other work here if possible ... */ if ((reply = xcbinternatomreply(c, cookie, &error))) {

printf("The NETWMNAME atom has ID %u\n", reply->atom); free(reply); } else {

fprintf(stderr, "X11 Error %d\n", error->errorcode); free(error); } } /* * Request with a reply, handling errors in the event loop * */ void myexample(xcbconnection *conn, xcbwindowt window) { xcbinternatomcookiet cookie; xcbinternatomreplyt *reply; cookie = xcbinternatomunchecked(c, 0, strlen("NETWMNAME"), "NETWMNAME"); /* ... do other work here if possible ... */ if ((reply = xcbinternatomreply(c, cookie, NULL))) {

printf("The NETWMNAME atom has ID %u\n", reply->atom); free(reply); } /* ... of course your event loop would not be in the same function ... */ while ((event = xcbwaitforevent(conn)) != NULL) {

if (event->responsetype == 0) {

fprintf("Received X11 error %d\n", error->errorcode); free(event); continue; } /* ... handle a normal event ... */ } } SEE ALSO xcbmapwindow(3), xcbinternatom(3), xcblistfonts(3), xcbpollforevent(3), xcbrequestcheck(3) AUTHOR Michael Stapelberg

X Version 11 libxcb 1.13 xcb-requests(3)




Contact us      |      About us      |      Term of use      |       Copyright © 2000-2019 MyWebUniversity.com ™