Destroy.c 3.2 KB
Newer Older
1 2
/* Copyright    Massachusetts Institute of Technology    1985	*/

Dave Love's avatar
#  
Dave Love committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include "copyright.h"


/*
 * XMenu:	MIT Project Athena, X Window system menu package
 *
 *	XMenuDestroy - Free all resources associated with and XMenu.
 *
 *	Author:		Tony Della Fera, DEC
 *			August, 1985
 *
 */

#include "XMenuInt.h"

18
void
19
XMenuDestroy(Display *display, register XMenu *menu)
20

21
                         	/* Menu object to destroy. */
Dave Love's avatar
#  
Dave Love committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
{
    register XMPane *p_ptr;	/* Pointer to the current pane. */
    register XMPane *p_next;	/* Pointer to the next pane. */
    register XMSelect *s_ptr;	/* Pointer to the current selection. */
    register XMSelect *s_next;  /* Pointer to the next selection. */

    /*
     * Destroy the selection and pane X windows and free
     * their corresponding XMWindows.
     */
    for (
	p_ptr = menu->p_list->next;
	p_ptr != menu->p_list;
	p_ptr = p_next
    ) {
	for (
	    s_ptr = p_ptr->s_list->next;
	    s_ptr != p_ptr->s_list;
	    s_ptr = s_next
	) {
	    s_next = s_ptr->next;
	    free(s_ptr);
	}
	if (p_ptr->window) {
	    XDestroySubwindows(display, p_ptr->window);
	    XDestroyWindow(display, p_ptr->window);
	}
	p_next = p_ptr->next;
	free(p_ptr);
    }

    /*
     * Destroy the association table.
     */
    XDestroyAssocTable(menu->assoc_tab);

    /*
     * Free the mouse cursor.
     */
    XFreeCursor(display, menu->mouse_cursor);

    /*
     * Free the fonts.
     */
    XFreeFont(display, menu->p_fnt_info);
    XFreeFont(display, menu->s_fnt_info);

    /*
     * Free the pixmaps.
     */
/*    XFreePixmap(display, menu->p_bdr_pixmap);
    XFreePixmap(display, menu->s_bdr_pixmap);
    XFreePixmap(display, menu->p_frg_pixmap);
    XFreePixmap(display, menu->s_frg_pixmap);
    XFreePixmap(display, menu->bkgnd_pixmap); */
    XFreePixmap(display, menu->inact_pixmap);

    /*
     * Free the color cells.
     */
    if ((menu->p_bdr_color != BlackPixel(display, DefaultScreen(display))) && (menu->p_bdr_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
84
		    display,
Dave Love's avatar
#  
Dave Love committed
85
		    DefaultColormap(display, DefaultScreen(display)),
86
		    &menu->p_bdr_color,
Dave Love's avatar
#  
Dave Love committed
87 88 89
		    1, 0);
    if ((menu->s_bdr_color != BlackPixel(display, DefaultScreen(display))) && (menu->s_bdr_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
90 91 92
		    display,
		    DefaultColormap(display, DefaultScreen(display)),
		    &menu->s_bdr_color,
Dave Love's avatar
#  
Dave Love committed
93 94 95
		    1, 0);
    if ((menu->p_frg_color != BlackPixel(display, DefaultScreen(display))) && (menu->p_frg_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
96
		    display,
Dave Love's avatar
#  
Dave Love committed
97
		    DefaultColormap(display, DefaultScreen(display)),
98
		    &menu->p_frg_color,
Dave Love's avatar
#  
Dave Love committed
99 100 101
		    1, 0);
    if ((menu->s_frg_color != BlackPixel(display, DefaultScreen(display))) && (menu->s_frg_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
102
		    display,
Dave Love's avatar
#  
Dave Love committed
103
		    DefaultColormap(display, DefaultScreen(display)),
104
		    &menu->s_frg_color,
Dave Love's avatar
#  
Dave Love committed
105 106 107
		    1, 0);
    if ((menu->bkgnd_color != BlackPixel(display, DefaultScreen(display))) && (menu->bkgnd_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
108
		    display,
Dave Love's avatar
#  
Dave Love committed
109
		    DefaultColormap(display, DefaultScreen(display)),
110
		    &menu->bkgnd_color,
Dave Love's avatar
#  
Dave Love committed
111 112 113 114 115 116 117
		    1, 0);

    /*
     * Free the XMenu.
     */
    free(menu);
}