root/branches/2.1/oldXMenu/Recomp.c

Revision 3207, 2.3 kB (checked in by miyoshi, 5 years ago)

Sync up with Emacs-21.2.

  • Property svn:eol-style set to native
Line 
1 #include "copyright.h"
2
3 /* $Header: /cvsroot/emacs/emacs/oldXMenu/Recomp.c,v 1.1 1999/10/03 19:35:11 fx Exp $ */
4 /* Copyright    Massachusetts Institute of Technology    1985   */
5
6 /*
7  * XMenu:       MIT Project Athena, X Window system menu package
8  *
9  *      XMenuRecompute - Recompute XMenu object dependencies.
10  *
11  *      Author:         Tony Della Fera, DEC
12  *                      September, 1985
13  *
14  */
15
16 #include "XMenuInt.h"
17
18 int
19 XMenuRecompute(display, menu)
20     Display *display;
21     register XMenu *menu;       /* Menu object to be recomputed. */
22 {
23     register XMPane *p_ptr;     /* Pane pointer. */
24     register XMSelect *s_ptr;   /* Selection pointer. */
25
26     register int p_num;         /* Pane serial number. */
27     register int s_num;         /* Selection serial number. */
28    
29     /*
30      * If there are no panes in the menu then return failure
31      * because the menu is not initialized.
32      */
33     if (menu->p_count == 0) {
34         _XMErrorCode = XME_NOT_INIT;
35         return(XM_FAILURE);
36     }
37
38     /*
39      * Recompute menu wide global values: pane window size,
40      * selection size and maximum selection count.
41      */
42     _XMRecomputeGlobals(display, menu);
43
44     /*
45      * For each pane in the menu...
46      */
47        
48     p_num = 0;
49     for (
50         p_ptr = menu->p_list->next;
51         p_ptr != menu->p_list;
52         p_ptr = p_ptr->next
53     ){
54         /*
55          * Recompute pane dependencies.
56          */
57         if (_XMRecomputePane(display, menu, p_ptr, p_num) == _FAILURE) {
58             return(XM_FAILURE);
59         }
60         p_num++;
61        
62         /*
63          * For each selection in the pane...
64          */
65         s_num = 0;
66         for (
67             s_ptr = p_ptr->s_list->next;
68             s_ptr != p_ptr->s_list;
69             s_ptr = s_ptr->next
70         ) {
71             /*
72              * Recompute selection dependencies.
73              */
74             if (_XMRecomputeSelection(display, menu, s_ptr, s_num) == _FAILURE) {
75                 return(XM_FAILURE);
76             }
77             s_num++;
78         }
79     }
80
81     /*
82      * Recompute menu size.
83      */
84     if (menu->menu_style == CENTER) {
85         menu->width = menu->p_width + (menu->p_bdr_width << 1);
86     }
87     else {
88         menu->width = menu->p_width + (menu->p_bdr_width << 1) +
89             ((menu->p_count - 1) * menu->p_x_off);
90     }
91     menu->height = menu->p_height + (menu->p_bdr_width << 1) +
92         ((menu->p_count - 1) * menu->p_y_off);
93
94     /*
95      * Reset the recompute flag.
96      */
97     menu->recompute = 0;
98
99     /*
100      * Return successfully.
101      */
102     _XMErrorCode = XME_NO_ERROR;
103     return(XM_SUCCESS);
104 }
Note: See TracBrowser for help on using the browser.