Commit | Line | Data |
---|---|---|
e745ede7 DL |
1 | #include "copyright.h" |
2 | ||
da1492a4 | 3 | /* $Header: /cvsroot/emacs/emacs/oldXMenu/Locate.c,v 1.3 2003/09/01 15:45:47 miles Exp $ */ |
e745ede7 DL |
4 | /* Copyright Massachusetts Institute of Technology 1985 */ |
5 | ||
6 | /* | |
7 | * XMenu: MIT Project Athena, X Window system menu package | |
8 | * | |
9 | * XMenuLocate - Return data necessary to position and locate | |
10 | * a menu on the screen. | |
11 | * | |
12 | * Author: Tony Della Fera, DEC | |
13 | * January 11, 1985 | |
14 | * | |
15 | */ | |
16 | ||
17 | #include "XMenuInt.h" | |
18 | ||
19 | int | |
20 | XMenuLocate(display, menu, p_num, s_num, x_pos, y_pos, ul_x, ul_y, width, height) | |
21 | register Display *display; /* Previously opened display. */ | |
22 | register XMenu *menu; /* Menu object being located. */ | |
23 | int p_num; /* Active pane number. */ | |
24 | int s_num; /* Active selection number. */ | |
25 | int x_pos; /* X coordinate of mouse active position. */ | |
26 | int y_pos; /* Y coordinate of mouse active position. */ | |
27 | int *ul_x; /* Returned upper left menu X coordinate. */ | |
28 | int *ul_y; /* Returned upper left menu Y coordinate. */ | |
29 | int *width; /* Returned menu width. */ | |
30 | int *height; /* Returned menu height. */ | |
31 | { | |
32 | register XMPane *p_ptr; /* XMPane pointer. */ | |
33 | register XMSelect *s_ptr; /* XMSelect pointer. */ | |
177c0ea7 | 34 | |
e745ede7 DL |
35 | /* |
36 | * Are the position arguments positive? | |
37 | */ | |
38 | if ((x_pos <= 0) || (y_pos <= 0)) { | |
39 | _XMErrorCode = XME_ARG_BOUNDS; | |
40 | return(XM_FAILURE); | |
41 | } | |
42 | ||
43 | /* | |
44 | * Find the right pane. | |
45 | */ | |
46 | p_ptr = _XMGetPanePtr(menu, p_num); | |
47 | if (p_ptr == NULL) return(XM_FAILURE); | |
48 | ||
49 | /* | |
50 | * Find the right selection. | |
51 | */ | |
52 | s_ptr = _XMGetSelectionPtr(p_ptr, s_num); | |
53 | ||
54 | /* | |
55 | * Check to see that the menu's dependencies have been | |
56 | * recomputed and are up to date. If not, do it now. | |
57 | */ | |
58 | if (menu->recompute) XMenuRecompute(display, menu); | |
59 | ||
60 | /* | |
61 | * Compute the new menu origin such that the active point lies | |
62 | * in the center of the desired active pane and selection. | |
63 | * This sets the values of ul_x and ul_y. | |
64 | */ | |
65 | _XMTransToOrigin(display, menu, p_ptr, s_ptr, x_pos, y_pos, ul_x, ul_y); | |
66 | ||
67 | /* | |
68 | * Set remaining return argument values. | |
69 | */ | |
70 | *width = menu->width; | |
71 | *height = menu->height; | |
72 | ||
73 | /* | |
74 | * Return successfully. | |
75 | */ | |
76 | _XMErrorCode = XME_NO_ERROR; | |
77 | return(XM_SUCCESS); | |
78 | } | |
ab5796a9 MB |
79 | |
80 | /* arch-tag: 1ff94bab-cf67-4c92-bff4-dc0130153173 | |
81 | (do not change this comment) */ |