123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: Destroy.c /main/12 1996/03/18 14:08:16 cde-hal $ */
- /************************************<+>*************************************
- ****************************************************************************
- **
- ** File: Destroy.c
- **
- ** Project: Cde Help System
- **
- ** Description: This code frees the information associated with
- ** a Display Area.
- **
- ** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 Hewlett-Packard Company
- **
- ** (c) Copyright 1993, 1994 Hewlett-Packard Company
- ** (c) Copyright 1993, 1994 International Business Machines Corp.
- ** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
- ** (c) Copyright 1993, 1994 Novell, Inc.
- ****************************************************************************
- ************************************<+>*************************************/
- /*
- * system includes
- */
- #include <stdlib.h>
- #include <X11/Xatom.h>
- /*
- * Canvas Engine
- */
- #include "CanvasP.h"
- /*
- * private includes
- */
- #include "DisplayAreaP.h"
- #include "CallbacksI.h"
- #include "DestroyI.h"
- #include "FontI.h"
- #include "GraphicsI.h"
- #include "HyperTextI.h"
- #include "StringFuncsI.h"
- #ifdef NLS16
- #endif
- /******** Private Function Declarations ********/
- /******** End Public Function Declarations ********/
- /******************************************************************************
- *
- * These are the public routines available.
- *
- *****************************************************************************/
- /*********************************************************************
- * Function: _DtHelpDisplayAreaClean
- *
- * _DtHelpDisplayAreaClean deallocates all paragraph, font, and
- * graphic information associated with it.
- *
- *********************************************************************/
- void
- _DtHelpDisplayAreaClean (XtPointer client_data)
- {
- int n;
- Arg args[5];
- Atom xa_primary = XA_PRIMARY;
- DtHelpDispAreaStruct *pDAS = (DtHelpDispAreaStruct *) client_data;
- /*
- * remove the selection if necessary
- */
- _DtHelpLoseSelectionCB (pDAS->dispWid, &xa_primary);
- /*
- * clean the canvas
- */
- if (NULL != pDAS->canvas)
- _DtCanvasClean (pDAS->canvas);
- /*
- * clean the slate
- */
- if (XtIsRealized (pDAS->dispWid))
- XClearArea(XtDisplay(pDAS->dispWid), XtWindow(pDAS->dispWid),
- pDAS->decorThickness, pDAS->decorThickness,
- pDAS->dispUseWidth, pDAS->dispUseHeight, False);
- pDAS->toc_flag &= ~(_DT_HELP_TOC_ON);
- /*
- * reset any scrollbars that are managed.
- */
- n = 0;
- XtSetArg (args[n], XmNvalue , 0); ++n;
- XtSetArg (args[n], XmNsliderSize , 1); ++n;
- XtSetArg (args[n], XmNmaximum , 1); ++n;
- XtSetArg (args[n], XmNpageIncrement, 1); ++n;
- if (pDAS->vertScrollWid && XtIsManaged (pDAS->vertScrollWid))
- XtSetValues (pDAS->vertScrollWid, args, n);
- if (pDAS->horzScrollWid && XtIsManaged (pDAS->horzScrollWid))
- XtSetValues (pDAS->horzScrollWid, args, n);
- } /* End _DtHelpDisplayAreaClean */
- /*********************************************************************
- * Function: _DtHelpDisplayAreaDestroyCB
- *
- * _DtHelpDisplayAreaDestroyCB deallocates all information
- * associated with it.
- *
- *********************************************************************/
- void
- _DtHelpDisplayAreaDestroyCB (
- Widget w,
- XtPointer client_data,
- XtPointer call_data)
- {
- int i;
- long strIdx;
- XrmName xrmList[_DtHelpFontQuarkNumber];
- Display *dpy;
- DtHelpDispAreaStruct *pDAS = (DtHelpDispAreaStruct *) client_data;
- Boolean usedDef = False;
- /*
- * do the gross cleaning
- */
- _DtHelpDisplayAreaClean(client_data);
- if (NULL != pDAS->canvas)
- _DtCanvasDestroy (pDAS->canvas);
- dpy = XtDisplay(pDAS->dispWid);
- /*
- * Free the gc's
- */
- XFreeGC (dpy, pDAS->normalGC);
- XFreeGC (dpy, pDAS->pixmapGC);
- XFreeGC (dpy, pDAS->invertGC);
- if (pDAS->def_pix != 0 &&
- XmDestroyPixmap(XDefaultScreenOfDisplay(dpy), pDAS->def_pix) == False)
- XFreePixmap(dpy, pDAS->def_pix);
- if (pDAS->context != NULL)
- {
- _DtGrDestroyContext(pDAS->context);
- XtFree((char *) pDAS->context);
- }
- /*
- * destroy the widgets.
- */
- XtDestroyWidget(pDAS->dispWid);
- if (pDAS->horzScrollWid != NULL)
- XtDestroyWidget(pDAS->horzScrollWid);
- if (pDAS->vertScrollWid != NULL)
- XtDestroyWidget(pDAS->vertScrollWid);
- /*
- * free the special characters
- */
- if (pDAS->spc_chars != NULL)
- free ((char *) pDAS->spc_chars);
- /*
- * free the font info.
- */
- _DtHelpGetStringQuarks(xrmList);
- if (__DtHelpFontIndexGet(pDAS, xrmList, &strIdx) != 0)
- usedDef = True;
- if (pDAS->font_info.def_font_db != NULL)
- XrmDestroyDatabase(pDAS->font_info.def_font_db);
- if (pDAS->font_info.font_idx_db != NULL)
- XrmDestroyDatabase(pDAS->font_info.font_idx_db);
- if (pDAS->font_info.exact_fonts != NULL)
- {
- _DtHelpCeFreeStringArray(pDAS->font_info.exact_fonts);
- free(pDAS->font_info.exact_idx);
- }
- if (pDAS->font_info.font_structs != NULL)
- {
- /*
- * if the string index is a positive number, this
- * indicates that the string font is a font not
- * a font set and it wouldn't be freed in this
- * routine.
- */
- for (i = 0; i < pDAS->font_info.struct_cnt; i++)
- {
- if (usedDef == True || i != strIdx)
- XFreeFont(dpy, pDAS->font_info.font_structs[i]);
- }
- free(pDAS->font_info.font_structs);
- }
- if (pDAS->font_info.font_sets != NULL)
- {
- /*
- * if the string index is a negative number, this turns
- * it to positive and the tests will succeed.
- *
- * if the string index was a font not a fontset, then
- * this will turn the value negative and the test
- * will never succeed.
- */
- strIdx = (-strIdx) - 1;
- for (i = 0; i < pDAS->font_info.set_cnt; i++)
- {
- if (usedDef == True || i != strIdx)
- XFreeFontSet(dpy, pDAS->font_info.font_sets[i]);
- }
- free(pDAS->font_info.font_sets);
- free(pDAS->font_info.fs_metrics);
- }
- /*
- * free the locale dependant information
- */
- if (NULL != pDAS->cant_begin_chars)
- free (pDAS->cant_begin_chars);
- if (NULL != pDAS->cant_end_chars)
- free (pDAS->cant_end_chars);
- /*
- * destroy the display area pointer
- */
- XtFree ((char *) pDAS);
- } /* End DtHelpDisplayAreaDestroy */
|