1*c3c23fd4Skamil /* $NetBSD: del.c,v 1.3 2015/11/02 02:45:25 kamil Exp $ */
25858a2dbSuwe
35858a2dbSuwe /*
45858a2dbSuwe * Copyright (c) 2015 Valery Ushakov
55858a2dbSuwe * All rights reserved.
65858a2dbSuwe *
75858a2dbSuwe * Redistribution and use in source and binary forms, with or without
85858a2dbSuwe * modification, are permitted provided that the following conditions
95858a2dbSuwe * are met:
105858a2dbSuwe * 1. Redistributions of source code must retain the above copyright
115858a2dbSuwe * notice, this list of conditions and the following disclaimer.
125858a2dbSuwe * 2. Redistributions in binary form must reproduce the above copyright
135858a2dbSuwe * notice, this list of conditions and the following disclaimer in the
145858a2dbSuwe * documentation and/or other materials provided with the distribution.
155858a2dbSuwe *
165858a2dbSuwe * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
175858a2dbSuwe * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
185858a2dbSuwe * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
195858a2dbSuwe * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
205858a2dbSuwe * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
215858a2dbSuwe * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
225858a2dbSuwe * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
235858a2dbSuwe * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
245858a2dbSuwe * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
255858a2dbSuwe * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265858a2dbSuwe */
275858a2dbSuwe
285858a2dbSuwe #include <sys/cdefs.h>
29*c3c23fd4Skamil __RCSID("$NetBSD: del.c,v 1.3 2015/11/02 02:45:25 kamil Exp $");
305858a2dbSuwe
315858a2dbSuwe #include "panel_impl.h"
325858a2dbSuwe
335858a2dbSuwe #include <assert.h>
345858a2dbSuwe #include <stdlib.h>
355858a2dbSuwe
365858a2dbSuwe
375858a2dbSuwe int
del_panel(PANEL * p)385858a2dbSuwe del_panel(PANEL *p)
395858a2dbSuwe {
40*c3c23fd4Skamil
415858a2dbSuwe if (__predict_false(p == NULL))
425858a2dbSuwe return ERR;
435858a2dbSuwe
445858a2dbSuwe (void) hide_panel(p);
455858a2dbSuwe free(p);
465858a2dbSuwe
475858a2dbSuwe /*
485858a2dbSuwe * If the last panel is removed, remove the phantom stdscr
495858a2dbSuwe * panel as well.
505858a2dbSuwe *
515858a2dbSuwe * A program that wants to switch to a different screen with
525858a2dbSuwe * set_term(3), or ends and recreates curses session with
535858a2dbSuwe * endwin(3)/initscr(3), must delete all panels first, since
545858a2dbSuwe * their windows will become invalid. When it will create its
555858a2dbSuwe * first new panel afterwards, it will pick up new stdscr.
565858a2dbSuwe */
575858a2dbSuwe if (TAILQ_LAST(&_deck, deck) == &_stdscr_panel) {
585858a2dbSuwe (void) hide_panel(&_stdscr_panel);
595858a2dbSuwe assert(TAILQ_EMPTY(&_deck));
605858a2dbSuwe }
615858a2dbSuwe
625858a2dbSuwe return OK;
635858a2dbSuwe }
64