|
|
1.1 root 1: .NH
2: Creating and Destroying Windows
3: .XS
4: Window Related Operations
5: .XE
6: .PP
7: .IN "Definitions" "Opaque Window"
8: .IN "Definitions" "Transparent Window"
9: There are two kinds of windows, opaque and transparent.
10: If an opaque
11: window is stacked `on top of' another window, it obscures that other
12: window for the purpose of both input and output.
13: Attempts to output to
14: the obscured area will do nothing, and no input events (e.g. mouse
15: motion) will be generated for the obscured area.
16: Most windows are opaque.
17: Opaque windows have borders of a programmable width and pattern
18: and a background pattern (or `tile').
19: .IN "Tile Pixmaps"
20: Tile and border patterns are described using Pixmaps.
21: In a program, you refer to the window using its resource id,
22: of type `Window'.
23: .PP
24: .IN "Resource ID's" "Freeing"
25: .IN "Freeing" "Resources"
26: The background and border pixmaps may be destroyed immediately after
27: creating the window if no further explicit references to them
28: are to be made.
29: .PP
30: .IN "Definitions" "Tile Mode"
31: An opaque window's background is tiled with a pattern (most commonly a constant
32: color).
33: This pattern can either be relative to the parent (the pattern will be
34: shifted appropriately to match the parent window) or absolute
35: (the pattern will be positioned in the window independently of the
36: parent window).
37: This is called the `tile mode' of a window,
38: and can be set by subroutine calls.
39: .PP
40: .IN "Definitions" "Clip Mode"
41: It is also possible to specify if graphics operations will be clipped by
42: child windows or will write through the children.
43: This is called the `clip mode' of a window.
44: .PP
45: .IN "Input" "Transparent Window"
46: A transparent window obscures other windows for the purpose of input
47: only.
48: .IN "Parent Window"
49: .IN "Output" "On Transparent Windows"
50: Doing output to a transparent window is equivalent to output to
51: the parent window, except that the transparent window's own clip mode is
52: .IN "XClipMode"
53: used instead of the parent's (see \fIXClipMode\fP below), and the output is
54: clipped to the boundaries of the transparent window.
55: If a transparent window is moved, it has no effect on the display.
56: Transparent windows do not have borders.
57: .PP
58: .IN "Window" "RootWindow"
59: .IN "RootWindow"
60: .IN "Macro" "RootWindow"
61: The macro \fIRootWindow\fP is a convenient shorthand for referring to the
62: root of the window hierarchy, and is usually used as the \fIparent\fPn
63: argument to most calls.
64: .PP
65: When windows are first created, they are not visible on the screen.
66: Any output to a window not visible (not `mapped') on the screen
67: will be discarded.
68: An application may wish to create a window long before it is
69: mapped to the screen.
70: When an opaque window is eventually mapped to the screen
71: (using \fIXMapWindow\fP)
72: .IN "Window" "Mapping to screen"
73: .IN "XMapWindow"
74: it will generate an exposure event for the window.
75: .IN "Exposure Event"
76: .FD
77: .IN "Definitions" "XCreateWindow"
78: .IN "XCreateWindow"
79: Window XCreateWindow (parent, x, y, width, height, borderwidth, border, bgnd)
80: Window parent;
81: int x, y, width, height;
82: int borderwidth; /* border width */
83: Pixmap border;
84: Pixmap background;
85: .FN
86: \fIXCreateWindow\fP creates an unmapped,
87: opaque subwindow of the specified parent window,
88: which must also be opaque.
89: The created window will always be wholly
90: contained within its \fIparent\fP,
91: any part of the window extending outside its parent window will be clipped.
92: .PP
93: The \fIx\fP and \fIy\fP
94: coordinates represent the top left outside corner of the new window's
95: borders.
96: They are relative to the inside of the \fIparent\fP window's
97: borders.
98: The \fIwidth\fP and \fIheight\fP parameters are the new window's inside
99: dimensions--they do not include the new window's borders,
100: which are entirely outside of the window.
101: The new window will have a border \fIborderwidth\fP pixels wide.
102: .PP
103: .IN "Window" "Border"
104: .IN "Window" "Background"
105: .IN "Macro" "BlackPixmap"
106: .IN "Macro" "WhitePixmap"
107: .IN "BlackPixmap"
108: .IN "WhitePixmap"
109: A \fIborder\fP Pixmap need not be given if the border width is zero,
110: in which case the window will not have a border.
111: If no \fIbackground\fP Pixmap is given, the parent's background Pixmap is
112: used. A monochrome application may find the macros \fIBlackPixmap\fP and
113: \fIWhitePixmap\fP useful; these refer to solid black and white pixmaps that
114: are automatically created by \fIXOpenDisplay\fP.
115: .PP
116: .IN "Window" "Tile Mode"
117: The \fItilemode\fP of the new window is absolute.
118: .IN "Window" "Clip Mode"
119: The \fIclipmode\fP of the new window is `clipped'.
120: .IN "Icon" "Creating Windows"
121: The new window does not have an associated icon window.
122: .IN "Window" "Name"
123: The \fIname\fP of the window is the null string.
124: .PP
125: The created window is not yet displayed (`mapped') on the user's display;
126: to display the
127: .IN "XMapWindow"
128: window, call \fIXMapWindow\fP.
129: .IN "Cursor" "Initial State"
130: The new window will not have a cursor defined; the cursor will
131: be that of the window's parent until/unless a cursor is registered.
132: The window will not be visible on the screen unless it and all of its
133: ancestors are `mapped', and it is not obscured by any of its ancestors.
134: .IN "XDefineCursor"
135: .PP
136: The subroutine returns the window id of the created window, or 0 if
137: the subroutine fails.
138: .FD
139: .IN "Definitions" "XCreateTransparency"
140: .IN "XCreateTransparency"
141: Window XCreateTransparency (parent, x, y, width, height)
142: Window parent;
143: int x, y, width, height;
144: .FN
145: \fIXCreateTransparency\fP creates an unmapped transparent
146: window.
147: Transparent windows do not have borders.
148: The coordinates are relative to the parents coordinate system.
149: .IN "Transparent Window" "Clip Mode"
150: .IN "Transparent Window" "Initial Cursor"
151: The
152: window will not initially have a cursor registered, and will have a
153: clipmode of \fIClipModeClipped\fP
154: (i.e. output to the window is obscured by subwindows of
155: the parent).
156: .IN "Transparent Window" "Background"
157: .IN "Transparent Window" "Border"
158: .IN "Transparent Window" "Tile Mode"
159: A transparent window does not have a border or background pattern.
160: It initially has a tile mode of \fITileModeRelative\fP.
161: .PP
162: The subroutine returns the window id of the created window, or 0 if
163: the subroutine fails.
164: .FD
165: .IN "Definitions" "XDestroyWindow"
166: .IN "XDestroyWindow"
167: XDestroyWindow (w)
168: Window w;
169: .FN
170: \fIXDestroyWindow\fP unmaps and destroys the window and all of its subwindows.
171: The windows should never again be referenced.
172: \fIXDestroyWindow\fP may be
173: called on either opaque or transparent windows.
174: .PP
175: .IN "Icon" "Mapping Behavior"
176: If the window has an icon window, that icon window is automatically unmapped
177: and sent an unmap window event.
178: If the window is a mapped icon window,
179: its corresponding `regular' window is automatically mapped.
180: This prevents windows being lost when a window manager exits unexpectedly.
181: .PP
182: Destroying a mapped opaque window will generate exposure events on other
183: opaque windows that were obscured by the window being destroyed.
184: .PP
185: .IN "XCloseDisplay"
186: \fIXCloseDisplay\fP automatically destroys all windows that have been created
187: .IN "Unix System Call" "fork"
188: on that server (unless called after a \fIfork()\fP--see note under
189: \fIXCloseDisplay\fP).
190: .FD
191: .IN "Definitions" "XDestroySubwindows"
192: .IN "XDestroySubwindows"
193: XDestroySubwindows (w)
194: Window w;
195: .FN
196: .IN "XDestroySubwindows"
197: \fIXDestroySubwindows\fP destroys all subwindows of this window. The
198: subwindows should never again be referenced.
199: .PP
200: \fIXDestroySubwindows\fP generates exposure events on \fIw\fP, if any mapped
201: opaque subwindows were actually destroyed.
202: .PP
203: Note that this is MUCH more efficient than deleting many windows
204: one at a time, as much of the work need only be performed once for all
205: of the windows rather than for each window.
206: .PP
207: To allow efficient creation of many similar windows or subwindows
208: simultaneously
209: (a function often wanted when creating menus or complex forms),
210: .IN "XCreateWindow"
211: .IN "XCreateTransparency"
212: .IN "XCreateWindowBatch"
213: both \fIXCreateWindow\fP and \fIXCreateTransparency\fP have analogous forms
214: which take structures of the form:
215: .DS
216: .TA .5i 3i
217: .ta .5i 3i
218: typedef struct _OpaqueFrame {
219: Window self; /* window id of the window, filled in later */
220: short x, y; /* where to create the window */
221: short width, height; /* window size */
222: short bdrwidth; /* border width */
223: Pixmap border; /* border pixmap */
224: Pixmap background;
225: } OpaqueFrame;
226: .DE
227: .IN "Definitions" "OpaqueFrame"
228: .IN "Data Structures" "OpaqueFrame"
229: .IN "OpaqueFrame"
230: .DS
231: .TA .5i 3i
232: .ta .5i 3i
233: typedef struct _TransparentFrame {
234: Window self; /* window id of the window, filled in later */
235: short x, y; /* where to create the window */
236: short width, height;
237: } TransparentFrame;
238: .DE
239: .IN "Definitions" "BatchFrame"
240: .IN "Data Structures" "BatchFrame"
241: .IN "BatchFrame"
242: .DS
243: .TA .5i 3i
244: .ta .5i 3i
245: typedef struct _BatchFrame {
246: short type; /* One of (IsOpaque, IsTransparent). */
247: Window parent; /* Window if of the window's parent. */
248: Window self; /* Window id of the window, filled in later. */
249: short x, y; /* Where to create the window. */
250: short width, height; /* Window width and height. */
251: short bdrwidth; /* Window border width. */
252: Pixmap border; /* Window border pixmap */
253: Pixmap background; /* Window background pixmap. */
254: } BatchFrame;
255: .DE
256: .fi
257: .IN "Definitions" "TransparentFrame"
258: .IN "Data Structures" "TransparentFrame"
259: .IN "TransparentFrame"
260: .FD
261: .IN "Definitions" "XCreateWindows"
262: .IN "XCreateWindows"
263: int XCreateWindows (parent, defs, ndefs)
264: Window parent;
265: OpaqueFrame defs[];
266: int ndefs;
267: .FN
268: This subroutine takes an array of window information definitions
269: and creates them in a single handshake with the window system.
270: The caller should have filled in the structure except for the window id.
271: The window id's of the created windows are returned in the structure
272: passed to the subroutine.
273: You must specify the number of windows to be created using the
274: \fIndefs\fP argument.
275: .IN "XCreateWindow"
276: The other side-effects are the same as for \fIXCreateWindow\fP.
277: The subroutine returns the number of windows actually created.
278: .FD
279: .IN "Definitions" "XCreateTransparencies"
280: .IN "XCreateTransparencies"
281: int XCreateTransparencies(parent, defs, ndefs)
282: Window parent;
283: TransparentFrame defs[];
284: int ndefs;
285: .FN
286: This subroutine takes an array of window information definitions
287: and creates the transparencies in a single handshake with the window system.
288: The caller should have filled in the structure except for the window id.
289: The window id's of the created windows are returned in the structure
290: passed to the subroutine.
291: You must specify the number of windows to be created using the
292: ndefs argument.
293: .IN "XCreateWindow"
294: The side effects are the same as for \fIXCreateWindow\fP.
295: The subroutine returns the number of windows actually created.
296: .FD
297: .IN "Definitions" "XCreateWindowBatch"
298: .IN "XCreateWindowBatch"
299: int XCreateWindowBatch(defs, ndefs)
300: Window parent;
301: BatchFrame defs[];
302: int ndefs;
303: .FN
304: This subroutine takes an array of window information definitions
305: and creates the windows of the specified types
306: in a single handshake with the window system.
307: The caller should have filled in the structure except for the window id.
308: The window id's of the created windows are returned in the structure
309: passed to the subroutine.
310: You must specify the number of windows to be created using the
311: ndefs argument.
312: .IN "XCreateWindow"
313: .IN "XCreateTransparency"
314: The side effects are the same as for \fIXCreateWindow\fP and \fIXCreateTransparency\fP.
315: The subroutine returns the number of windows actually created.
316: The parent windows must already exist.
317: .FD
318: .IN "Definitions" "XCreate"
319: .IN "XCreate"
320: Window XCreate(prompt, program, geometry, default, frame, minwidth, minheight)
321: char *prompt; /* prompt string */
322: char *program; /* program name for Xdefaults */
323: char *geometry, *default; /* geometry specs */
324: OpaqueFrame *frame; /* background and border pixmaps in */
325: int minwidth, minheight; /* minimum size for the window */
326: .FN
327: XCreate does all the work for automatic and manual placement of a window,
328: and is commonly used by most applications for creating graphics related
329: windows.
330: .PP
331: The \fIprompt\fP argument is used in a prompt window (if needed) to inform the
332: user what application wants to be placed.
333: The \fIprogram\fP name must be passed in with the program argument (usually
334: it should be \fIargv[0]\fP) so that \fIXGetDefault\fP can find out how the
335: user likes to be prompted to create the window.
336: .PP
337: The \fIgeometry\fP and \fIdefault\fP arguments are used to place the position
338: and/or size of the window.
339: .PP
340: The \fIframe\fP passed in must include the background and border pixmaps
341: already specified, and the border width of the window.
342: .PP
343: \fIMinwidth\fP and \fIminheight\fP specify the minimum size of the created window
344: in pixels.
345: .PP
346: The window is not mapped after creation.
347: The function returns the window id of the window just created,
348: and all values in the passed in window \fIframe\fP (as defined above)
349: will be set.
350: .PP
351: The following paragraphs describes the current user interface;
352: it may change in the
353: future somewhat.
354: .IN "XGeometry"
355: .IN "XParseGeometry"
356: If a sufficiently complete geometry specification (see \fIXParseGeometry\fP
357: and \fIXGeometry\fP)
358: is passed in, the window will be created automatically.
359: If no X or Y locations are set by the geometry spec, the user will be
360: prompted to interactively position the window.
361: A prompt window will be popped up in the upper left hand corner,
362: and the mouse grabbed.
363: .PP
364: .IN "XGrabMouse"
365: .IN "Grabbing" "Mouse"
366: .IN "XGetDefault"
367: The ``MakeWindow'' X defaults ``BodyFont'', ``ReverseVideo'',
368: ``BorderWidth'', ``InternalBorder'', ``Freeze'',
369: ``Foreground'', ``Background'', ``Border''
370: ``Mouse'', ``MouseMask'' control the appearance
371: of a prompt window and the cursor to be used when rubber banding.
372: If ``freeze'' is ``on'', the server will be frozen while the window is being
373: created.
374: So for example, one of these might be specified as ``.MakeWindow.Freeze''
375: in your \fI~/.Xdefaults\fP file.
376: .IN "XGrabServer"
377: .IN "Grabbing" "Server"
378: A box the size of the minimum window will be rubber banded on the
379: screen.
380: .PP
381: If the left button is pressed, the outline of the default window at its
382: default size and location will be shown; when the button is released, the
383: window will be created.
384: If the right button is pressed, the outline of the default window at its
385: default size and the current location of the mouse will be shown;
386: when the button is released, the window's upper left corner will be created
387: at the current cursor location.
388: If the center button is pressed, it indicates one corner of the window should
389: be set at the current mouse location.
390: When the center button is released, the window will be created with the
391: other corner of the window at the current mouse location unless the
392: minimum size has not been met.
393: .FD
394: .IN "Definitions" "XCreateTerm"
395: .IN "XCreateTerm"
396: Window XCreateTerm(prompt, program, geometry, default, frame, minwidth, minheight,
397: xadder, yadder, cwidth, cheight, f, fwidth, fheight)
398: char *prompt; /* prompt string */
399: char *program; /* program name for Xdefaults */
400: char *geometry, *default; /* geometry specs */
401: OpaqueFrame *frame; /* background and border pixmaps in */
402: int minwidth, minheight; /* minimum size for the window */
403: int xadder, yadder; /* additional space inside window needed */
404: int *cwidth, *cheight; /* RETURNs created size of window */
405: FontInfo *f; /* font for prompt window */
406: int fwidth, fheight; /* size of geometry units */
407: .FN
408: \fIXCreateTerm\fP
409: does all the work for automatic and manual placement of a window
410: which should be sized in multiples of \fIfwidth\fP and \fIfheight\fP,
411: and is commonly used by most applications for creating text related
412: windows.
413: .PP
414: The \fIprompt\fP argument is used in a prompt window (if needed) to inform the
415: user what application wants to be placed.
416: The program name must be passed in with the \fIprogram\fP argument (usually
417: it should be \fIargv[0]\fP) so that \fIXGetDefault\fP can find out how the
418: user likes to be prompted to create the window.
419: .PP
420: The geometry and default arguments are used to place the position
421: and/or size of the window.
422: .PP
423: The \fIfwidth\fP and \fIfheight\fP arguments specify the size of the units used in
424: the geometry spec,
425: and the increments the window should be sized in.
426: These are typically the size of a fixed width font, or other
427: graphic object in a window.
428: .PP
429: The \fIframe\fP passed in must include the background and border pixmaps
430: already specified, and the border width of the window.
431: .PP
432: \fIMinwidth\fP and \fIminheight\fP specify the minimum size of the created window in
433: multiples of \fIfwidth\fP and \fIfheight\fP.
434: \fIXadder\fP and \fIyadder\fP is additional interior padding needed in the window.
435: The function returns the window id of the window just created,
436: and all values in the passed in window frame will be set.
437: .PP
438: The window is not `mapped' after creation.
439: .PP
440: The following paragraphs describes the current user interface;
441: it may change in the
442: future somewhat.
443: .IN "XGeometry"
444: .IN "XParseGeometry"
445: If a sufficiently complete geometry specification (see \fIXParseGeometry\fP
446: and \fIXGeometry\fP)
447: is passed in, the window will be created automatically.
448: If no X or Y locations are set by the geometry spec, the user will be
449: prompted to interactively position the window.
450: A prompt window will be `popped' in the upper left hand corner,
451: and the mouse grabbed.
452: In the prompt window will be appended the width and height of the window
453: in the units specified by \fIfwidth\fP and \fIfheight\fP.
454: .PP
455: .IN "XGrabMouse"
456: .IN "Grabbing" "Mouse"
457: .IN "XGetDefault"
458: The ``MakeWindow'' X defaults ``BodyFont'', ``ReverseVideo'',
459: ``BorderWidth'', ``InternalBorder'', ``Freeze'',
460: ``Foreground'', ``Background'', ``Border''
461: ``Mouse'', ``MouseMask'' control the appearance
462: of a prompt window and the cursor to be used when rubber banding.
463: If ``freeze'' is ``on'', the server will be frozen while the window is being
464: created.
465: So for example, one of these might be specified as ``.MakeWindow.Freeze''
466: in your X defaults file.
467: .IN "XGrabServer"
468: .IN "Grabbing" "Server"
469: A box the size of the minimum window will be rubber banded on the
470: screen.
471: .PP
472: If the left button is pressed, the outline of the default window at the
473: mouse's current position of the default size
474: will be shown; when the button is released, the
475: window will be created.
476: If the right button is pressed, the outline of the default window at its
477: default size and the current location of the mouse will be shown;
478: when the button is released, the window's upper left corner will be created
479: at the current cursor location, and the height of the window will be
480: determined by the height of the screen.
481: If ``.MakeWindow.ClipToScreen'' is ``on'', the window will be
482: clipped to the screen until and unless the minimum size requirements
483: preclude it.
484: If the center button is pressed, it indicates one corner of the window should
485: be set at the current mouse location.
486: When the center button is released, the window will be created with the
487: other corner of the window at the current mouse location unless the
488: minimum size has not been met.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.