Skip to content

Commit f3379b7

Browse files
committed
Fixed delay that sometimes occurs when opening the Settings panel
1 parent 33e2201 commit f3379b7

File tree

2 files changed

+64
-37
lines changed

2 files changed

+64
-37
lines changed

Client/core/CSettings.cpp

Lines changed: 60 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ CSettings::CSettings ( void )
3737
m_iMaxAnisotropic = g_pDeviceState->AdapterState.MaxAnisotropicSetting;
3838
m_pWindow = NULL;
3939
m_bBrowserListsChanged = false;
40+
m_bBrowserListsLoadEnabled = false;
4041
CreateGUI ();
4142

4243
// Disable progress animation if required
@@ -59,7 +60,7 @@ void CSettings::CreateGUI ( void )
5960
if ( m_pWindow )
6061
DestroyGUI ();
6162

62-
CGUITab *pTabMultiplayer, *pTabVideo, *pTabAudio, *pTabBinds, *pTabControls, *pTabInterface, *pTabBrowser, *pTabAdvanced;
63+
CGUITab *pTabMultiplayer, *pTabVideo, *pTabAudio, *pTabBinds, *pTabControls, *pTabInterface, *pTabAdvanced;
6364
CGUI *pManager = g_pCore->GetGUI ();
6465

6566
// Init
@@ -114,14 +115,15 @@ void CSettings::CreateGUI ( void )
114115
m_pTabs = reinterpret_cast < CGUITabPanel* > ( pManager->CreateTabPanel ( m_pWindow ) );
115116
m_pTabs->SetPosition ( tabPanelPosition );
116117
m_pTabs->SetSize ( tabPanelSize );
118+
m_pTabs->SetSelectionHandler( GUI_CALLBACK( &CSettings::OnTabChanged, this ) );
117119

118120
pTabMultiplayer = m_pTabs->CreateTab ( _("Multiplayer") );
119121
pTabVideo = m_pTabs->CreateTab ( _("Video") );
120122
pTabAudio = m_pTabs->CreateTab ( _("Audio") );
121123
pTabBinds = m_pTabs->CreateTab ( _("Binds") );
122124
pTabControls = m_pTabs->CreateTab ( _("Controls") );
123125
pTabInterface = m_pTabs->CreateTab ( _("Interface") );
124-
pTabBrowser = m_pTabs->CreateTab ( _("Web Browser") );
126+
m_pTabBrowser = m_pTabs->CreateTab ( _("Web Browser") );
125127
pTabAdvanced = m_pTabs->CreateTab ( _("Advanced") );
126128

127129
// Create buttons
@@ -1133,73 +1135,73 @@ void CSettings::CreateGUI ( void )
11331135
/**
11341136
* Webbrowser tab
11351137
**/
1136-
m_pLabelBrowserGeneral = reinterpret_cast < CGUILabel* > ( pManager->CreateLabel ( pTabBrowser, _("General") ) );
1138+
m_pLabelBrowserGeneral = reinterpret_cast < CGUILabel* > ( pManager->CreateLabel ( m_pTabBrowser, _("General") ) );
11371139
m_pLabelBrowserGeneral->SetPosition ( CVector2D ( 10.0f, 12.0f ) );
11381140
m_pLabelBrowserGeneral->GetPosition ( vecTemp );
11391141
m_pLabelBrowserGeneral->AutoSize ( NULL, 5.0f );
11401142
m_pLabelBrowserGeneral->SetFont ( "default-bold-small" );
11411143

1142-
m_pCheckBoxRemoteBrowser = reinterpret_cast < CGUICheckBox* > ( pManager->CreateCheckBox ( pTabBrowser, _("Enable remote websites"), true ) );
1144+
m_pCheckBoxRemoteBrowser = reinterpret_cast < CGUICheckBox* > ( pManager->CreateCheckBox ( m_pTabBrowser, _("Enable remote websites"), true ) );
11431145
m_pCheckBoxRemoteBrowser->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 29.0f ) );
11441146
m_pCheckBoxRemoteBrowser->GetPosition ( vecTemp );
11451147
m_pCheckBoxRemoteBrowser->AutoSize ( NULL, 20.0f );
11461148

1147-
m_pCheckBoxRemoteJavascript = reinterpret_cast < CGUICheckBox* > ( pManager->CreateCheckBox ( pTabBrowser, _("Enable Javascript on remote websites"), true ) );
1149+
m_pCheckBoxRemoteJavascript = reinterpret_cast < CGUICheckBox* > ( pManager->CreateCheckBox ( m_pTabBrowser, _("Enable Javascript on remote websites"), true ) );
11481150
m_pCheckBoxRemoteJavascript->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 25.0f ) );
11491151
m_pCheckBoxRemoteJavascript->GetPosition ( vecTemp );
11501152
m_pCheckBoxRemoteJavascript->AutoSize ( NULL, 20.0f );
11511153

