home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-18.59-src.tgz / emacs-18.59-src.tar / fsf / emacs18 / oldXMenu / Locate.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  79 lines

  1. #include "copyright.h"
  2.  
  3. /* $Header: Locate.c,v 1.5 88/02/02 19:09:02 jim Exp $ */
  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. */
  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.