Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: Shared/PluginClass.cpp

Issue 8949229: Removal of all user tracking and shareware parts (Closed)
Patch Set: Created Dec. 6, 2012, 4:38 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 #include "PluginStdAfx.h" 1 #include "PluginStdAfx.h"
2 2
3 #include "PluginClass.h" 3 #include "PluginClass.h"
4 #include "PluginDictionary.h" 4 #include "PluginDictionary.h"
5 #include "PluginSettings.h" 5 #include "PluginSettings.h"
6 #include "PluginSystem.h" 6 #include "PluginSystem.h"
7 #ifdef SUPPORT_FILTER 7 #ifdef SUPPORT_FILTER
8 #include "PluginFilter.h" 8 #include "PluginFilter.h"
9 #endif 9 #endif
10 #include "PluginMimeFilterClient.h" 10 #include "PluginMimeFilterClient.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 settings->SetMainProcessId(); 90 settings->SetMainProcessId();
91 settings->SetMainUiThreadId(); 91 settings->SetMainUiThreadId();
92 92
93 // Ensure plugin version 93 // Ensure plugin version
94 if (!settings->Has(SETTING_PLUGIN_VERSION)) 94 if (!settings->Has(SETTING_PLUGIN_VERSION))
95 { 95 {
96 settings->SetString(SETTING_PLUGIN_VERSION, IEPLUGIN_VERSION); 96 settings->SetString(SETTING_PLUGIN_VERSION, IEPLUGIN_VERSION);
97 settings->SetFirstRunUpdate(); 97 settings->SetFirstRunUpdate();
98 } 98 }
99 99
100 // First run or deleted settings file) 100 // First run or deleted settings file (dictionary version = 1)
101 if (!settings->Has(SETTING_PLUGIN_ID)) 101 » » if (settings->GetString(SETTING_DICTIONARY_VERSION, L"1").Compar e(L"1") == 0)
102 { 102 {
103 settings->SetString(SETTING_PLUGIN_ID, system->GetPluginId());
104 settings->SetFirstRun(); 103 settings->SetFirstRun();
105 } 104 }
106 105
107 // Update? 106 // Update?
108 CString oldVersion = settings->GetString(SETTING_PLUGIN_VERSION); 107 CString oldVersion = settings->GetString(SETTING_PLUGIN_VERSION);
109 if (settings->IsFirstRunUpdate() || settings->GetString(SETTING_PLUG IN_UPDATE_VERSION) == IEPLUGIN_VERSION || oldVersion != IEPLUGIN_VERSION) 108 if (settings->IsFirstRunUpdate() || settings->GetString(SETTING_PLUG IN_UPDATE_VERSION) == IEPLUGIN_VERSION || oldVersion != IEPLUGIN_VERSION)
110 { 109 {
111 settings->SetString(SETTING_PLUGIN_VERSION, IEPLUGIN_VERSION); 110 settings->SetString(SETTING_PLUGIN_VERSION, IEPLUGIN_VERSION);
112 111
113 settings->Remove(SETTING_REG_DATE); 112 » » » settings->Remove(SETTING_PLUGIN_UPDATE_TIME);
114 settings->Remove(SETTING_PLUGIN_UPDATE_TIME);
115 settings->Remove(SETTING_PLUGIN_UPDATE_VERSION); 113 settings->Remove(SETTING_PLUGIN_UPDATE_VERSION);
116 settings->Remove(SETTING_PLUGIN_UPDATE_URL); 114 settings->Remove(SETTING_PLUGIN_UPDATE_URL);
117 115
118 settings->SetFirstRunUpdate(); 116 settings->SetFirstRunUpdate();
119 } 117 }
120 118
121 // Ensure max REGISTRATION_MAX_ATTEMPTS registration attempts today
122 CString regDate = settings->GetString(SETTING_REG_DATE);
123
124 SYSTEMTIME systemTime;
125 ::GetSystemTime(&systemTime);
126
127 CString today;
128 today.Format(L"%d-%d-%d", systemTime.wYear, systemTime.wMonth, systemTim e.wDay);
129
130 if (regDate != today)
131 {
132 if (regDate == "")
133 {
134 settings->SetString(SETTING_REG_DATE, today);
135 settings->SetValue(SETTING_REG_ATTEMPTS, 0);
136 settings->Remove(SETTING_REG_SUCCEEDED);
137 }
138 else
139 {
140 COleDateTime regDateDateTime;
141 if (regDateDateTime.ParseDateTime(regDate))
142 {
143 COleDateTime todayDateTime;
144 todayDateTime.ParseDateTime(today);
145 COleDateTimeSpan weekDateTime;
146 weekDateTime.SetDateTimeSpan(2, 0, 0, 0) ;
147 if (((todayDateTime - regDateDateTime) > = weekDateTime) || (todayDateTime < regDateDateTime))
148 {
149 settings->SetString(SETTING_REG_ DATE, today);
150 settings->SetValue(SETTING_REG_A TTEMPTS, 0);
151 settings->Remove(SETTING_REG_SUC CEEDED);
152 }
153 }
154 }
155 }
156 // Only allow one trial, if settings or whitelist changes
157 else if (settings->GetForceConfigurationUpdateOnStart())
158 {
159 settings->SetValue(SETTING_REG_ATTEMPTS, REGISTRATION_MAX_ATTEMPTS - 1);
160 settings->Remove(SETTING_REG_SUCCEEDED);
161
162 settings->RemoveForceConfigurationUpdateOnStart();
163 }
164
165 int info = settings->GetValue(SETTING_PLUGIN_INFO_PANEL, 0); 119 int info = settings->GetValue(SETTING_PLUGIN_INFO_PANEL, 0);
166 120
167 #ifdef ENABLE_DEBUG_RESULT 121 #ifdef ENABLE_DEBUG_RESULT
168 CPluginDebug::DebugResultClear(); 122 CPluginDebug::DebugResultClear();
169 #endif 123 #endif
170 124
171 #ifdef ENABLE_DEBUG_INFO 125 #ifdef ENABLE_DEBUG_INFO
172 if (info == 0 || info > 2) 126 if (info == 0 || info > 2)
173 { 127 {
174 CPluginDebug::DebugClear(); 128 CPluginDebug::DebugClear();
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 } 579 }
626 } 580 }
627 } 581 }
628 else 582 else
629 { 583 {
630 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _STATUSBAR, "Class::Get statusbar state"); 584 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET _STATUSBAR, "Class::Get statusbar state");
631 } 585 }
632 } 586 }
633 } 587 }
634 588
635 void CPluginClass::DisplayActivateMessage()
636 {
637 CPluginSettings* settings = CPluginSettings::GetInstance();
638
639 CString messageString;
640 messageString.Format(L"The daily adblocklimit has been reached and no-mo re ads are blocked today.\nThe free version of Simple Adblock only blocks %d adr equests a day.\n\nTo enjoy unlimited adblocking please upgrade.", settings->GetV alue(SETTING_PLUGIN_ADBLOCKLIMIT, 0));
641
642 settings->SetValue(SETTING_PLUGIN_ADBLOCKCOUNT, settings->GetValue(SETTI NG_PLUGIN_ADBLOCKLIMIT, 0) + 1);
643 settings->Write();
644
645 LRESULT res = MessageBox(NULL, messageString, L"Upgrade to Simple Adbloc k Pro", MB_OKCANCEL);
646 if (res == IDOK)
647 {
648 CPluginSettings* settings = CPluginSettings::GetInstance();
649 CPluginHttpRequest httpRequest(USERS_SCRIPT_UPGRADE);
650 CPluginSystem* system = CPluginSystem::GetInstance();
651 httpRequest.Add(L"plugin", system->GetPluginId());
652 httpRequest.Add(L"user", settings->GetString(SETTING_USER_ID));
653 httpRequest.Add(L"version", settings->GetString(SETTING_PLUGIN_V ERSION));
654 CString url = httpRequest.GetUrl();
655
656 CPluginTab* tab = CPluginClass::GetTab(::GetCurrentThreadId());
657 CComQIPtr<IWebBrowser2> browser = tab->m_plugin->GetBrowser();
658 if (!url.IsEmpty() && browser)
659 {
660 VARIANT vFlags;
661 vFlags.vt = VT_I4;
662 vFlags.intVal = navOpenInNewTab;
663
664 HRESULT hr = browser->Navigate(CComBSTR(url), &vFlags, N ULL, NULL, NULL);
665 if (FAILED(hr))
666 {
667 vFlags.intVal = navOpenInNewWindow;
668
669 hr = browser->Navigate(CComBSTR(url), &vFlags, N ULL, NULL, NULL);
670 }
671 }
672 }
673 }
674 void CPluginClass::BeforeNavigate2(DISPPARAMS* pDispParams) 589 void CPluginClass::BeforeNavigate2(DISPPARAMS* pDispParams)
675 { 590 {
676 591
677 if (pDispParams->cArgs < 7) 592 if (pDispParams->cArgs < 7)
678 { 593 {
679 return; 594 return;
680 } 595 }
681 » CPluginSettings* settings = CPluginSettings::GetInstance(); 596 » //Register a mime filter if it's not registered yet
682 » //Reset adblockcount every day 597 » if (s_mimeFilter == NULL)
683 » SYSTEMTIME stNow;
684 » GetSystemTime(&stNow);
685 » WORD limitDay = settings->GetValue(SETTING_PLUGIN_LIMITDAY, 0);
686 » if (limitDay != stNow.wDay)
687 { 598 {
688 » » settings->SetValue(SETTING_PLUGIN_ADBLOCKCOUNT, 0); 599 » » s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance ();
689 » » settings->SetValue(SETTING_PLUGIN_LIMITDAY, stNow.wDay);
690 » » settings->Write();
691 » » settings->Read();
692
693 » » //Also register a mime filter if it's not registered yet
694 » » if (s_mimeFilter == NULL)
695 » » {
696 » » » s_mimeFilter = CPluginClientFactory::GetMimeFilterClient Instance();
697 » » }
698
699 » }
700
701 » if (!settings->GetBool(SETTING_PLUGIN_REGISTRATION, false))
702 » {
703 » » if ((settings->GetValue(SETTING_PLUGIN_ADBLOCKCOUNT, 0) == setti ngs->GetValue(SETTING_PLUGIN_ADBLOCKLIMIT, 0))
704 » » » && (settings->GetValue(SETTING_PLUGIN_ADBLOCKLIMIT, 0) > 0))
705 » » {
706 » » » DisplayActivateMessage();
707 » » }
708 } 600 }
709 601
710 // Get the IWebBrowser2 interface 602 // Get the IWebBrowser2 interface
711 CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> WebBrowser2Ptr; 603 CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> WebBrowser2Ptr;
712 VARTYPE vt = pDispParams->rgvarg[6].vt; 604 VARTYPE vt = pDispParams->rgvarg[6].vt;
713 if (vt == VT_DISPATCH) 605 if (vt == VT_DISPATCH)
714 { 606 {
715 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal; 607 WebBrowser2Ptr = pDispParams->rgvarg[6].pdispVal;
716 } 608 }
717 else 609 else
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 ::DestroyWindow(hMenuWnd); 1303 ::DestroyWindow(hMenuWnd);
1412 1304
1413 switch (nCommand) 1305 switch (nCommand)
1414 { 1306 {
1415 case ID_PLUGIN_UPDATE: 1307 case ID_PLUGIN_UPDATE:
1416 { 1308 {
1417 s_isPluginToBeUpdated = true; 1309 s_isPluginToBeUpdated = true;
1418 } 1310 }
1419 break; 1311 break;
1420 1312
1421 case ID_PLUGIN_ACTIVATE:
1422 {
1423 url = CPluginHttpRequest::GetStandardUrl(USERS_SCRIPT_AC TIVATE);
1424 navigationErrorId = PLUGIN_ERROR_NAVIGATION_ACTIVATE;
1425 }
1426 break;
1427
1428 case ID_PLUGIN_ENABLE: 1313 case ID_PLUGIN_ENABLE:
1429 { 1314 {
1430 CPluginSettings* settings = CPluginSettings::GetInstance (); 1315 CPluginSettings* settings = CPluginSettings::GetInstance ();
1431 » » » //Display activation menu if enabling expired plugin 1316
1432 » » » if (!settings->GetPluginEnabled())
1433 » » » {
1434 » » » » if (!settings->GetBool(SETTING_PLUGIN_REGISTRATI ON, false) &&
1435 » » » » » (settings->GetValue(SETTING_PLUGIN_ADBLO CKCOUNT, 0) >=settings->GetValue(SETTING_PLUGIN_ADBLOCKLIMIT, 0)) &&
1436 » » » » » (settings->GetValue(SETTING_PLUGIN_ADBLO CKLIMIT, 0) > 0))
1437 » » » » {» »
1438 » » » » » DisplayActivateMessage();
1439 » » » » » return;
1440 » » » » }
1441 » » » }
1442 settings->TogglePluginEnabled(); 1317 settings->TogglePluginEnabled();
1443 1318
1444 // Enable / disable mime filter 1319 // Enable / disable mime filter
1445 s_criticalSectionLocal.Lock(); 1320 s_criticalSectionLocal.Lock();
1446 { 1321 {
1447 //Display activation menu if enabling expired pl ugin
1448 if (settings->GetPluginEnabled()) 1322 if (settings->GetPluginEnabled())
1449 { 1323 {
1450 s_mimeFilter = CPluginClientFactory::Get MimeFilterClientInstance(); 1324 s_mimeFilter = CPluginClientFactory::Get MimeFilterClientInstance();
1451 } 1325 }
1452 else 1326 else
1453 { 1327 {
1454 s_mimeFilter = NULL; 1328 s_mimeFilter = NULL;
1455 1329
1456 CPluginClientFactory::ReleaseMimeFilterC lientInstance(); 1330 CPluginClientFactory::ReleaseMimeFilterC lientInstance();
1457 } 1331 }
1458 } 1332 }
1459 s_criticalSectionLocal.Unlock(); 1333 s_criticalSectionLocal.Unlock();
1460 1334
1461 #ifdef SUPPORT_WHITELIST 1335 #ifdef SUPPORT_WHITELIST
1462 client->ClearWhiteListCache(); 1336 client->ClearWhiteListCache();
1463 #endif 1337 #endif
1464 } 1338 }
1465 break; 1339 break;
1466 #ifndef ENTERPRISE 1340 #ifndef ENTERPRISE
1467 case ID_SETTINGS: 1341 case ID_SETTINGS:
1468 { 1342 {
1469 // Update settings server side on next IE start, as they hav e possibly changed 1343 // Update settings server side on next IE start, as they hav e possibly changed
1470 CPluginSettings* settings = CPluginSettings::GetInstance(); 1344 CPluginSettings* settings = CPluginSettings::GetInstance();
1471 1345
1472 settings->ForceConfigurationUpdateOnStart(); 1346 settings->ForceConfigurationUpdateOnStart();
1473 1347
1474 #ifdef PRODUCT_SIMPLEADBLOCK 1348 #ifdef PRODUCT_SIMPLEADBLOCK
1475 1349
1476 CPluginHttpRequest httpRequest(USERS_SCRIPT_USER_SETTINGS); 1350 CPluginHttpRequest httpRequest(USERS_SCRIPT_USER_SETTINGS);
1477 1351 » » »
1478 httpRequest.AddPluginId();
1479 httpRequest.Add("username", system->GetUserName(), false);
1480 » » »
1481 url = httpRequest.GetUrl(); 1352 url = httpRequest.GetUrl();
1482 1353
1483 navigationErrorId = PLUGIN_ERROR_NAVIGATION_SETTINGS; 1354 navigationErrorId = PLUGIN_ERROR_NAVIGATION_SETTINGS;
1484 #endif 1355 #endif
1485 } 1356 }
1486 break; 1357 break;
1487 #endif 1358 #endif
1488 case ID_INVITEFRIENDS: 1359 case ID_INVITEFRIENDS:
1489 { 1360 {
1490 url = CPluginHttpRequest::GetStandardUrl(USERS_SCRIPT_IN VITATION); 1361 url = CPluginHttpRequest::GetStandardUrl(USERS_SCRIPT_IN VITATION);
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1698 1569
1699 CPluginClient* client = CPluginClient::GetInstance(); 1570 CPluginClient* client = CPluginClient::GetInstance();
1700 1571
1701 CPluginSettings* settings = CPluginSettings::GetInstance(); 1572 CPluginSettings* settings = CPluginSettings::GetInstance();
1702 1573
1703 settings->RefreshTab(); 1574 settings->RefreshTab();
1704 1575
1705 // Update settings 1576 // Update settings
1706 m_tab->OnUpdateSettings(false); 1577 m_tab->OnUpdateSettings(false);
1707 1578
1708 #ifndef ENTERPRISE
1709 // Plugin activate
1710 if (!settings->GetBool(SETTING_PLUGIN_REGISTRATION, false))
1711 {
1712 ctext = dictionary->Lookup("MENU_ACTIVATE");
1713 fmii.fMask = MIIM_STATE | MIIM_STRING;
1714 fmii.fState = MFS_ENABLED;
1715 fmii.dwTypeData = ctext.GetBuffer();
1716 fmii.cch = ctext.GetLength();
1717 ::SetMenuItemInfo(hMenu, ID_PLUGIN_ACTIVATE, FALSE, &fmii);
1718 }
1719 else
1720 {
1721 ::DeleteMenu(hMenu, ID_PLUGIN_ACTIVATE, FALSE);
1722 }
1723 #else
1724 ::DeleteMenu(hMenu, ID_PLUGIN_ACTIVATE, FALSE);
1725 #endif
1726 #ifndef ENTERPRISE
1727 // Plugin update 1579 // Plugin update
1728 if (settings->IsPluginUpdateAvailable()) 1580 if (settings->IsPluginUpdateAvailable())
1729 { 1581 {
1730 ctext = dictionary->Lookup("MENU_UPDATE"); 1582 ctext = dictionary->Lookup("MENU_UPDATE");
1731 fmii.fMask = MIIM_STATE | MIIM_STRING; 1583 fmii.fMask = MIIM_STATE | MIIM_STRING;
1732 fmii.fState = MFS_ENABLED; 1584 fmii.fState = MFS_ENABLED;
1733 fmii.dwTypeData = ctext.GetBuffer(); 1585 fmii.dwTypeData = ctext.GetBuffer();
1734 fmii.cch = ctext.GetLength(); 1586 fmii.cch = ctext.GetLength();
1735 ::SetMenuItemInfo(hMenu, ID_PLUGIN_UPDATE, FALSE, &fmii); 1587 ::SetMenuItemInfo(hMenu, ID_PLUGIN_UPDATE, FALSE, &fmii);
1736 } 1588 }
1737 else 1589 else
1738 { 1590 {
1739 ::DeleteMenu(hMenu, ID_PLUGIN_UPDATE, FALSE); 1591 ::DeleteMenu(hMenu, ID_PLUGIN_UPDATE, FALSE);
1740 } 1592 }
1741 #else
1742 ::DeleteMenu(hMenu, ID_PLUGIN_UPDATE, FALSE);
1743 #endif
1744 #ifdef SUPPORT_WHITELIST 1593 #ifdef SUPPORT_WHITELIST
1745 { 1594 {
1746 // White list domain 1595 // White list domain
1747 ctext = dictionary->Lookup("MENU_DISABLE_ON"); 1596 ctext = dictionary->Lookup("MENU_DISABLE_ON");
1748 fmii.fMask = MIIM_STRING | MIIM_STATE; 1597 fmii.fMask = MIIM_STRING | MIIM_STATE;
1749 fmii.fState = MFS_DISABLED; 1598 fmii.fState = MFS_DISABLED;
1750 fmii.dwTypeData = ctext.GetBuffer(); 1599 fmii.dwTypeData = ctext.GetBuffer();
1751 fmii.cch = ctext.GetLength(); 1600 fmii.cch = ctext.GetLength();
1752 1601
1753 UINT index = WM_WHITELIST_DOMAIN; 1602 UINT index = WM_WHITELIST_DOMAIN;
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after
2366 } 2215 }
2367 else 2216 else
2368 { 2217 {
2369 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR _UI, PLUGIN_ERROR_UI_GET_STATUSBAR, "Class::Get statusbar state"); 2218 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR _UI, PLUGIN_ERROR_UI_GET_STATUSBAR, "Class::Get statusbar state");
2370 } 2219 }
2371 2220
2372 CPluginSettings* settings = CPluginSettings::GetInstance(); 2221 CPluginSettings* settings = CPluginSettings::GetInstance();
2373 2222
2374 CPluginHttpRequest httpRequest(USERS_SCRIPT_WELCOME); 2223 CPluginHttpRequest httpRequest(USERS_SCRIPT_WELCOME);
2375 2224
2376 httpRequest.AddPluginId(); 2225 » » » » » httpRequest.Add("errors", settings->GetE rrorList());
2377 httpRequest.Add("username", system->GetUserName(), false);
2378 httpRequest.Add("errors", settings->GetErrorList());
2379 2226
2380 2227
2381 hr = browser->Navigate(CComBSTR(httpRequest.GetU rl() + "&src=" + DOWNLOAD_SOURCE), NULL, NULL, NULL, NULL); 2228 hr = browser->Navigate(CComBSTR(httpRequest.GetU rl() + "&src=" + DOWNLOAD_SOURCE), NULL, NULL, NULL, NULL);
2382 if (FAILED(hr)) 2229 if (FAILED(hr))
2383 { 2230 {
2384 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR _NAVIGATION, PLUGIN_ERROR_NAVIGATION_WELCOME, "Navigation::Welcome page failed") 2231 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR _NAVIGATION, PLUGIN_ERROR_NAVIGATION_WELCOME, "Navigation::Welcome page failed")
2385 } 2232 }
2386 2233
2387 // Update settings server side on next IE start, as they have possibly changed 2234 // Update settings server side on next IE start, as they have possibly changed
2388 settings->ForceConfigurationUpdateOnStart(); 2235 settings->ForceConfigurationUpdateOnStart();
2389 } 2236 }
2390 } 2237 }
2391 else 2238 else
2392 { 2239 {
2393 // Redirect to info page 2240 // Redirect to info page
2394 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser(); 2241 CComQIPtr<IWebBrowser2> browser = GetAsyncBrowser();
2395 if (browser) 2242 if (browser)
2396 { 2243 {
2397 CPluginHttpRequest httpRequest(USERS_SCRIPT_INFO); 2244 CPluginHttpRequest httpRequest(USERS_SCRIPT_INFO);
2398 2245
2399 httpRequest.AddPluginId(); 2246 » » » » » httpRequest.Add("info", wParam);
2400 » » » httpRequest.Add("info", wParam);
2401 2247
2402 VARIANT vFlags; 2248 VARIANT vFlags;
2403 vFlags.vt = VT_I4; 2249 vFlags.vt = VT_I4;
2404 vFlags.intVal = navOpenInNewTab; 2250 vFlags.intVal = navOpenInNewTab;
2405 2251
2406 HRESULT hr = browser->Navigate(CComBSTR(httpRequ est.GetUrl()), &vFlags, NULL, NULL, NULL); 2252 HRESULT hr = browser->Navigate(CComBSTR(httpRequ est.GetUrl()), &vFlags, NULL, NULL, NULL);
2407 if (FAILED(hr)) 2253 if (FAILED(hr))
2408 { 2254 {
2409 vFlags.intVal = navOpenInNewWindow; 2255 vFlags.intVal = navOpenInNewWindow;
2410 2256
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
2567 } 2413 }
2568 } 2414 }
2569 } 2415 }
2570 2416
2571 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 2417 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
2572 } 2418 }
2573 2419
2574 return hTabWnd; 2420 return hTabWnd;
2575 2421
2576 } 2422 }
OLDNEW

Powered by Google App Engine
This is Rietveld