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