Destroy.c 3.21 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 19 20
XMenuDestroy(Display *display, register XMenu *menu)
                     
                         	/* Menu object to destroy. */
Dave Love's avatar
#  
Dave Love committed
21 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
{
    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(
83
		    display,
Dave Love's avatar
#  
Dave Love committed
84
		    DefaultColormap(display, DefaultScreen(display)),
85
		    &menu->p_bdr_color,
Dave Love's avatar
#  
Dave Love committed
86 87 88
		    1, 0);
    if ((menu->s_bdr_color != BlackPixel(display, DefaultScreen(display))) && (menu->s_bdr_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
89 90 91
		    display,
		    DefaultColormap(display, DefaultScreen(display)),
		    &menu->s_bdr_color,
Dave Love's avatar
#  
Dave Love committed
92 93 94
		    1, 0);
    if ((menu->p_frg_color != BlackPixel(display, DefaultScreen(display))) && (menu->p_frg_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
95
		    display,
Dave Love's avatar
#  
Dave Love committed
96
		    DefaultColormap(display, DefaultScreen(display)),
97
		    &menu->p_frg_color,
Dave Love's avatar
#  
Dave Love committed
98 99 100
		    1, 0);
    if ((menu->s_frg_color != BlackPixel(display, DefaultScreen(display))) && (menu->s_frg_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
101
		    display,
Dave Love's avatar
#  
Dave Love committed
102
		    DefaultColormap(display, DefaultScreen(display)),
103
		    &menu->s_frg_color,
Dave Love's avatar
#  
Dave Love committed
104 105 106
		    1, 0);
    if ((menu->bkgnd_color != BlackPixel(display, DefaultScreen(display))) && (menu->bkgnd_color != WhitePixel(display, DefaultScreen(display))))
	XFreeColors(
107
		    display,
Dave Love's avatar
#  
Dave Love committed
108
		    DefaultColormap(display, DefaultScreen(display)),
109
		    &menu->bkgnd_color,
Dave Love's avatar
#  
Dave Love committed
110 111 112 113 114 115 116
		    1, 0);

    /*
     * Free the XMenu.
     */
    free(menu);
}
Miles Bader's avatar
Miles Bader committed
117