/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright 2020,2021 Thomas E. Dickey *
+ * Copyright 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 *
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
+ * Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_sub.c,v 1.4 1999/05/16 17:28:20 juergen Exp $")
+MODULE_ID("$Id: m_sub.c,v 1.16 2021/06/17 21:20:30 tom Exp $")
/*---------------------------------------------------------------------------
-| Facility : libnmenu
+| Facility : libnmenu
| Function : int set_menu_sub(MENU *menu, WINDOW *win)
-|
+|
| Description : Sets the subwindow of the menu.
|
| Return Values : E_OK - success
| E_POSTED - menu is already posted
+--------------------------------------------------------------------------*/
-int set_menu_sub(MENU *menu, WINDOW *win)
+MENU_EXPORT(int)
+set_menu_sub(MENU *menu, WINDOW *win)
{
+ T((T_CALLED("set_menu_sub(%p,%p)"), (void *)menu, (void *)win));
+
if (menu)
{
- if ( menu->status & _POSTED )
+ if (menu->status & _POSTED)
RETURN(E_POSTED);
- menu->usersub = win;
- _nc_Calculate_Item_Length_and_Width(menu);
+ else
+#if NCURSES_SP_FUNCS
+ {
+ /* We ensure that usersub is never null. So even if a null
+ WINDOW parameter is passed, we store the SCREENS stdscr.
+ The only MENU that can have a null usersub is the static
+ _nc_default_Menu.
+ */
+ SCREEN *sp = _nc_screen_of(menu->usersub);
+
+ menu->usersub = win ? win : sp->_stdscr;
+ _nc_Calculate_Item_Length_and_Width(menu);
+ }
+#else
+ menu->usersub = win;
+#endif
}
else
_nc_Default_Menu.usersub = win;
-
+
RETURN(E_OK);
}
/*---------------------------------------------------------------------------
-| Facility : libnmenu
-| Function : WINDOW *menu_sub(const MENU *menu)
-|
+| Facility : libnmenu
+| Function : WINDOW* menu_sub(const MENU *menu)
+|
| Description : Returns a pointer to the subwindow of the menu
|
| Return Values : NULL on error, otherwise a pointer to the window
+--------------------------------------------------------------------------*/
-WINDOW *menu_sub(const MENU * menu)
+MENU_EXPORT(WINDOW *)
+menu_sub(const MENU *menu)
{
- const MENU* m = Normalize_Menu(menu);
- return Get_Menu_Window(m);
+ const MENU *m = Normalize_Menu(menu);
+
+ T((T_CALLED("menu_sub(%p)"), (const void *)menu));
+ returnWin(Get_Menu_Window(m));
}
/* m_sub.c ends here */