ncurses 5.7 - patch 20091010
[ncurses.git] / menu / m_sub.c
index 35a361e687e2a083d86f880bf4282ba4f3414fbe..ae77f075809d48edd8133cb1d57477bd0f155484 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
 /****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc.                        *
+ * Copyright (c) 1998-2003,2004 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            *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -27,7 +27,7 @@
  ****************************************************************************/
 
 /****************************************************************************
  ****************************************************************************/
 
 /****************************************************************************
- *   Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997            *
+ *   Author:  Juergen Pfeifer, 1995,1997                                    *
  ****************************************************************************/
 
 /***************************************************************************
  ****************************************************************************/
 
 /***************************************************************************
@@ -37,7 +37,7 @@
 
 #include "menu.priv.h"
 
 
 #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.11 2009/04/05 00:35:51 tom Exp $")
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
@@ -48,33 +48,53 @@ MODULE_ID("$Id: m_sub.c,v 1.4 1999/05/16 17:28:20 juergen Exp $")
 |   Return Values :  E_OK           - success
 |                    E_POSTED       - menu is already posted
 +--------------------------------------------------------------------------*/
 |   Return Values :  E_OK           - success
 |                    E_POSTED       - menu is already posted
 +--------------------------------------------------------------------------*/
-int set_menu_sub(MENU *menu, WINDOW *win)
+NCURSES_EXPORT(int)
+set_menu_sub(MENU * menu, WINDOW *win)
 {
 {
+  T((T_CALLED("set_menu_sub(%p,%p)"), menu, win));
+
   if (menu)
     {
   if (menu)
     {
-      if ( menu->status & _POSTED )
+      if (menu->status & _POSTED)
        RETURN(E_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;
     }
   else
     _nc_Default_Menu.usersub = win;
-  
+
   RETURN(E_OK);
 }
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
   RETURN(E_OK);
 }
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
-|   Function      :  WINDOW *menu_sub(const MENU *menu)
+|   Function      :  WINDOWmenu_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
 +--------------------------------------------------------------------------*/
 |   
 |   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)
+NCURSES_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)"), menu));
+  returnWin(Get_Menu_Window(m));
 }
 
 /* m_sub.c ends here */
 }
 
 /* m_sub.c ends here */