1152-
m_pLabelBrowserCustomBlacklist = reinterpret_cast < CGUILabel* > ( pManager->CreateLabel ( pTabBrowser, _("Custom blacklist") ) );
1154+
m_pLabelBrowserCustomBlacklist = reinterpret_cast < CGUILabel* > ( pManager->CreateLabel ( m_pTabBrowser, _("Custom blacklist") ) );
11531155
m_pLabelBrowserCustomBlacklist->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 30.0f ) );
11541156
m_pLabelBrowserCustomBlacklist->GetPosition ( vecTemp );
11551157
m_pLabelBrowserCustomBlacklist->AutoSize ( NULL, 5.0f );
11561158
m_pLabelBrowserCustomBlacklist->SetFont ( "default-bold-small" );
11571159

1158-
m_pEditBrowserBlacklistAdd = reinterpret_cast < CGUIEdit* > ( pManager->CreateEdit ( pTabBrowser ) );
1160+
m_pEditBrowserBlacklistAdd = reinterpret_cast < CGUIEdit* > ( pManager->CreateEdit ( m_pTabBrowser ) );
11591161
m_pEditBrowserBlacklistAdd->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 25.0f ) );
11601162
m_pEditBrowserBlacklistAdd->GetPosition ( vecTemp );
11611163
m_pEditBrowserBlacklistAdd->SetSize ( CVector2D ( 191.0f, 22.0f ) );
11621164
m_pEditBrowserBlacklistAdd->SetText ( _("Enter a domain e.g. google.com") );
11631165

1164-
m_pButtonBrowserBlacklistAdd = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( pTabBrowser, _("Block") ) );
1166+
m_pButtonBrowserBlacklistAdd = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( m_pTabBrowser, _("Block") ) );
11651167
m_pButtonBrowserBlacklistAdd->SetPosition ( CVector2D ( vecTemp.fX + m_pEditBrowserBlacklistAdd->GetSize ().fX + 2.0f, vecTemp.fY ) );
11661168
m_pButtonBrowserBlacklistAdd->SetSize ( CVector2D ( 64.0f, 22.0f ) );
11671169

1168-
m_pGridBrowserBlacklist = reinterpret_cast < CGUIGridList* > ( pManager->CreateGridList ( pTabBrowser ) );
1170+
m_pGridBrowserBlacklist = reinterpret_cast < CGUIGridList* > ( pManager->CreateGridList ( m_pTabBrowser ) );
11691171
m_pGridBrowserBlacklist->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 32.0f ) );
11701172
m_pGridBrowserBlacklist->GetPosition ( vecTemp );
11711173
m_pGridBrowserBlacklist->SetSize ( CVector2D ( 256.0f, 150.0f ) );
11721174
m_pGridBrowserBlacklist->AddColumn ( _("Domain"), 0.9f );
11731175

1174-
m_pButtonBrowserBlacklistRemove = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( pTabBrowser, _("Remove domain") ) );
1176+
m_pButtonBrowserBlacklistRemove = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( m_pTabBrowser, _("Remove domain") ) );
11751177
m_pButtonBrowserBlacklistRemove->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + m_pGridBrowserBlacklist->GetSize ().fY + 5.0f ) );
11761178
m_pButtonBrowserBlacklistRemove->SetSize ( CVector2D ( 140.0f, 22.0f ) );
11771179

11781180
m_pLabelBrowserCustomBlacklist->GetPosition ( vecTemp ); // Reset vecTemp
11791181

1180-
m_pLabelBrowserCustomWhitelist = reinterpret_cast < CGUILabel* > ( pManager->CreateLabel ( pTabBrowser, _("Custom whitelist") ) );
1182+
m_pLabelBrowserCustomWhitelist = reinterpret_cast < CGUILabel* > ( pManager->CreateLabel ( m_pTabBrowser, _("Custom whitelist") ) );
11811183
m_pLabelBrowserCustomWhitelist->SetPosition ( CVector2D ( 292.0f , vecTemp.fY ) );
11821184
m_pLabelBrowserCustomWhitelist->GetPosition ( vecTemp );
11831185
m_pLabelBrowserCustomWhitelist->AutoSize ( NULL, 5.0f );
11841186
m_pLabelBrowserCustomWhitelist->SetFont ( "default-bold-small" );
11851187

