/* @(#)win_struct.h 1.1 94/10/31 SMI */ #ifndef sunwindow_win_struct_DEFINED #define sunwindow_win_struct_DEFINED /* * Copyright (c) 1986 by Sun Microsystems, Inc. */ /* * This header file defines the library interface to most of * the kernel functions of the window system. The remainder * functions are defined in pixwin.h. * * The kernel maintains a tree structure per-screen of * the relationship between the windows on the screen. * The top-level window in each screen is called the * root window and is generally owned by a screen manager. * Subwindows of the root window are generally owned by * ``tools'', which themselves may consist of multiple * windows at deeper levels. The window manager deals * with the tools, moving the deeper levels en-masse. * * A window is created by calling win_getnewwindow(). * An existing window can be opened multiple times by multiple processes and * the file descriptor is that which is used as the "ticket" to change * something about a window. * * Each window tracks the cursor with a shape... * * Each window has a parent, a place within a set of siblings * (specified as the oldest and youngest siblings), and a * set of children (specified as a oldest and youngest child). * These links are maintained by the system, and checked for * consistency when windows are inserted into and deleted from * the window tree. * * Each window competes for input. Whenever keyboard or mouse * actions occur, the system gives the window in which the cursor * is located a chance at the input. If that window is not * interested in the input, then its parent is given a chance, * and so on. If no one is interested, the input is discarded. * Input from a window may cause interrupts to be sent to the * ``owner process'' for the window. * * Each window also maintains a ``clipping list'' and a ``damaged list''. * The clipping list gives the set of rectangles which are currently * exposed for the window. The damaged list gives the set of * rectangles which are exposed, but known to be damaged by * recent window rearrangements, and which should therefore be * repainted by the responsible processes. */ #define WIN_NAMESIZE 20 /* * Link names. */ #define WL_PARENT 0 #define WL_OLDERSIB 1 #define WL_YOUNGERSIB 2 #define WL_OLDESTCHILD 3 #define WL_YOUNGESTCHILD 4 #define WL_ENCLOSING WL_PARENT #define WL_COVERED WL_OLDERSIB #define WL_COVERING WL_YOUNGERSIB #define WL_BOTTOMCHILD WL_OLDESTCHILD #define WL_TOPCHILD WL_YOUNGESTCHILD #define WIN_LINKS 5 #define WIN_NULLLINK -1 /* * Flag to use during open of window device when it is supposed to be the * first time opened (exclusive open). O_EXCL in file.h currently has wrong * mapping to FEXLOCK. Need a FEXCLOPEN in file.h. */ #define WIN_EXCLOPEN 0x10000 #ifdef cplus /* * C Library routine specifications relating * to kernel supported window functions. */ /* * Error handling (overriding library error handler, returns previous handler) */ int win_errorhandler(int *win_error(int errnum, winopnum)); /* * Tree operations. */ int win_getlink(int windowfd, int linkname); void win_setlink(int windowfd, int linkname, number); void win_insert(int windowfd); void win_remove(int windowfd); int win_nextfree(int windowfd); /* utilities */ void win_numbertoname(int number, char *name); int win_nametonumber(char *name); void win_fdtoname(int windowfd, char *name); int win_fdtonumber(int windowfd); int win_getnewwindow(); /* * Mouse cursor operations. */ void win_setmouseposition(int windowfd, short x, y); void win_setcursor(int windowfd, struct cursor *cursor); void win_getcursor(int windowfd, struct cursor *cursor); int win_findintersect(int windowfd, short x, y); /* * Geometry operations. */ void win_getrect(int windowfd, struct rect *rect); void win_setrect(int windowfd, struct rect *rect); void win_setsavedrect(int windowfd, struct rect *rect); void win_getsavedrect(int windowfd, struct rect *rect); /* utilities */ void win_getsize(int windowfd, struct rect *rect); coord win_getheight(int windowfd); coord win_getwidth(int windowfd); /* blanket window operations */ int win_insertblanket(int windowfd, parentfd); void win_removeblanket(int windowfd); int win_isblanket(int windowfd); /* * Misc operations. */ int win_getuserflags(int windowfd); void win_setuserflags(int windowfd, flags); void win_setowner(int windowfd, pid); int win_getowner(int windowfd); /* utilities */ void win_setuserflag(win windowfd, int flag, bool value); /* * Input control. */ void win_getinputmask(int windowfd, struct inputmask *im, int *inputredirectwindownumber); void win_setinputmask(int windowfd, struct inputmask *im_set, *im_flush, int inputredirectwindownumber); /* * Kernel operations applying globally to a screen. */ void win_lockdata(int windowfd); void win_computeclipping(int windowfd); void win_partialrepair(int windowfd, struct rect *rectok); void win_unlockdata(int windowfd); void win_grabio(int windowfd); void win_releaseio(int windowfd); /* * Display management operations (see pixwin.h). */ /* * Screen creation, inquiry and deletion. */ int win_screennew(struct screen *screen); void win_screenget(int windowfd, struct screen *screen); void win_screendestroy(int windowfd); void win_setscreenpositions(int windowfd, int neighbors[SCR_POSITIONS]); void win_getscreenpositions(int windowfd, int neighbors[SCR_POSITIONS]); #endif cplus #endif sunwindow_win_struct_DEFINED