summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/g_cmds.c1
-rw-r--r--src/ui/ui_atoms.c15
-rw-r--r--src/ui/ui_main.c18
-rw-r--r--src/ui/ui_shared.c25
-rw-r--r--src/ui/ui_shared.h3
-rw-r--r--ui/say.menu3
6 files changed, 45 insertions, 20 deletions
diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c
index f71fa34d..a6e73d6a 100644
--- a/src/game/g_cmds.c
+++ b/src/game/g_cmds.c
@@ -2831,6 +2831,7 @@ Cmd_Test_f
*/
void Cmd_Test_f( gentity_t *ent )
{
+ G_CloseMenus( ent - g_entities );
}
/*
diff --git a/src/ui/ui_atoms.c b/src/ui/ui_atoms.c
index 0c48f797..ab35533c 100644
--- a/src/ui/ui_atoms.c
+++ b/src/ui/ui_atoms.c
@@ -170,7 +170,7 @@ qboolean UI_ConsoleCommand( int realTime )
case '\0':
// Global
uiInfo.chatTeam = qfalse;
- uiInfo.chatTargetClientNum = -1;
+ uiInfo.chatTargetClientNum = -1;
break;
case '2':
@@ -201,12 +201,15 @@ qboolean UI_ConsoleCommand( int realTime )
{
if( Menu_Count( ) > 0 )
{
- trap_Key_SetCatcher( trap_Key_GetCatcher( ) & ~KEYCATCH_UI );
- trap_Key_ClearStates( );
- trap_Cvar_Set( "cl_paused", "0" );
- Menus_CloseAll( );
- return qtrue;
+ Menus_CloseAll( qfalse );
+ if( Menu_Count( ) == 0 )
+ {
+ trap_Key_SetCatcher( trap_Key_GetCatcher( ) & ~KEYCATCH_UI );
+ trap_Key_ClearStates( );
+ trap_Cvar_Set( "cl_paused", "0" );
+ }
}
+ return qtrue;
}
return qfalse;
diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c
index e8d6988c..05a2ae07 100644
--- a/src/ui/ui_main.c
+++ b/src/ui/ui_main.c
@@ -1419,7 +1419,7 @@ void UI_Load( void )
UI_LoadMenus( "ui/menus.txt", qtrue );
UI_LoadMenus( "ui/ingame.txt", qfalse );
UI_LoadMenus( "ui/tremulous.txt", qfalse );
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
Menus_ActivateByName( lastName );
}
@@ -2845,7 +2845,7 @@ static void UI_RunMenuScript( char **args )
//disallow the menu if it would be empty
if( uiInfo.alienUpgradeCount <= 0 )
- Menus_CloseAll( );
+ Menus_CloseAll( qfalse );
}
else if( Q_stricmp( name, "UpgradeToNewClass" ) == 0 )
{
@@ -3000,7 +3000,7 @@ static void UI_RunMenuScript( char **args )
{
trap_Cmd_ExecuteText( EXEC_APPEND, "disconnect\n" );
trap_Key_SetCatcher( KEYCATCH_UI );
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
Menus_ActivateByName( "main" );
}
else if( Q_stricmp( name, "ServerSort" ) == 0 )
@@ -3025,7 +3025,7 @@ static void UI_RunMenuScript( char **args )
trap_Key_SetCatcher( trap_Key_GetCatcher() & ~KEYCATCH_UI );
trap_Key_ClearStates();
trap_Cvar_Set( "cl_paused", "0" );
- Menus_CloseAll();
+ Menus_CloseAll( qfalse );
}
else if( Q_stricmp( name, "voteMap" ) == 0 )
{
@@ -3777,7 +3777,7 @@ void UI_Init( qboolean inGameLoad )
UI_LoadMenus( "ui/ingame.txt", qfalse );
UI_LoadMenus( "ui/tremulous.txt", qfalse );
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
trap_LAN_LoadCachedServers();
@@ -3805,7 +3805,7 @@ void UI_KeyEvent( int key, qboolean down )
if( menu )
{
if( key == K_ESCAPE && down && !Menus_AnyFullScreenVisible() )
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
else
Menu_HandleKey( menu, key, down );
}
@@ -3862,14 +3862,14 @@ void UI_SetActiveMenu( uiMenuCommand_t menu )
trap_Key_SetCatcher( trap_Key_GetCatcher() & ~KEYCATCH_UI );
trap_Key_ClearStates();
trap_Cvar_Set( "cl_paused", "0" );
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
return;
case UIMENU_MAIN:
trap_Cvar_Set( "sv_killserver", "1" );
trap_Key_SetCatcher( KEYCATCH_UI );
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
Menus_ActivateByName( "main" );
trap_Cvar_VariableStringBuffer( "com_errorMessage", buf, sizeof( buf ) );
@@ -3887,7 +3887,7 @@ void UI_SetActiveMenu( uiMenuCommand_t menu )
trap_Cvar_Set( "cl_paused", "1" );
trap_Key_SetCatcher( KEYCATCH_UI );
UI_BuildPlayerList();
- Menus_CloseAll();
+ Menus_CloseAll( qtrue );
Menus_ActivateByName( "ingame" );
return;
}
diff --git a/src/ui/ui_shared.c b/src/ui/ui_shared.c
index f59a7349..f41b8bdc 100644
--- a/src/ui/ui_shared.c
+++ b/src/ui/ui_shared.c
@@ -1555,14 +1555,18 @@ void Menus_CloseByName( const char *p )
Menus_Close( Menus_FindByName( p ) );
}
-void Menus_CloseAll( void )
+void Menus_CloseAll( qboolean force )
{
int i;
for( i = 0; i < menuCount; i++ )
- Menus_Close( &Menus[i] );
+ {
+ if( !( Menus[i].window.flags & WINDOW_DONTCLOSEALL ) || force )
+ Menus_Close( &Menus[i] );
+ }
- openMenuCount = 0;
+ if( force )
+ openMenuCount = 0;
}
@@ -7587,6 +7591,20 @@ qboolean MenuParse_visible( itemDef_t *item, int handle )
return qtrue;
}
+qboolean MenuParse_dontCloseAll( itemDef_t *item, int handle )
+{
+ int i;
+ menuDef_t *menu = ( menuDef_t* )item;
+
+ if( !PC_Int_Parse( handle, &i ) )
+ return qfalse;
+
+ if( i )
+ menu->window.flags |= WINDOW_DONTCLOSEALL;
+
+ return qtrue;
+}
+
qboolean MenuParse_onOpen( itemDef_t *item, int handle )
{
menuDef_t * menu = ( menuDef_t* )item;
@@ -7867,6 +7885,7 @@ keywordHash_t menuParseKeywords[] = {
{"aspectBias", MenuParse_aspectBias, NULL},
{"style", MenuParse_style, NULL},
{"visible", MenuParse_visible, NULL},
+ {"dontCloseAll", MenuParse_dontCloseAll, NULL},
{"onOpen", MenuParse_onOpen, NULL},
{"onClose", MenuParse_onClose, NULL},
{"onESC", MenuParse_onESC, NULL},
diff --git a/src/ui/ui_shared.h b/src/ui/ui_shared.h
index 6c6be08c..bbf09234 100644
--- a/src/ui/ui_shared.h
+++ b/src/ui/ui_shared.h
@@ -64,6 +64,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define WINDOW_POPUP 0x00200000 // popup
#define WINDOW_BACKCOLORSET 0x00400000 // backcolor was explicitly set
#define WINDOW_TIMEDVISIBLE 0x00800000 // visibility timing ( NOT implemented )
+#define WINDOW_DONTCLOSEALL 0x01000000 // don't close during Menus_CloseAll()
// CGAME cursor type bits
@@ -457,7 +458,7 @@ menuDef_t *Menus_FindByName( const char *p );
void Menus_CloseByName( const char *p );
void Display_HandleKey( int key, qboolean down, int x, int y );
void LerpColor( vec4_t a, vec4_t b, vec4_t c, float t );
-void Menus_CloseAll( void );
+void Menus_CloseAll( qboolean force );
void Menu_Paint( menuDef_t *menu, qboolean forcePaint );
void Menu_SetFeederSelection( menuDef_t *menu, int feeder, int index, const char *name );
void Display_CacheAll( void );
diff --git a/ui/say.menu b/ui/say.menu
index bf20d38d..1991eef2 100644
--- a/ui/say.menu
+++ b/ui/say.menu
@@ -13,7 +13,8 @@
{
name say
fullScreen MENU_FALSE
- visible MENU_TRUE
+ visible MENU_FALSE
+ dontCloseAll MENU_TRUE
rect X Y W H
aspectBias ALIGN_LEFT
focusColor 1 1 1 1