X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=panel%2Fp_new.c;h=235336c22f5163a6191e8f8e1a1f106d1115edc0;hp=3e48e3696735dc71c8958a741f41041a92cc615e;hb=37419a9e525f087444051c12ccadf5ef347dcb2b;hpb=55ccd2b959766810cf7db8d1c4462f338ce0afc8 diff --git a/panel/p_new.c b/panel/p_new.c index 3e48e369..235336c2 100644 --- a/panel/p_new.c +++ b/panel/p_new.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2000,2005 Free Software Foundation, Inc. * + * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -29,6 +29,8 @@ /**************************************************************************** * Author: Zeyd M. Ben-Halim 1995 * * and: Eric S. Raymond * + * and: Juergen Pfeifer 1997-1999 * + * and: Thomas E. Dickey 2000-on * ****************************************************************************/ /* p_new.c @@ -36,7 +38,7 @@ */ #include "panel.priv.h" -MODULE_ID("$Id: p_new.c,v 1.8 2005/02/19 16:41:03 tom Exp $") +MODULE_ID("$Id: p_new.c,v 1.16 2010/01/23 21:22:16 tom Exp $") #ifdef TRACE static char *stdscr_id; @@ -48,17 +50,27 @@ static char *new_id; Establish the pseudo panel for stdscr if necessary. --------------------------------------------------------------------------*/ static PANEL * -root_panel(void) +root_panel(NCURSES_SP_DCL0) { +#if NCURSES_SP_FUNCS + struct panelhook *ph = NCURSES_SP_NAME(_nc_panelhook) (sp); + +#elif NO_LEAKS + struct panelhook *ph = _nc_panelhook(); +#endif + if (_nc_stdscr_pseudo_panel == (PANEL *) 0) { - assert(stdscr && !_nc_bottom_panel && !_nc_top_panel); - _nc_stdscr_pseudo_panel = (PANEL *) malloc(sizeof(PANEL)); + assert(SP_PARM && SP_PARM->_stdscr && !_nc_bottom_panel && !_nc_top_panel); +#if NO_LEAKS + ph->destroy = del_panel; +#endif + _nc_stdscr_pseudo_panel = typeMalloc(PANEL, 1); if (_nc_stdscr_pseudo_panel != 0) { PANEL *pan = _nc_stdscr_pseudo_panel; - WINDOW *win = stdscr; + WINDOW *win = SP_PARM->_stdscr; pan->win = win; pan->below = (PANEL *) 0; @@ -81,16 +93,18 @@ new_panel(WINDOW *win) { PANEL *pan = (PANEL *) 0; - T((T_CALLED("new_panel(%p)"), win)); + GetWindowHook(win); + + T((T_CALLED("new_panel(%p)"), (void *)win)); if (!win) returnPanel(pan); if (!_nc_stdscr_pseudo_panel) - (void)root_panel(); + (void)root_panel(NCURSES_SP_ARG); assert(_nc_stdscr_pseudo_panel); - if (!(win->_flags & _ISPAD) && (pan = (PANEL *) malloc(sizeof(PANEL)))) + if (!(win->_flags & _ISPAD) && (pan = typeMalloc(PANEL, 1))) { pan->win = win; pan->above = (PANEL *) 0;