extensions/topmenus/TopMenu.cpp
changeset 4350 9f00539117ce
parent 4344 c445c3266192
child 4351 5ccbfd632820
     1.1 --- a/extensions/topmenus/TopMenu.cpp	Fri May 09 10:36:58 2014 -0700
     1.2 +++ b/extensions/topmenus/TopMenu.cpp	Fri May 09 12:30:52 2014 -0700
     1.3 @@ -49,6 +49,7 @@
     1.4  	m_SerialNo = 1;
     1.5  	m_pTitle = callbacks;
     1.6  	m_max_clients = 0;
     1.7 +	m_bCacheTitles = true;
     1.8  
     1.9  	if (playerhelpers->IsServerActivated())
    1.10  	{
    1.11 @@ -421,6 +422,13 @@
    1.12  		return false;
    1.13  	}
    1.14  
    1.15 +	if (!m_bCacheTitles)
    1.16 +	{
    1.17 +		char renderbuf[128];
    1.18 +		m_pTitle->OnTopMenuDisplayTitle(this, client, 0, renderbuf, sizeof(renderbuf));
    1.19 +		pClient->root->SetDefaultTitle(renderbuf);
    1.20 +	}
    1.21 +
    1.22  	bool return_value = false;
    1.23  
    1.24  	if (position == TopMenuPosition_LastCategory && 
    1.25 @@ -460,6 +468,18 @@
    1.26  
    1.27  	topmenu_player_category_t *player_cat = &(pClient->cats[category]);
    1.28  
    1.29 +	// Refresh the title if the topmenu wants that.
    1.30 +	if (!m_bCacheTitles)
    1.31 +	{
    1.32 +		char renderbuf[128];
    1.33 +		m_Categories[category]->obj->callbacks->OnTopMenuDisplayTitle(this, 
    1.34 +			client, 
    1.35 +			m_Categories[category]->obj->object_id, 
    1.36 +			renderbuf, 
    1.37 +			sizeof(renderbuf));
    1.38 +		player_cat->menu->SetDefaultTitle(renderbuf);
    1.39 +	}
    1.40 +
    1.41  	pClient->last_category = category;
    1.42  	if (last_position)
    1.43  	{
    1.44 @@ -473,6 +493,11 @@
    1.45  	return return_value;
    1.46  }
    1.47  
    1.48 +void TopMenu::SetTitleCaching(bool cache_titles)
    1.49 +{
    1.50 +	m_bCacheTitles = cache_titles;
    1.51 +}
    1.52 +
    1.53  void TopMenu::OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsigned int item_on_page)
    1.54  {
    1.55  	const char *item_name = menu->GetItemInfo(item, NULL);
    1.56 @@ -691,9 +716,12 @@
    1.57  	}
    1.58  
    1.59  	/* Set the menu's title */
    1.60 -	char renderbuf[128];
    1.61 -	m_pTitle->OnTopMenuDisplayTitle(this, client, 0, renderbuf, sizeof(renderbuf));
    1.62 -	root_menu->SetDefaultTitle(renderbuf);
    1.63 +	if (m_bCacheTitles)
    1.64 +	{
    1.65 +		char renderbuf[128];
    1.66 +		m_pTitle->OnTopMenuDisplayTitle(this, client, 0, renderbuf, sizeof(renderbuf));
    1.67 +		root_menu->SetDefaultTitle(renderbuf);
    1.68 +	}
    1.69  
    1.70  	/* The client is now fully updated */
    1.71  	pClient->root = root_menu;
    1.72 @@ -810,13 +838,16 @@
    1.73  	}
    1.74  
    1.75  	/* Set the menu's title */
    1.76 -	char renderbuf[128];
    1.77 -	cat->obj->callbacks->OnTopMenuDisplayTitle(this, 
    1.78 -		client, 
    1.79 -		cat->obj->object_id, 
    1.80 -		renderbuf, 
    1.81 -		sizeof(renderbuf));
    1.82 -	cat_menu->SetDefaultTitle(renderbuf);
    1.83 +	if (m_bCacheTitles)
    1.84 +	{
    1.85 +		char renderbuf[128];
    1.86 +		cat->obj->callbacks->OnTopMenuDisplayTitle(this, 
    1.87 +			client, 
    1.88 +			cat->obj->object_id, 
    1.89 +			renderbuf, 
    1.90 +			sizeof(renderbuf));
    1.91 +		cat_menu->SetDefaultTitle(renderbuf);
    1.92 +	}
    1.93  
    1.94  	/* We're done! */
    1.95  	player_cat->menu = cat_menu;