|
|
1.1 root 1: .TH XMENU 3X "29 January 1986" "X Version 10"
2: .SH NAME
3: XMenu - X Deck of cards Menu System
4: .SH SYNOPSIS
5: .nf
6: .B #include <X/XMenu.h>
7: .PP
8: .B XMenu *XMenuCreate(parent, xdef_env)
9: .B Window parent;
10: .B char *xdef_env;
11: .PP
12: .B int XMenuAddPane(menu, label, active)
13: .B XMenu *menu;
14: .B char *label;
15: .B int active;
16: .PP
17: .B int XMenuAddSelection(menu, pane, data, label, active)
18: .B XMenu *menu;
19: .B int pane;
20: .B char *data;
21: .B char *label;
22: .B int active;
23: .PP
24: .B int XMenuInsertPane(menu, pane, label, active)
25: .B XMenu *menu;
26: .B int pane;
27: .B char *label;
28: .B int active;
29: .PP
30: .B int XMenuInsertSelection(menu, pane,selection, data, label, active)
31: .B XMenu *menu;
32: .B int pane, selection;
33: .B caddr_d data;
34: .B char *label;
35: .B int active;
36: .PP
37: .B int XMenuFindPane(menu, label)
38: .B XMenu *menu;
39: .B char *label;
40: .PP
41: .B int XMenuFindSelection(menu, pane, label)
42: .B XMenu *menu;
43: .B int pane;
44: .B char *label;
45: .PP
46: .B int XMenuChangePane(menu, pane, label)
47: .B XMenu *menu;
48: .B int pane;
49: .B char *label;
50: .PP
51: .B int XMenuChangeSelection(menu, pane,selection, data,d_sw, label,l_sw)
52: .B XMenu *menu;
53: .B int pane, selection;
54: .B char *data;
55: .B int d_sw;
56: .B char *label;
57: .B int l_sw;
58: .PP
59: .B int XMenuSetPane(menu, pane, active)
60: .B XMenu *menu;
61: .B int pane;
62: .B int active;
63: .PP
64: .B int XMenuSetSelection(menu, pane, selection, active)
65: .B XMenu *menu;
66: .B int pane, selection;
67: .B int active;
68: .PP
69: .B int XMenuDeletePane(menu, pane)
70: .B XMenu *menu;
71: .B int pane;
72: .PP
73: .B int XMenuDeleteSelection(menu, pane, selection)
74: .B XMenu *menu;
75: .B int pane, selection;
76: .PP
77: .B int XMenuRecompute(menu)
78: .B XMenu *menu;
79: .PP
80: .B int XMenuLocate(menu, pane,selection, x,y, ulx,uly, width,height)
81: .B XMenu *menu;
82: .B int pane, selection;
83: .B int x, y;
84: .B int *ulx, *uly;
85: .B int *width, *height;
86: .PP
87: .B XMenuSetAEQ(menu, aeq)
88: .B XMenu *menu;
89: .B int aeq;
90: .PP
91: .B XMenuSetEvHandler(menu, handler)
92: .B XMenu *menu;
93: .B int (*handler)();
94: .PP
95: .B XMenuSetFreeze(menu, freeze)
96: .B XMenu *menu;
97: .B int freeze;
98: .PP
99: .B int XMenuActivate(menu, pane,selection, x,y, event_mask, data)
100: .B XMenu *menu;
101: .B int *pane, *selection;
102: .B int x, y;
103: .B int event_mask;
104: .B char **data;
105: .PP
106: .B XMenuDestroy(menu)
107: .B XMenu *menu;
108: .PP
109: .B char *XMenuError()
110: .fi
111: .SH DESCRIPTION
112: .PP
113: .I XMenu
114: is an
115: .I X
116: Window System Utility Package that implements a `deck of cards'
117: menu system.
118: .I XMenu
119: is intended for use in conjunction with
120: .I Xlib,
121: the \fIC Language X Window System Interface Library.\fP
122: .PP
123: In a `deck of cards' menu system a menu is composed
124: of several cards or panes. The panes are stacked as if they were a
125: deck of playing cards that were fanned out. Each of these
126: panes has one or more selections.
127: A user interacts with a `deck of cards' menu by sliding the mouse cursor
128: across the panes of the menu. As the mouse cursor enters each pane it
129: will rise to the top of the deck and become `current'.
130: If the current pane is an active pane it will be `activated', or made
131: available for selection. To indicate this its background will then change
132: from the patterned inactive background to a solid color and the
133: selections on that pane will be activated.
134: If the current pane is not an active pane (a setable state) then it
135: will not be activated. To indicate this its background will continue
136: to be the patterned inactive background and no selections on the
137: pane will be activated.
138: The pane previously containing the mouse will lower (preserving its
139: stacking order). If it was activated it will then become deactivated,
140: its background changing back to the inactive pattern.
141: Because of this action it is not possible to have more than one current
142: pane at any one time.
143: When the mouse cursor enters an active selection in a pane that has been
144: activated then that selection will become activated and be high lighted.
145: If the selection is not active or the pane has not been activated
146: then the selection will not be activated and will not be high lighted.
147: Selection high lighting is accomplished in one of two ways depending
148: upon the state of the user's
149: .I Xdefaults
150: variables.
151: If `box' mode high lighting is in effect, the menu selection will be
152: activated by placing a high light box around the selection as the mouse
153: cursor enters the selection's active region and removing it (deactivating
154: the selection) as the cursor leaves.
155: If `invert' mode high lighting is in effect, the menu selection will be
156: activated by inverting the background and foreground colors within the
157: selection's active region as the mouse cursor enters it and reinverting
158: them as the cursor leaves.
159: .PP
160: The application specifies a mouse event that will signify that the user
161: has made a selection. Any time that the selection mouse event is received by
162: .I XMenu
163: one of several results will occur, depending upon the state of the menu system
164: at the time of the event. If the selection event occurs while the mouse
165: cursor is in an activated selection the data that has been stored with that
166: selection will be returned to the application program.
167: The data stored is in the form of a generic pointer to memory (char *).
168: This allows the application programmer to completely define the interpretation
169: of the selection data by recasting the data pointer as is desired.
170: .PP
171: An application constructs a menu by first creating the
172: .I XMenu
173: object. Once the
174: .I XMenu
175: object has been created then panes and selections are added in order as
176: is needed. Typically panes contain related selections that are `described'
177: by the pane's label. For example, you might create a pane labeled `Mail'
178: that has selections labeled `Read', `Send', `Forward', `Refile' and `Delete'.
179: There is no real need for the panes in a menu to be related to each other but
180: typically they are related by default by the fact that they are all being
181: utilized the application that created the menu.
182: .PP
183: The
184: .I XMenu
185: system is maintained (menus, panes and selections) via routines in
186: the
187: .I XMenu
188: library. The library contains the following routines:
189: .PP
190: .TP 8
191: .B XMenuCreate
192: In order for a process to create a menu, it is necessary for that process
193: to have opened a connection to an
194: .I X
195: display server and have a window in hand that will be designated as the
196: parent window of the menu being created (remember that
197: .I X
198: is designed such that child windows of a parent window are clipped to the
199: borders of the parent). Typically the
200: .I X
201: root window (
202: .I RootWindow
203: ) is used for this purpose. When the connection is open and a parent
204: window chosen, the application calls
205: .I XMenuCreate
206: passing it the parent window and a null-terminated string.
207: The string designates the default environment name that will be used
208: by XMenu to read the users
209: .I Xdefaults
210: variables. Typically the application name is used for this purpose (a good
211: software engineering practice is to use element zero of the applications
212: argument vector, argv[0], as the default environment since this is the
213: name by which the application was called from the shell). All
214: .I user
215: setable parameters are set via the
216: .I Xdefaults
217: mechanism. If any parameters do not have
218: .I Xdefaults
219: values then they default to preset
220: .I XMenu
221: internal values. The
222: .I Xdefaults
223: parameters are listed below along with their preset internal values.
224: If the create operation is successful
225: .I XMenuCreate
226: will return an
227: .I XMenu
228: object. If it fails NULL will be returned.
229: .PP
230: .TP 8
231: .B XMenuAddPane
232: Once a menu has been created the application may then begin
233: adding panes and subsequently selections. Panes are added by calling
234: .I XMenuAddPane.
235: .I XMenuAddPane
236: adds additional panes to a menu in call order. That is, panes will appear
237: in the menu with the first pane added being at the front of the pane stack
238: and the last pane added being at the back of the pane stack.
239: .I XMenuAddPane
240: takes the following arguments: The menu to which the pane is being added; A
241: null-terminated string that will be the label for the new pane; and an flag
242: that designates whether or not the pane is to be considered active for
243: selection. It is sometimes useful to add inactive panes to indicate a
244: currently unavailable but planned set of selections. If the add operation is
245: successful the index number of the pane just added will be returned. If it
246: fails \fIXM_FAILURE\fP will be returned. Further panes may be added at a later time
247: but remember that when this routine is used to add panes they are always added
248: to the back of the pane stack!
249: .PP
250: .TP 8
251: .B XMenuAddSelection
252: Once a pane has been added to a menu is it possible to begin adding selections
253: to that pane. Selections are added to panes in much the same way as panes are
254: added to menus. Selections are added by calling
255: .I XMenuAddSelection.
256: .I XMenuAddSelection
257: adds additional selections to a pane in call order. That is, selections will
258: appear in the pane with the first selection added being at the top of the pane
259: and the last selection added being at the bottom of the pane.
260: .I XMenuAddSelection
261: takes the following arguments: The menu containing the pane to which the
262: selection is being added; The index number of the pane to which the selection
263: is being added; A null-terminated string that will be the label for the new
264: selection; A (char *) data value that will be returned by
265: .I XMenuActivate
266: whenever the new selection is selected by the menu's user; and a flag that
267: designates whether or not the selection will be considered active. It is
268: sometimes useful to add inactive selections which may become active as the
269: application state changes. If the add operation is successful then the
270: index number of the selection just added will be returned. If it fails
271: \fIXM_FAILURE\fP will be returned. Further selections may be added at a later time
272: but remember when this routine is used to add selections they are always added
273: to the bottom of a pane!
274: .PP
275: .TP 8
276: .B XMenuInsertPane
277: This routine allows the application to insert menu panes into a menu in
278: random order. If the index number of the pane being inserted matches the
279: index number of a pane that already exists, then the existing pane is displaced
280: backward (its index number and the index numbers of all following planes
281: increased by one) in the menu and the new pane inserted in its place. Panes
282: may be inserted into any menu provided that the index number of the pane being
283: inserted is no more than one greater than the index number of the last pane in
284: the menu. For example, if a menu contains 4 panes with index numbers 0 through
285: 3 then it is possible to insert a new pane with an index number from 0 through
286: 4 inclusive. It is possible to use
287: .I XMenuInsertPane
288: in place of
289: .I XMenuAddPane
290: but in situations where panes are simply being added to a menu one after
291: another then the use of the simpler and more efficient
292: .I XMenuAddPane
293: routine is encouraged.
294: .I XMenuInsertPane
295: takes the following arguments: The menu into which the pane is being inserted;
296: the index number of the new pane; a null-terminated string that will be the
297: label for the new pane; and an int that designates whether or not the pane
298: will to be considered active for selection. It is sometimes useful to add
299: inactive panes to indicate a currently unavailable but planned set of
300: selections. If the insert operation is successful the index number of the
301: pane just inserted will be returned. If it fails \fIXM_FAILURE\fP will be returned.
302: .PP
303: .TP 8
304: .B XMenuInsertSelection
305: This routine allows the application to insert selections into a menu pane in
306: random order. If the index number of the selection being inserted matches the
307: index number of a selection that already exists in the specified pane, then the
308: existing selection is displaced downward (its index number and the index
309: numbers of all following selections increased by one) in the pane and the new
310: selection inserted in its place. Selections may be inserted into any pane
311: provided that the index number of the selection being inserted is no more than
312: one greater than the index number of the last selection in the pane. For
313: example, if a pane contains 4 selections numbered 0 through 3 then it is
314: possible to insert a new selection with an index number from 0 through 4
315: inclusive. It is possible to use
316: .I XMenuInsertSelection
317: in place of
318: .I XMenuAddSelection
319: but in situations where selections are simply being added to a pane one after
320: another then the use of the simpler and more efficient
321: .I XMenuAddSelection
322: routine is encouraged.
323: .I XMenuInsertSelection
324: takes the following arguments: the menu containing the pane into which the
325: selection is being inserted; the index number of the pane to which the
326: selection is being inserted; the desired index number of the new selection;
327: a null-terminated string that will be the label for the new selection; A
328: (char *) data value that will be returned by
329: .I XMenuActivate
330: whenever the new selection is selected by a user; and an int that designates
331: whether or not the selection will be considered active for selection. It is
332: sometimes useful to insert inactive selections which may become active as the
333: application state changes. If the insert operation is successful the index
334: number of the selection just inserted will be returned. If it fails \fIXM_FAILURE\fP
335: will be returned.
336: .PP
337: .TP 8
338: .B XMenuFindPane
339: This routine allows the application to find the index number of a pane whose
340: label matches a given NULL terminated string.
341: .I XMenuFindPane
342: takes the following arguments: the menu containing the pane whose index number
343: is being searched for; and a null terminated string to be searched for.
344: If the find operation is successful then the index number of the first pane
345: whose label matches the given string will be returned. If it fails \fIXM_FAILURE\fP
346: will be returned.
347: .PP
348: .TP 8
349: .B XMenuFindSelection
350: This routine allows the application to find the index number of a selection
351: whose label matches a given NULL terminated string.
352: .I XMenuFindSelection
353: takes the following arguments: the menu containing the pane which contains
354: the selection being searched for; the index number of the pane which contains
355: the selection being searched for; and a null terminated string to be searched
356: for.
357: If the find operation is successful then the index number of the first
358: selection whose label matched the given string will be returned. If is fails
359: \fIXM_FAILURE\fP will be returned.
360: .PP
361: .TP 8
362: .B XMenuChangePane
363: This routine allows the application to change a pane's label on the fly. This
364: is useful for situations where a state change in the application must be
365: reflected in the menu.
366: .I XMenuChangePane
367: takes the following arguments: the menu containing the pane whose label is
368: being changed; the index number of that pane in the specified menu; and a
369: null-terminated string that will be the used as the new pane label. If the
370: change operation is successful the index number of the pane just changed will
371: be returned. If it fails \fIXM_FAILURE\fP will be returned.
372: .I XMenuChangePane
373: may be called any time after the pane being changed has been added / inserted
374: into the specified menu.
375: .PP
376: .TP 8
377: .B XMenuChangeSelection
378: This routine allows the application to change a selection's data and label on
379: the fly. This is useful for situations where a state change in the application
380: must be reflected in the menu.
381: .I XMenuChangeSelection
382: takes the following arguments: the menu containing the pane that contains the
383: selection to be changed; the index number of that pane in the menu; the index
384: number of the selection to be changed; a (char *) new data value for the
385: selection; an int that indicates whether or not to actually store the new
386: data value (in case only the label is being changed); Aanull-terminated string
387: that will be the used as the new selection label; and an int that indicates
388: whether or not to actually store the new label (incase only the data value
389: is being changed). If the change operation is successful the index number of
390: the selection just changed will be returned. If it fails \fIXM_FAILURE\fP will be
391: returned.
392: .I XMenuChangeSelection
393: may be called anytime after the pane selection being changed has been added to
394: the specified pane and menu.
395: .PP
396: .TP 8
397: .B XMenuSetPane
398: .I XMenuSetPane
399: allows the application to make an active pane inactive or an inactive pane
400: active. This provides the application with the ability to restrict the usage
401: of certain panes to times when they may or may not have a valid purpose. In
402: addition this allows the application to activate and utilize dummy panes that
403: were added at menu creation time as place holders for future selections.
404: .I XMenuSetPane
405: takes the following arguments: the menu containing the pane to be activated or
406: deactivated; the index number of that pane in the specified menu; and an int
407: that designates whether or not the pane is to be considered active for
408: selection. If the set operation is successful the index number of the pane
409: just set will be returned. If it fails \fIXM_FAILURE\fP will be returned.
410: .I XMenuSetPane
411: may be called anytime after the pane being set has been added / inserted into
412: the specified menu.
413: .PP
414: .TP 8
415: .B XMenuSetSelection
416: .I XMenuSetSelection
417: allows the application to make an active selection inactive or an inactive
418: selection active. This provides the application with the ability to restrict
419: the usage of certain selections to times when they may or may not have a valid
420: purpose. In addition this allows the application to activate and utilize
421: selections that were added at menu creation time with a future purpose in mind.
422: .I XMenuSetSelection
423: takes the following arguments: the menu containing the pane that contains the
424: selection to be activated or deactivated; the index number of that pane in the
425: menu; the index number of the selection to be activated / deactivated; and an
426: int that designates whether or not to make the specified selection active. If
427: the set operation is successful the index number of the selection just set will
428: be returned. If it fails \fIXM_FAILURE\fP will be returned.
429: .I XMenuSetSelection
430: may be called anytime after the pane selection being set has been added to the
431: specified pane and menu.
432: .PP
433: .TP 8
434: .B XMenuDeletePane
435: This routine allows the application to delete panes when they will no longer
436: be needed.
437: .I XMenuDeletePane
438: takes the following arguments: the menu containing the pane to be deleted;
439: and the index number of that pane in the specified menu.
440: .PP
441: .TP 8
442: .B XMenuDeleteSelection
443: This routine allows the application to delete selections when they will no
444: longer be needed.
445: .I XMenuDeleteSelection
446: takes the following arguments: the menu containing the pane which contains the
447: selection to be deleted; the index number of the pane containing the selection
448: to be deleted; and the index number of the selection to be deleted in that
449: pane.
450: .PP
451: .TP 8
452: .B XMenuRecompute
453: After the initial menu configuration has been constructed (in fact, anytime
454: that the menu configuration, a pane label or selection label is altered), the
455: menu dependencies need to be recomputed.
456: .I XMenu
457: will do this automatically if needed when
458: .I XMenuLocate
459: or
460: .I XMenuActivate
461: is called. In the interest of efficiency it is suggested that the application
462: call
463: .I XMenuRecompute
464: prior to any calls to
465: .I XMenuLocate
466: or
467: .I XMenuActivate.
468: This need only be done if
469: .I XMenuAddPane,
470: .I XMenuAddSelection,
471: .I XMenuInsertPane,
472: .I XMenuInsertSelection,
473: .I XMenuChangePane,
474: .I XMenuChangeSelection,
475: .I XMenuDeletePane,
476: or
477: .I XMenuDeleteSelection
478: have been called since the last call to
479: .I XMenuRecompute
480: or
481: .I XMenuActivate.
482: If
483: .I XMenuRecompute
484: is called before the first pane has been added to the menu a error will result
485: indicating that the menu has not been initialized. The most efficient state
486: is achieved if a sequence of panes and selections are added or modified in
487: order and then a single call is immediately made to
488: .I XMenuRecompute.
489: In this way all operations will batched and all dependencies will be up to date
490: by the time the next
491: .I XMenuActivate
492: call occurs. If the recompute operation is successful \fIXM_SUCCESS\fP will be
493: be returned. If it fails \fIXM_FAILURE\fP will be returned.
494: .PP
495: .TP 8
496: .B XMenuLocate
497: This routine provides an application will all the necessary data to properly
498: locate and position a menu with respect to the parent window.
499: .I XMenuLocate
500: takes the following arguments: the menu that is being located; the index number
501: of the desired current pane; the index number of the desired current
502: selection; the X and Y coordinates of where the application would like the
503: center of the current selection (in the current pane) to be; and four return
504: value pointers to int that will be filled in by the routine. The four return
505: value pointers are set to the following values (respectively): the upper
506: left X and Y coordinates of the entire menu (relative to the parent window);
507: and the overall width and height of the entire menu. If the specified
508: current selection is not a valid selection index within the specified
509: current pane (i.e., a negative value or a value greater than the index of
510: the last selection in that pane) the return values will be computed with the
511: specified X and Y location in the center of the flag of the specified current
512: pane. If the locate operation is successful \fIXM_SUCCESS\fP will be be returned.
513: If it fails \fIXM_FAILURE\fP will be returned.
514: .PP
515: .TP
516: .B XMenuSetAEQ
517: This routine allows the application to enable
518: .I Asynchronous Event Queueing
519: mode.
520: .I XMenuSetAEQ
521: takes two arguments: The menu to be set and an int that indicates whether or
522: not to place the menu in
523: .I Asynchronous Event Queueing (AEQ)
524: mode. When in this mode foreign events are queue for the duration of
525: menu activation. For a complete discussion of asynchronous event handling
526: and the other
527: .I Asynchronous Event
528: modes please see the description of
529: .I XMenuActivate
530: below.
531: .PP
532: .TP 8
533: .B XMenuSetEvHandler
534: .I XMenuSetEvHandler
535: allows the application to enable
536: .I Asynchronous Event Handoff (AEH)
537: mode.
538: .I XMenuSetEvHandler
539: takes two arguments: The menu to be set and a pointer to a routine which
540: returns int. When in this mode foreign events are handed off to the specified
541: routine as they are received (provied
542: .I AEQ
543: mode is not enabled).
544: Specifing a NULL event handling routine will effectively disable
545: .I Asynchronous Event Handoff
546: mode. For a complete discussion of asynchronous event handling and the various
547: .I Asynchronous Event
548: modes please see the description of
549: .I XMenuActivate
550: below.
551: The format of the handler should be as follows:
552: .br
553: .B int handler(event)
554: .br
555: .B XEvent *event;
556: .br
557: .PP
558: .TP 8
559: .B XMenuSetFreeze
560: This routine allows the application to forcibly override the
561: .I Xdefaults
562: setting of the `freeze' parameter. If freeze mode is turned on the
563: bits under where the menu will appear are saved by
564: .I XMenu
565: then the
566: .I X
567: server is frozen and remains frozed while the menu is activated. Immediately
568: after the menu is deactivated the bits under the menu are restored to their
569: original state and the server is unfrozen. This routine is necessary for
570: certain applications that must guarantee that the screen contents are not
571: damaged by
572: .I XMenu. XMenuSetFreeze
573: takes two arguments: The menu to be set and an int that indicates whether or
574: not to place the menu in freeze mode.
575: .PP
576: .TP 8
577: .B XMenuActivate
578: .I XMenuActivate
579: maps a given menu to the display and activates the menu for user selection.
580: Since
581: .I X
582: processes events in an asynchronous manner it is suggested that the application
583: synchronize the X connection and and process all events in the
584: .I Xlib
585: internal event queue before
586: .I XMenuActivate
587: is called.
588: It is likely that
589: .I XMenuActivate
590: will encounter events not associated with
591: .I XMenu
592: (foreign events) while it is executing.
593: These events are handled by
594: .I XMenu
595: in one of three ways:
596: .LP
597: .nf
598: .ta 1i 1.5i
599: 1) \fIAsynchronous Event Discard (AED)\fP mode.
600: This is the default mode and requires no action on the
601: part of the application. To reenable this mode the
602: asynchronous event handler should be set to NULL and
603: \fIAEQ\fP mode should be disabled.
604: 2) \fIAsynchronous Event Queueing (AEQ)\fP mode.
605: This mode is set by \fIXMenuSetAEQ\fP). In this mode
606: all foreign events will be queued up until
607: \fIXMenuActivate\fP terminates, at which time they will
608: be returned to the \fIX\fP event queue. As long as
609: \fIAEQ\fP mode is enabled any specified asynchronous event
610: handler (i.e., \fIAEH\fP mode) is temporarily disabled.
611: Disableing \fIAEQ\fP mode will return \fIXMenu\fP to its
612: previous method of asynchronous event handling.
613: 3) \fIAsynchronous Event Handoff (AEH)\fP mode.
614: In this mode the application has identified an
615: asynchronous event handler (via \fIXMenuSetEVHandler\fP)
616: which will accept foreign events. Enableling \fIAEQ\fP
617: mode temporarily disables any specified asynchronous
618: event handler. Setting the asynchronous event handler
619: to NULL will enable \fIAED\fP mode (provided \fIAEQ\fP mode
620: is not enabled).
621: .fi
622: .LP
623: .I XMenuActivate
624: takes the following arguments: the menu that is to be posted; the desired
625: current pane and selection; the X and Y menu position; the mouse button event
626: mask; and a pointer to a pointer to char (char **). The menu is positioned
627: within the menu's parent window such that the specified X and Y location
628: (relative to the parent window) is in the center of the specified current
629: selection in the current pane. If the specified current selection
630: is not a valid selection index within the specified current pane (i.e., a
631: negative value or a value greater than the index of the last selection in
632: that pane) the menu will be mapped with the specified X and Y location in
633: the center of the flag of the specified current pane. The mouse button
634: event mask provided by the application should be suitable for an
635: .I XGrabMouse
636: operation. It provides the application with a way to indicate which mouse
637: events will be used to identify a selection request. Every time
638: .I XMenuActivate
639: returns, the pane and selection indices are left at their last known values
640: (i.e., the last current pane and selection indices). The following are the
641: defined return states for this routine:
642: .LP
643: .nf
644: .ta 1i 1.5i
645: 1) If the selection that is current at the time a
646: selection request is made is active then the data
647: pointer will be set to the data associated with that
648: particular selection and \fIXM_SUCCESS\fP is returned.
649: 2) If the selection that is current at the time a
650: selection request is made is not active then the data
651: pointer will be left untouched and \fIXM_IA_SELECT\fP will
652: be returned.
653: 3) If there is no selection current at the time a
654: selection request is made then the data pointer will
655: be left untouched and \fIXM_NO_SELECT\fP will be returned.
656: 4) If at any time an error occurs the data pointer is
657: left untouched and \fIXM_FAILURE\fP is returned.
658: .fi
659: .PP
660: .TP 8
661: .B XMenuDestroy
662: When the application is no longer intending to use a menu
663: .I XMenuDestroy
664: should be called.
665: .I XMenuDestroy
666: frees all resources (both
667: .I X
668: resources and system resources) that are being held by the menu.
669: .I XMenuDestroy
670: takes only one argument, the menu to be destroyed. WARNING! Using a menu after
671: it has been destroyed is to invite disaster!
672: .PP
673: .TP 8
674: .B XMenuError
675: When called
676: .I XMenuError
677: will return a null-terminated string that describes the current error state of
678: the
679: .I XMenu
680: library. The string returned is static in the
681: .I XMenu
682: library and should not be modified or freed. The error state is set every time
683: an
684: .I XMenu
685: routine returns a status condition.
686: .I XMenuError
687: takes no arguments.
688: .SH X DEFAULTS
689: .PP
690: .TP 8
691: .B MenuFreeze
692: Determines whether or not to grab the
693: .I X
694: server while a menu is posted.
695: One of:
696: .I on, off.
697: The default value is
698: .I off.
699: .PP
700: .TP 8
701: .B MenuReverseVideo
702: Determines whether clock should be in normal mode (white on black)
703: or reverse video mode (black on white).
704: On color displays this value is ignored.
705: One of:
706: .I on, off.
707: The default value is
708: .I off.
709: .PP
710: .TP 8
711: .B MenuStyle
712: Determines the menu display style.
713: One of:
714: .I left_hand, right_hand, center.
715: The default value is
716: .I right_hand.
717: .PP
718: .TP 8
719: .B MenuMode
720: Determines the menu selection high light mode.
721: One of:
722: .I box, invert.
723: If
724: .I box
725: mode is chosen then the
726: .I SelectionBorderWidth
727: and
728: .I SelectionBorderColor
729: parameters effect the box line width and color respectively.
730: If
731: .I invert
732: mode is chose then the
733: .I SelectionForeground
734: and
735: .I MenuBackground
736: colors are used for the inversion.
737: The default value is
738: .I invert.
739: .PP
740: .TP 8
741: .B MenuMouse
742: Determines the color of the mouse cursor while it is within
743: the menu.
744: On black and white displays this value is ignored.
745: Any valid
746: .I X
747: color may be used.
748: The default value is
749: .I Black.
750: .PP
751: .TP 8
752: .B MenuBackground
753: Determines the menu background color.
754: On black and white displays this value is ignored.
755: Any valid
756: .I X
757: color may be used.
758: The default value is
759: .I White.
760: .PP
761: .TP 8
762: .B MenuInactivePattern
763: Determines which of the five possible bitmap patterns will be used to tile
764: inactive panes.
765: One of:
766: .I dimple1, dimple3, gray1, gray3, cross_weave.
767: The default value is
768: .I gray3.
769: .PP
770: .TP 8
771: .B PaneStyle
772: Determines the display style of all menu panes.
773: One of:
774: .I flush_left, flush_right, center.
775: The default value is
776: .I center.
777: .PP
778: .TP 8
779: .B PaneFont
780: Determines the font used for the label (heading text) of each pane.
781: Any valid
782: .I X
783: font may be used.
784: The default value is
785: .I 8x13.
786: .PP
787: .TP 8
788: .B PaneForeground
789: Determines the pane foreground color.
790: This is the color used for the label (heading text) in each pane.
791: On black and white displays this value is ignored.
792: Any valid
793: .I X
794: color may be used.
795: The default value is
796: .I Black.
797: .PP
798: .TP 8
799: .B PaneBorder
800: Determines the color of all menu pane borders.
801: On black and white displays this value is ignored.
802: Any valid
803: .I X
804: color may be used.
805: The default value is
806: .I Black.
807: .PP
808: .TP 8
809: .B PaneBorderWidth
810: Determines the width (in pixels) of all menu pane borders.
811: Any integer greater than or equal to 0 may be used.
812: The default value is 2.
813: .PP
814: .TP 8
815: .B PaneSpread
816: Determines the horizontal spread of menu panes.
817: Any double greater than or equal to 0.0 may be used.
818: A value of 1.0 specifies a one to one ratio between horizontal spread and
819: vertical spread.
820: A value less than 1.0 will compress the menu panes inward and a value greater
821: than 1.0 will expand them outward.
822: The default value is 1.0.
823: .PP
824: .TP 8
825: .B SelectionStyle
826: Determines the display style of all menu selections.
827: One of:
828: .I flush_left, flush_right, center.
829: The default value is
830: .I flush_left.
831: .PP
832: .TP 8
833: .B SelectionFont
834: Determines the font used for the text in each selection.
835: Any valid
836: .I X
837: font may be used.
838: The default value is
839: .I 6x10.
840: .PP
841: .TP 8
842: .B SelectionForeground
843: Determines the selection foreground color.
844: This is the color used for the text in each selection.
845: On black and white displays this value is ignored.
846: Any valid
847: .I X
848: color may be used.
849: On black and white displays this value is ignored.
850: The default value is
851: .I black.
852: .PP
853: .TP 8
854: .B SelectionBorder
855: Determines the color of all menu selection borders.
856: On black and white displays this value is ignored.
857: Any valid
858: .I X
859: color
860: may be used.
861: The default value is
862: .I black.
863: .PP
864: .TP 8
865: .B SelectionBorderWidth
866: Determines the width (in pixels) of all menu selection borders.
867: Any integer greater than or equal to 0 may be used.
868: The default value is 1.
869: .PP
870: .TP 8
871: .B SelectionSpread
872: Determines the inter-selection spread.
873: Any double greater than or equal to 0.0 may be used.
874: A value of 1.0 specifies that 1.0 times the height of the current selection
875: font will be used for padding
876: The default value is 0.25.
877: .SH DIAGNOSTICS
878: .PP
879: Since
880: .I XMenu
881: uses the
882: .I Xlib
883: library, the
884: .I XIOError
885: and
886: .I XError
887: .I Xlib
888: routines may be set by the application to change how asynchronous error
889: reporting occurs.
890: .PP
891: Synchronous error reporting is primarily accomplished by examining the return
892: values of routines and using the
893: .I XMenuError
894: routine. Although its use is discouraged, synchronous error reporting may also
895: be accomplished by having the application directly examine the value of the
896: .I _XMErrorCode
897: global variable.
898: .I _XMErrorCode
899: is set every time an
900: .I XMenu
901: routine returns a status condition. The following sequence of symbols is
902: provided in
903: .I XMenu.h
904: and may be used to index the null-terminated description strings in the global
905: error string array
906: .I _XMErrorList.
907: .LP
908: .nf
909: .ta \w'XME_CREATE_WINDOW 'u + .5i
910: \fIXME_CODE_COUNT\fP Total number of entries in \fI_XMErrorList\fP (17).
911:
912: \fIXME_NO_ERROR\fP -> ``No error''
913: \fIXME_NOT_INIT\fP -> ``Menu not initialized''
914: \fIXME_ARG_BOUNDS\fP -> ``Argument out of bounds''
915: \fIXME_P_NOT_FOUND\fP -> ``Pane not found''
916: \fIXME_S_NOT_FOUND\fP -> ``Selection not found''
917: \fIXME_STYLE_PARAM\fP -> ``Invalid menu style parameter''
918: \fIXME_GRAB_MOUSE\fP -> ``Unable to grab mouse''
919: \fIXME_INTERP_LOC\fP -> ``Unable to interpret locator''
920: \fIXME_CALLOC\fP -> ``Unable to calloc memory''
921: \fIXME_CREATE_ASSOC\fP -> ``Unable to create XAssocTable''
922: \fIXME_STORE_BITMAP\fP -> ``Unable to store bitmap''
923: \fIXME_MAKE_TILES\fP -> ``Unable to make tile pixmaps''
924: \fIXME_MAKE_PIXMAP\fP -> ``Unable to make pixmap''
925: \fIXME_CREATE_CURSOR\fP -> ``Unable to create cursor''
926: \fIXME_OPEN_FONT\fP -> ``Unable to open font''
927: \fIXME_CREATE_WINDOW\fP -> ``Unable to create windows''
928: \fIXME_CREATE_TRANSP\fP -> ``Unable to create transparencies''
929: .fi
930: .SH FILES
931: .PP
932: /usr/include/X/XMenu.h, /usr/lib/libXMenu.a, /usr/include/X/Xlib.h,
933: /usr/lib/libX.a
934: .SH SEE ALSO
935: Xlib(3x), X(1), X(8c)
936: .SH AUTHOR
937: .PP
938: Copyright 1985, 1986, Massachusetts Institute of Technology.
939: .PP
940: See \fIX(1)\fP for a complete copyright notice.
941: .PP
942: Tony Della Fera (MIT Project Athena, DEC)
943: .SH BUGS
944: .PP
945: There is a problem that necessitates an additional round trip time
946: when panes are activated and deactivated. In order for this to be fixed
947: efficiently, a change needs to be made to the
948: .I X
949: protocol.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.