1186-
m_pEditBrowserWhitelistAdd = reinterpret_cast < CGUIEdit* > ( pManager->CreateEdit ( pTabBrowser ) );
1188+
m_pEditBrowserWhitelistAdd = reinterpret_cast < CGUIEdit* > ( pManager->CreateEdit ( m_pTabBrowser ) );
11871189
m_pEditBrowserWhitelistAdd->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 25.0f ) );
11881190
m_pEditBrowserWhitelistAdd->GetPosition ( vecTemp );
11891191
m_pEditBrowserWhitelistAdd->SetSize ( CVector2D ( 191.0f, 22.0f ) );
11901192
m_pEditBrowserWhitelistAdd->SetText ( _("Enter a domain e.g. google.com") );
11911193

1192-
m_pButtonBrowserWhitelistAdd = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( pTabBrowser, _("Allow") ) );
1194+
m_pButtonBrowserWhitelistAdd = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( m_pTabBrowser, _("Allow") ) );
11931195
m_pButtonBrowserWhitelistAdd->SetPosition ( CVector2D ( vecTemp.fX + m_pEditBrowserWhitelistAdd->GetSize ().fX + 2.0f, vecTemp.fY ) );
11941196
m_pButtonBrowserWhitelistAdd->SetSize ( CVector2D ( 64.0f, 22.0f ) );
11951197

1196-
m_pGridBrowserWhitelist = reinterpret_cast < CGUIGridList* > ( pManager->CreateGridList ( pTabBrowser ) );
1198+
m_pGridBrowserWhitelist = reinterpret_cast < CGUIGridList* > ( pManager->CreateGridList ( m_pTabBrowser ) );
11971199
m_pGridBrowserWhitelist->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + 32.0f ) );
11981200
m_pGridBrowserWhitelist->GetPosition ( vecTemp );
11991201
m_pGridBrowserWhitelist->SetSize ( CVector2D ( 256.0f, 150.0f ) );
12001202
m_pGridBrowserWhitelist->AddColumn ( _("Domain"), 0.9f );
12011203

1202-
m_pButtonBrowserWhitelistRemove = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( pTabBrowser, _("Remove domain") ) );
1204+
m_pButtonBrowserWhitelistRemove = reinterpret_cast < CGUIButton* > ( pManager->CreateButton ( m_pTabBrowser, _("Remove domain") ) );
12031205
m_pButtonBrowserWhitelistRemove->SetPosition ( CVector2D ( vecTemp.fX, vecTemp.fY + m_pGridBrowserWhitelist->GetSize ().fY + 5.0f ) );
12041206
m_pButtonBrowserWhitelistRemove->SetSize ( CVector2D ( 140.0f, 22.0f ) );
12051207

@@ -2902,20 +2904,38 @@ void CSettings::LoadData ( void )
29022904
CVARS_GET ( "browser_remote_websites", bVar ); m_pCheckBoxRemoteBrowser->SetSelected ( bVar );
29032905
CVARS_GET ( "browser_remote_javascript", bVar ); m_pCheckBoxRemoteJavascript->SetSelected ( bVar );
29042906

2907+
ReloadBrowserLists();
2908+
}
2909+
2910+
void CSettings::ReloadBrowserLists( void )
2911+
{
29052912
m_pGridBrowserBlacklist->Clear ();
29062913
m_pGridBrowserWhitelist->Clear ();
29072914
m_bBrowserListsChanged = false;
2915+
if ( m_bBrowserListsLoadEnabled )
2916+
{
2917+
auto pWebCore = g_pCore->GetWebCore();
2918+
std::vector<std::pair<SString, bool>> customBlacklist;
2919+
pWebCore->GetFilterEntriesByType( customBlacklist, eWebFilterType::WEBFILTER_USER );
2920+
for ( std::vector<std::pair<SString, bool>>::iterator iter = customBlacklist.begin(); iter != customBlacklist.end(); ++iter )
2921+
{
2922+
if ( iter->second == false )
2923+
m_pGridBrowserBlacklist->SetItemText( m_pGridBrowserBlacklist->AddRow (), 1, iter->first );
2924+
else
2925+
m_pGridBrowserWhitelist->SetItemText( m_pGridBrowserWhitelist->AddRow (), 1, iter->first );
2926+
}
2927+
}
2928+
}
29082929

