]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - menu/m_win.c
ncurses 6.2 - patch 20200328
[ncurses.git] / menu / m_win.c
index 5fe760c8a4da40066e2297db3ffd5abde8c46842..f06c58083d9b92b5a2c3236eaaf1995a1f4743d8 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 1998,2000 Free Software Foundation, Inc.                   *
+ * Copyright 2020 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            *
@@ -28,7 +29,6 @@
 
 /****************************************************************************
  *   Author:  Juergen Pfeifer, 1995,1997                                    *
- *   Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en             *
  ****************************************************************************/
 
 /***************************************************************************
@@ -38,7 +38,7 @@
 
 #include "menu.priv.h"
 
-MODULE_ID("$Id: m_win.c,v 1.11 2002/07/06 15:22:16 juergen Exp $")
+MODULE_ID("$Id: m_win.c,v 1.18 2020/02/02 23:34:34 tom Exp $")
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
@@ -50,34 +50,52 @@ MODULE_ID("$Id: m_win.c,v 1.11 2002/07/06 15:22:16 juergen Exp $")
 |                    E_POSTED           - menu is already posted
 +--------------------------------------------------------------------------*/
 NCURSES_EXPORT(int)
-set_menu_win (MENU *menu, WINDOW *win)
+set_menu_win(MENU * menu, WINDOW *win)
 {
+  T((T_CALLED("set_menu_win(%p,%p)"), (void *)menu, (void *)win));
+
   if (menu)
     {
-      if ( menu->status & _POSTED )
+      if (menu->status & _POSTED)
        RETURN(E_POSTED);
-      menu->userwin = win;
-      _nc_Calculate_Item_Length_and_Width(menu);
+      else
+#if NCURSES_SP_FUNCS
+       {
+         /* We ensure that userwin 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 userwin is the static
+            _nc_default_Menu.
+          */
+         SCREEN *sp = _nc_screen_of(menu->userwin);
+
+         menu->userwin = win ? win : sp->_stdscr;
+         _nc_Calculate_Item_Length_and_Width(menu);
+       }
+#else
+       menu->userwin = win;
+#endif
     }
   else
     _nc_Default_Menu.userwin = win;
-  
+
   RETURN(E_OK);
 }
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnmenu  
-|   Function      :  WINDOW *menu_win(const MENU *)
+|   Function      :  WINDOW* menu_win(const MENU*)
 |   
 |   Description   :  Returns pointer to the window of the menu
 |
 |   Return Values :  NULL on error, otherwise pointer to window
 +--------------------------------------------------------------------------*/
 NCURSES_EXPORT(WINDOW *)
-menu_win (const MENU *menu)
+menu_win(const MENU * menu)
 {
-  const MENU* m = Normalize_Menu(menu);
-  return (m->userwin ? m->userwin : stdscr);
+  const MENU *m = Normalize_Menu(menu);
+
+  T((T_CALLED("menu_win(%p)"), (const void *)menu));
+  returnWin(Get_Menu_UserWin(m));
 }
 
 /* m_win.c ends here */