2021-10-11 18:37:13 -03:00

178 lines
5.4 KiB
C

/* @(#)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