diff oldXMenu/Recomp.c @ 25858:bbce331da1be

#
author Dave Love <fx@gnu.org>
date Sun, 03 Oct 1999 19:36:13 +0000
parents
children 23a1cea22d13
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/oldXMenu/Recomp.c	Sun Oct 03 19:36:13 1999 +0000
@@ -0,0 +1,104 @@
+#include "copyright.h"
+
+/* $Header: /u/src/emacs/19.0/oldXMenu/RCS/Recomp.c,v 1.1 1992/04/11 22:10:20 jimb Exp $ */
+/* Copyright    Massachusetts Institute of Technology    1985	*/
+
+/*
+ * XMenu:	MIT Project Athena, X Window system menu package
+ *
+ * 	XMenuRecompute - Recompute XMenu object dependencies.
+ *
+ *	Author:		Tony Della Fera, DEC
+ *			September, 1985
+ *
+ */
+
+#include "XMenuInt.h"
+
+int
+XMenuRecompute(display, menu)
+    Display *display;
+    register XMenu *menu;	/* Menu object to be recomputed. */
+{
+    register XMPane *p_ptr;	/* Pane pointer. */
+    register XMSelect *s_ptr;	/* Selection pointer. */
+
+    register int p_num;		/* Pane serial number. */
+    register int s_num;		/* Selection serial number. */
+    
+    /*
+     * If there are no panes in the menu then return failure
+     * because the menu is not initialized.
+     */
+    if (menu->p_count == 0) {
+	_XMErrorCode = XME_NOT_INIT;
+	return(XM_FAILURE);
+    }
+
+    /*
+     * Recompute menu wide global values: pane window size,
+     * selection size and maximum selection count.
+     */
+    _XMRecomputeGlobals(display, menu);
+
+    /*
+     * For each pane in the menu...
+     */
+        
+    p_num = 0;
+    for (
+	p_ptr = menu->p_list->next;
+	p_ptr != menu->p_list;
+	p_ptr = p_ptr->next
+    ){
+	/*
+	 * Recompute pane dependencies.
+	 */
+	if (_XMRecomputePane(display, menu, p_ptr, p_num) == _FAILURE) {
+	    return(XM_FAILURE);
+	}
+        p_num++;
+	
+	/*
+	 * For each selection in the pane...
+	 */
+	s_num = 0;
+	for (
+	    s_ptr = p_ptr->s_list->next;
+	    s_ptr != p_ptr->s_list;
+	    s_ptr = s_ptr->next
+	) {
+	    /*
+	     * Recompute selection dependencies.
+	     */
+	    if (_XMRecomputeSelection(display, menu, s_ptr, s_num) == _FAILURE) {
+		return(XM_FAILURE);
+	    }
+	    s_num++;
+	}
+    }
+
+    /*
+     * Recompute menu size.
+     */
+    if (menu->menu_style == CENTER) {
+	menu->width = menu->p_width + (menu->p_bdr_width << 1);
+    }
+    else {
+	menu->width = menu->p_width + (menu->p_bdr_width << 1) +
+	    ((menu->p_count - 1) * menu->p_x_off);
+    }
+    menu->height = menu->p_height + (menu->p_bdr_width << 1) +
+	((menu->p_count - 1) * menu->p_y_off);
+
+    /*
+     * Reset the recompute flag.
+     */
+    menu->recompute = 0;
+
+    /*
+     * Return successfully.
+     */
+    _XMErrorCode = XME_NO_ERROR;
+    return(XM_SUCCESS);
+}