2909-
auto pWebCore = g_pCore->GetWebCore();
2910-
std::vector<std::pair<SString, bool>> customBlacklist;
2911-
pWebCore->GetFilterEntriesByType( customBlacklist, eWebFilterType::WEBFILTER_USER );
2912-
for ( std::vector<std::pair<SString, bool>>::iterator iter = customBlacklist.begin(); iter != customBlacklist.end(); ++iter )
2930+
bool CSettings::OnTabChanged( CGUIElement* pElement )
2931+
{
2932+
if ( pElement == m_pTabBrowser && !m_bBrowserListsLoadEnabled )
29132933
{
2914-
if ( iter->second == false )
2915-
m_pGridBrowserBlacklist->SetItemText( m_pGridBrowserBlacklist->AddRow (), 1, iter->first );
2916-
else
2917-
m_pGridBrowserWhitelist->SetItemText( m_pGridBrowserWhitelist->AddRow (), 1, iter->first );
2934+
// Load browser lists when tab is selected for the first time
2935+
m_bBrowserListsLoadEnabled = true;
2936+
ReloadBrowserLists();
29182937
}
2938+
return true;
29192939
}
29202940

29212941
void CSettings::SaveData ( void )
@@ -3212,23 +3232,26 @@ void CSettings::SaveData ( void )
32123232
CVARS_SET ( "browser_remote_javascript", m_pCheckBoxRemoteJavascript->GetSelected () );
32133233
}
32143234

3215-
auto pWebCore = g_pCore->GetWebCore();
3216-
std::vector<SString> customBlacklist;
3217-
for ( int i = 0; i < m_pGridBrowserBlacklist->GetRowCount (); ++i )
3235+
if ( m_bBrowserListsLoadEnabled )
32183236
{
3219-
customBlacklist.push_back ( m_pGridBrowserBlacklist->GetItemText ( i, 1 ) );
3220-
}
3221-
pWebCore->WriteCustomList( "customblacklist", customBlacklist );
3237+
auto pWebCore = g_pCore->GetWebCore();
3238+
std::vector<SString> customBlacklist;
3239+
for ( int i = 0; i < m_pGridBrowserBlacklist->GetRowCount (); ++i )
3240+
{
3241+
customBlacklist.push_back ( m_pGridBrowserBlacklist->GetItemText ( i, 1 ) );
3242+
}
3243+
pWebCore->WriteCustomList( "customblacklist", customBlacklist );
32223244

3223-
std::vector<SString> customWhitelist;
3224-
for ( int i = 0; i < m_pGridBrowserWhitelist->GetRowCount(); ++i )
3225-
{
3226-
customWhitelist.push_back( m_pGridBrowserWhitelist->GetItemText( i, 1 ) );
3227-
}
3228-
pWebCore->WriteCustomList( "customwhitelist", customWhitelist );
3245+
std::vector<SString> customWhitelist;
3246+
for ( int i = 0; i < m_pGridBrowserWhitelist->GetRowCount(); ++i )
3247+
{
3248+
customWhitelist.push_back( m_pGridBrowserWhitelist->GetItemText( i, 1 ) );
3249+
}
3250+
pWebCore->WriteCustomList( "customwhitelist", customWhitelist );
32293251

3230-
if ( m_bBrowserListsChanged )
3231-
bBrowserSettingChanged = true;
3252+
if ( m_bBrowserListsChanged )
3253+
bBrowserSettingChanged = true;
3254+
}
32323255

32333256
// Ensure CVARS ranges ok
32343257
CClientVariables::GetSingleton().ValidateValues ();

Client/core/CSettings.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ class CSettings
150150
// Keep these protected so we can access them in the event handlers of CClientGame
151151
CGUIElement* m_pWindow;
152152
CGUITabPanel* m_pTabs;
153+
CGUITab* m_pTabBrowser;
153154
CGUIButton* m_pButtonOK;
154155
CGUIButton* m_pButtonCancel;
155156
CGUILabel* m_pLabelNick;
@@ -333,6 +334,7 @@ class CSettings
333334
CGUIGridList* m_pGridBrowserWhitelist;
334335
CGUIButton* m_pButtonBrowserWhitelistRemove;
335336
bool m_bBrowserListsChanged;
337+
bool m_bBrowserListsLoadEnabled;
336338

337339
bool OnJoypadTextChanged ( CGUIElement* pElement );
338340
bool OnAxisSelectClick ( CGUIElement* pElement );
@@ -380,6 +382,8 @@ class CSettings
380382
bool OnWindowedClick ( CGUIElement* pElement );
381383
bool OnShowAdvancedSettingDescription ( CGUIElement* pElement );
382384
bool OnHideAdvancedSettingDescription ( CGUIElement* pElement );
385+
bool OnTabChanged ( CGUIElement* pElement );
386+
void ReloadBrowserLists ( void );
383387

384388
private:
385389
void ProcessKeyBinds ( void );

0 commit comments

Comments
 (0)