Provided by: libafterimage-dev_2.2.12-2_amd64 bug

NAME

       common - common functions used in other examples libAfterImage/tutorials/common.h

SYNOPSIS

       Generic Xlib related functionality, common for all the tutorials.

SEE ALSO

       libAfterImage, ASView, ASScale, ASTile, ASMerge, ASGrad, ASFlip, ASText
       libAfterImage/tutorials/_XA_WM_DELETE_WINDOW

NAME_XA_WM_DELETE_WINDOW

SYNOPSIS

       _XA_WM_DELETE_WINDOW - stores value of X Atom "WM_DELETE_WINDOW".

DESCRIPTION

       In  X  all  client's  top  level  windows are managed by window manager.  That includes moving, resizing,
       decorating, focusing and closing of windows. Interactions between window manager and  client  window  are
       governed  by ICCCM specification.  All the parts of this specification are completely optional, but it is
       recommended that the following minimum  set  of  hints  be  supplied  for  any  client  window:  Window's
       title(WM_NAME),  iconified  window  title(WM_ICON_NAME),  class  hint  (WM_CLASS) and supported protocols
       (WM_PROTOCOLS). It is recommended also that WM_DELETE_WINDOW protocol be supported,  as  otherwise  there
       are  no  way  to  safely  close  client  window,  but  to  kill it.  All of the above mentioned hints are
       identified by atoms that have standard preset values, except for WM_DELETE_WINDOW. As the result we  need
       to obtain WM_DELETE_WINDOW atoms ID explicitly. We use _XA_WM_DELETE_WINDOW to store the ID of that atom,
       so it is accessible anywhere from our application.

SOURCE

           Atom _XA_WM_DELETE_WINDOW = None;

       libAfterImage/tutorials/create_top_level_window()

NAMEcreate_top_level_window()

SYNOPSIS

       Window create_top_level_window( ASVisual *asv, Window root,
                                       int x, int y,
                                       unsigned int width,
                                       unsigned int height,
                                       unsigned int border_width,
                                       unsigned long attr_mask,
                                       XSetWindowAttributes *attr,
                                       char *app_class );

INPUTS

       asv    - pointer to valid preinitialized ASVisual structure.

       root   - root window of the screen on which to create window.

       x,     y - desired position of the window

       width, height - desired window size.

       border_width
              - desired initial border width of the window (may not  have  any  effect  due  to  Window  Manager
              intervention.

       attr_mask
              - mask of the attributes that has to be set on the window

       attr   - values of the attributes to be set.

       app_class
              - title of the application to be used as its window Title and resources class.

RETURN VALUE

       ID of the created window.

DESCRIPTION

       create_top_level_window()  is  autyomating  process  of creating top level application window. It creates
       window for specified ASVisual, and then sets up basic ICCCM hints  for  that  window,  such  as  WM_NAME,
       WM_ICON_NAME, WM_CLASS and WM_PROTOCOLS.

SOURCE

           Window create_top_level_window( ASVisual *asv, Window root, int x, int y,
                                    unsigned int width, unsigned int height,
                                    unsigned int border_width,
                                    unsigned long attr_mask,
                                    XSetWindowAttributes *attr,
                                    const char *app_class, const char *app_name ) {
               Window w = None; #ifndef X_DISPLAY_MISSING
               char *tmp ;
               XTextProperty name;
               XClassHint class1;

               w = create_visual_window(asv, root, x, y, width, height, border_width,
                                        InputOutput, attr_mask, attr );

               tmp = (app_name==NULL)?(char*)get_application_name():(char*)app_name;
               XStringListToTextProperty (&tmp, 1, &name);

               class1.res_name = tmp;  /* for future use */
               class1.res_class = (char*)app_class;
               XSetWMProtocols (asv->dpy, w, &_XA_WM_DELETE_WINDOW, 1);
               XSetWMProperties (asv->dpy, w, &name, &name, NULL, 0, NULL, NULL, &class1);
               /* final cleanup */
               XFree ((char *) name.value);

           #endif /* X_DISPLAY_MISSING */
               return w; }

       libAfterImage/tutorials/set_window_background_and_free()

NAMEset_window_background_and_free()

SYNOPSIS

       Pixmap set_window_background_and_free( Window w, Pixmap p );

INPUTS

       w      - ID of the window background of which we need to set.

       p      - Pixmap to set background to.

RETURN VALUE

       None on success. Pixmap ID of original Pixmap on failure.

DESCRIPTION

       set_window_background_and_free()  will  set  window's background to specified Pixmap, Then refresh window
       contents so that background is drawn by the server, flush all the requests to force  it  to  be  sent  to
       server to be processed as fast as possible.

NOTES

       After  Window's  background  has been set to Pixmap - X server makes hidden copy of this Pixmap for later
       window refreshing. As the result original Pixmap is no  longer  needed  and  can  be  freed  to  conserve
       resources.

SOURCE

           Pixmap set_window_background_and_free( Window w, Pixmap p ) { #ifndef X_DISPLAY_MISSING
               if( p != None && w != None )
               {
                   Display *dpy = get_default_asvisual()->dpy;

                   if (dpy)
                   {
                       XSetWindowBackgroundPixmap( dpy, w, p );
                       XClearWindow( dpy, w );
                       XFlush( dpy );
                       XFreePixmap( dpy, p );
                       p = None ;
                   }
               } #endif /* X_DISPLAY_MISSING */
               return p ; }

       libAfterImage/tutorials/wait_closedown()

NAMEwait_closedown()

SYNOPSIS

       void wait_closedown( Window w );

INPUTS

       w      - ID of the window from which to wait for events.

DESCRIPTION

       User  action requesting window to be closed is generally received first by Window Manager. Window Manager
       is then handles it down to the window by sending it ClientMessage event with first 32 bit  word  of  data
       set to the value of WM_DELETE_WINDOW Atom.  Accordingly, all client has to do is wait for such event from
       X server and, when received, it should destroy its window and generally exit.

NOTES

       It is recommended that XFlush() is issued right after  XDestroyWindow()  as  Window  Manager  itself  may
       attempt to do something with the window until it receives DestroyNotify event.

SEE ALSO

       ICCCM, Window

SOURCE

           void wait_closedown( Window w ) { #ifndef X_DISPLAY_MISSING
               Display *dpy = get_default_asvisual()->dpy;

               if(dpy)
               {
                   if (w)
                   {
                       XSelectInput (dpy, w, ( StructureNotifyMask |
                                               ButtonPressMask|
                                               ButtonReleaseMask));

                       while(w != None)
                       {
                           XEvent event ;

                           XNextEvent (dpy, &event);
                           switch(event.type)
                           {
                               case ClientMessage:
                                   if ((event.xclient.format != 32) ||
                                       (event.xclient.data.l[0] != _XA_WM_DELETE_WINDOW))
                                       break ;
                               case ButtonPress:
                                   XDestroyWindow( dpy, w );
                                   XFlush( dpy );
                                   w = None ;
                                   break ;
                           }
                       }
                   }
                   XCloseDisplay (dpy);
               } #endif }