1/* Copyright Massachusetts Institute of Technology 1985 */ 2 3#include "copyright.h" 4 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 19int 20XMenuLocate(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. */ 34 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} 79 80/* arch-tag: 1ff94bab-cf67-4c92-bff4-dc0130153173 81 (do not change this comment) */ 82