(from <Someone>)
Fix crash. WIN_MAP was used without before initialization in mswin_select_map_mode
This commit is contained in:
+12
-1
@@ -829,6 +829,9 @@ void mswin_menu_check_intf_mode()
|
|||||||
void mswin_select_map_mode(int mode)
|
void mswin_select_map_mode(int mode)
|
||||||
{
|
{
|
||||||
PNHMainWindow data;
|
PNHMainWindow data;
|
||||||
|
winid map_id;
|
||||||
|
|
||||||
|
map_id = WIN_MAP;
|
||||||
data = (PNHMainWindow)GetWindowLong(GetNHApp()->hMainWnd, GWL_USERDATA);
|
data = (PNHMainWindow)GetWindowLong(GetNHApp()->hMainWnd, GWL_USERDATA);
|
||||||
|
|
||||||
/* override for Rogue level */
|
/* override for Rogue level */
|
||||||
@@ -866,7 +869,15 @@ void mswin_select_map_mode(int mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
iflags.wc_map_mode = mode;
|
iflags.wc_map_mode = mode;
|
||||||
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), mode);
|
|
||||||
|
/*
|
||||||
|
** first, check if WIN_MAP has been inialized.
|
||||||
|
** If not - attempt to retrieve it by type, then check it again
|
||||||
|
*/
|
||||||
|
if( map_id==WIN_ERR )
|
||||||
|
map_id = mswin_winid_from_type(NHW_MAP);
|
||||||
|
if( map_id!=WIN_ERR )
|
||||||
|
mswin_map_mode(mswin_hwnd_from_winid(map_id), mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct t_menu2mapmode {
|
static struct t_menu2mapmode {
|
||||||
|
|||||||
@@ -178,7 +178,6 @@ int mswin_map_mode(HWND hWnd, int mode)
|
|||||||
SIZE mapSize;
|
SIZE mapSize;
|
||||||
|
|
||||||
data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA);
|
data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA);
|
||||||
if (!data) return mode;
|
|
||||||
if( mode == data->mapMode ) return mode;
|
if( mode == data->mapMode ) return mode;
|
||||||
|
|
||||||
oldMode = data->mapMode;
|
oldMode = data->mapMode;
|
||||||
|
|||||||
+14
-9
@@ -146,6 +146,9 @@ void mswin_init_nhwindows(int* argc, char** argv)
|
|||||||
#endif
|
#endif
|
||||||
mswin_nh_input_init();
|
mswin_nh_input_init();
|
||||||
|
|
||||||
|
/* set it to WIN_ERR so we can detect attempts to
|
||||||
|
use this ID before it is inialized */
|
||||||
|
WIN_MAP = WIN_ERR;
|
||||||
|
|
||||||
/* Read Windows settings from the reqistry */
|
/* Read Windows settings from the reqistry */
|
||||||
mswin_read_reg();
|
mswin_read_reg();
|
||||||
@@ -406,17 +409,19 @@ void mswin_clear_nhwindow(winid wid)
|
|||||||
(wid < MAXWINDOWS) &&
|
(wid < MAXWINDOWS) &&
|
||||||
(GetNHApp()->windowlist[wid].win != NULL))
|
(GetNHApp()->windowlist[wid].win != NULL))
|
||||||
{
|
{
|
||||||
SendMessage(
|
#ifdef REINCARNATION
|
||||||
|
if( GetNHApp()->windowlist[wid].type == NHW_MAP ) {
|
||||||
|
if( Is_rogue_level(&u.uz) )
|
||||||
|
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), ROGUE_LEVEL_MAP_MODE);
|
||||||
|
else
|
||||||
|
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), iflags.wc_map_mode);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SendMessage(
|
||||||
GetNHApp()->windowlist[wid].win,
|
GetNHApp()->windowlist[wid].win,
|
||||||
WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_CLEAR_WINDOW, (LPARAM)NULL );
|
WM_MSNH_COMMAND, (WPARAM)MSNH_MSG_CLEAR_WINDOW, (LPARAM)NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef REINCARNATION
|
|
||||||
if( Is_rogue_level(&u.uz) )
|
|
||||||
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), ROGUE_LEVEL_MAP_MODE);
|
|
||||||
else
|
|
||||||
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), iflags.wc_map_mode);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- Display the window on the screen. If there is data
|
/* -- Display the window on the screen. If there is data
|
||||||
|
|||||||
Reference in New Issue
Block a user