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

Side by Side Diff: src/plugin/PluginClass.cpp

Issue 6567422169448448: Issue 119 - Switch to injecting CSS for element hiding (Closed)
Patch Set: Created Dec. 10, 2014, 5:12 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 "PluginSettings.h" 4 #include "PluginSettings.h"
5 #include "PluginSystem.h" 5 #include "PluginSystem.h"
6 #include "PluginFilter.h" 6 #include "PluginFilter.h"
7 #include "PluginMimeFilterClient.h" 7 #include "PluginMimeFilterClient.h"
8 #include "PluginClient.h" 8 #include "PluginClient.h"
9 #include "PluginClientFactory.h" 9 #include "PluginClientFactory.h"
10 #include "PluginMutex.h" 10 #include "PluginMutex.h"
11 #include "sddl.h" 11 #include "sddl.h"
12 #include "PluginUtil.h" 12 #include "PluginUtil.h"
13 #include "PluginUserSettings.h" 13 #include "PluginUserSettings.h"
14 #include "../shared/Utils.h" 14 #include "../shared/Utils.h"
15 #include "../shared/Dictionary.h" 15 #include "../shared/Dictionary.h"
16 #include "WebBrowserEventsListener.h"
16 #include <thread> 17 #include <thread>
17 #include <array> 18 #include <array>
18 19
19 #ifdef DEBUG_HIDE_EL 20 #ifdef DEBUG_HIDE_EL
20 DWORD profileTime = 0; 21 DWORD profileTime = 0;
21 #endif 22 #endif
22 23
23 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR); 24 typedef HANDLE (WINAPI *OPENTHEMEDATA)(HWND, LPCWSTR);
24 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT); 25 typedef HRESULT (WINAPI *DRAWTHEMEBACKGROUND)(HANDLE, HDC, INT, INT, LPRECT, LPR ECT);
25 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE); 26 typedef HRESULT (WINAPI *CLOSETHEMEDATA)(HANDLE);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 } 65 }
65 66
66 int Width() const 67 int Width() const
67 { 68 {
68 return right - left; 69 return right - left;
69 } 70 }
70 }; 71 };
71 } 72 }
72 73
73 CPluginClass::CPluginClass() 74 CPluginClass::CPluginClass()
75 : m_data(std::make_shared<Data>())
74 { 76 {
75 //Use this line to debug memory leaks 77 //Use this line to debug memory leaks
76 // _CrtDumpMemoryLeaks(); 78 // _CrtDumpMemoryLeaks();
77 79
78 m_isAdviced = false; 80 m_isAdviced = false;
79 m_hTabWnd = NULL; 81 m_hTabWnd = NULL;
80 m_hStatusBarWnd = NULL; 82 m_hStatusBarWnd = NULL;
81 m_hPaneWnd = NULL; 83 m_hPaneWnd = NULL;
82 m_nPaneWidth = 0; 84 m_nPaneWidth = 0;
83 m_pWndProcStatus = NULL; 85 m_pWndProcStatus = NULL;
84 m_hTheme = NULL; 86 m_hTheme = NULL;
85 m_isInitializedOk = false; 87 m_isInitializedOk = false;
86 88
87 89
88 m_tab = new CPluginTab(this); 90 m_data->tab.reset(new CPluginTab(this));
89
90 Dictionary::Create(GetBrowserLanguage()); 91 Dictionary::Create(GetBrowserLanguage());
91 } 92 }
92 93
93 CPluginClass::~CPluginClass() 94 CPluginClass::~CPluginClass()
94 { 95 {
95 delete m_tab;
96 } 96 }
97 97
98
99 ///////////////////////////////////////////////////////////////////////////// 98 /////////////////////////////////////////////////////////////////////////////
100 // Initialization 99 // Initialization
101 100
102 HRESULT CPluginClass::FinalConstruct() 101 HRESULT CPluginClass::FinalConstruct()
103 { 102 {
104 return S_OK; 103 return S_OK;
105 } 104 }
106 105
107 void CPluginClass::FinalRelease() 106 void CPluginClass::FinalRelease()
108 { 107 {
109 s_criticalSectionBrowser.Lock(); 108 s_criticalSectionBrowser.Lock();
110 { 109 {
111 m_webBrowser2.Release(); 110 m_data.reset();
112 } 111 }
113 s_criticalSectionBrowser.Unlock(); 112 s_criticalSectionBrowser.Unlock();
114 } 113 }
115 114
116 HWND CPluginClass::GetBrowserHWND() const 115 HWND CPluginClass::GetBrowserHWND() const
117 { 116 {
118 SHANDLE_PTR hBrowserWndHandle = NULL; 117 SHANDLE_PTR hBrowserWndHandle = NULL;
119 118
120 CComQIPtr<IWebBrowser2> browser = GetBrowser(); 119 CComQIPtr<IWebBrowser2> browser = GetBrowser();
121 if (browser) 120 if (browser)
122 { 121 {
123 HRESULT hr = browser->get_HWND(&hBrowserWndHandle); 122 HRESULT hr = browser->get_HWND(&hBrowserWndHandle);
124 if (FAILED(hr)) 123 if (FAILED(hr))
125 { 124 {
126 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_BROWSER_WINDOW, " Class::GetBrowserHWND - failed") 125 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_UI, PLUGIN_ERROR_UI_GET_BROWSER_WINDOW, " Class::GetBrowserHWND - failed")
127 } 126 }
128 } 127 }
129 128
130 return (HWND)hBrowserWndHandle; 129 return (HWND)hBrowserWndHandle;
131 } 130 }
132 131
133 132
134 CComQIPtr<IWebBrowser2> CPluginClass::GetBrowser() const 133 CComQIPtr<IWebBrowser2> CPluginClass::GetBrowser() const
135 { 134 {
136 CComQIPtr<IWebBrowser2> browser; 135 CComQIPtr<IWebBrowser2> browser;
137 136
138 s_criticalSectionBrowser.Lock(); 137 s_criticalSectionBrowser.Lock();
139 { 138 {
140 browser = m_webBrowser2; 139 browser = m_data->webBrowser2;
141 } 140 }
142 s_criticalSectionBrowser.Unlock(); 141 s_criticalSectionBrowser.Unlock();
143 142
144 return browser; 143 return browser;
145 } 144 }
146 145
147 146
148 CComQIPtr<IWebBrowser2> CPluginClass::GetAsyncBrowser() 147 CComQIPtr<IWebBrowser2> CPluginClass::GetAsyncBrowser()
149 { 148 {
150 CComQIPtr<IWebBrowser2> browser; 149 CComQIPtr<IWebBrowser2> browser;
(...skipping 17 matching lines...) Expand all
168 CComBSTR bstrURL; 167 CComBSTR bstrURL;
169 168
170 if (SUCCEEDED(browser->get_LocationURL(&bstrURL))) 169 if (SUCCEEDED(browser->get_LocationURL(&bstrURL)))
171 { 170 {
172 url = bstrURL; 171 url = bstrURL;
173 CPluginClient::UnescapeUrl(url); 172 CPluginClient::UnescapeUrl(url);
174 } 173 }
175 } 174 }
176 else 175 else
177 { 176 {
178 url = m_tab->GetDocumentUrl(); 177 url = m_data->tab->GetDocumentUrl();
179 } 178 }
180 179
181 return url; 180 return url;
182 } 181 }
183 182
184 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr) 183 DWORD WINAPI CPluginClass::StartInitObject(LPVOID thisPtr)
185 { 184 {
186 if (thisPtr == NULL) 185 if (thisPtr == NULL)
187 return 0; 186 return 0;
188 if (!((CPluginClass*)thisPtr)->InitObject(true)) 187 if (!((CPluginClass*)thisPtr)->InitObject(true))
(...skipping 23 matching lines...) Expand all
212 DEBUG_GENERAL(L"============================================================ ====================\nNEW TAB UI\n============================================== ==================================") 211 DEBUG_GENERAL(L"============================================================ ====================\nNEW TAB UI\n============================================== ==================================")
213 212
214 HRESULT hr = ::CoInitialize(NULL); 213 HRESULT hr = ::CoInitialize(NULL);
215 if (FAILED(hr)) 214 if (FAILED(hr))
216 { 215 {
217 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, " Class::SetSite - CoInitialize"); 216 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE_COINIT, " Class::SetSite - CoInitialize");
218 } 217 }
219 218
220 s_criticalSectionBrowser.Lock(); 219 s_criticalSectionBrowser.Lock();
221 { 220 {
222 m_webBrowser2 = unknownSite; 221 m_data->webBrowser2 = ATL::CComQIPtr<IWebBrowser2>(unknownSite);
223 } 222 }
224 s_criticalSectionBrowser.Unlock(); 223 s_criticalSectionBrowser.Unlock();
225 224
226 //register the mimefilter 225 //register the mimefilter
227 //and only mimefilter 226 //and only mimefilter
228 //on some few computers the mimefilter does not get properly registered when it is done on another thread 227 //on some few computers the mimefilter does not get properly registered when it is done on another thread
229 228
230 s_criticalSectionLocal.Lock(); 229 s_criticalSectionLocal.Lock();
231 { 230 {
232 // Always register on startup, then check if we need to unregister in a se parate thread 231 // Always register on startup, then check if we need to unregister in a se parate thread
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 DEBUG_GENERAL("Loaded as toolbar handler"); 268 DEBUG_GENERAL("Loaded as toolbar handler");
270 CComPtr<IServiceProvider> pServiceProvider; 269 CComPtr<IServiceProvider> pServiceProvider;
271 270
272 HRESULT hr = unknownSite->QueryInterface(&pServiceProvider); 271 HRESULT hr = unknownSite->QueryInterface(&pServiceProvider);
273 if (SUCCEEDED(hr)) 272 if (SUCCEEDED(hr))
274 { 273 {
275 if (pServiceProvider) 274 if (pServiceProvider)
276 { 275 {
277 s_criticalSectionBrowser.Lock(); 276 s_criticalSectionBrowser.Lock();
278 { 277 {
279 HRESULT hr = pServiceProvider->QueryService(IID_IWebBrowserApp, &m _webBrowser2); 278 HRESULT hr = pServiceProvider->QueryService(IID_IWebBrowserApp, &m _data->webBrowser2);
280 if (SUCCEEDED(hr)) 279 if (SUCCEEDED(hr))
281 { 280 {
282 if (m_webBrowser2) 281 if (m_data->webBrowser2)
283 { 282 {
284 InitObject(false); 283 InitObject(false);
285 } 284 }
286 } 285 }
287 else 286 else
288 { 287 {
289 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE _QUERY_BROWSER, "Class::SetSite - QueryService (IID_IWebBrowserApp)"); 288 DEBUG_ERROR_LOG(hr, PLUGIN_ERROR_SET_SITE, PLUGIN_ERROR_SET_SITE _QUERY_BROWSER, "Class::SetSite - QueryService (IID_IWebBrowserApp)");
290 } 289 }
291 } 290 }
292 s_criticalSectionBrowser.Unlock(); 291 s_criticalSectionBrowser.Unlock();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 if (s_instances.empty()) 341 if (s_instances.empty())
343 { 342 {
344 CPluginClientFactory::ReleaseMimeFilterClientInstance(); 343 CPluginClientFactory::ReleaseMimeFilterClientInstance();
345 } 344 }
346 } 345 }
347 s_criticalSectionLocal.Unlock(); 346 s_criticalSectionLocal.Unlock();
348 347
349 // Release browser interface 348 // Release browser interface
350 s_criticalSectionBrowser.Lock(); 349 s_criticalSectionBrowser.Lock();
351 { 350 {
352 m_webBrowser2.Release(); 351 m_data->webBrowser2.Release();
353 } 352 }
354 s_criticalSectionBrowser.Unlock(); 353 s_criticalSectionBrowser.Unlock();
355 354
356 DEBUG_GENERAL("============================================================= ===================\nNEW TAB UI - END\n========================================= =======================================") 355 DEBUG_GENERAL("============================================================= ===================\nNEW TAB UI - END\n========================================= =======================================")
357 356
358 ::CoUninitialize(); 357 ::CoUninitialize();
359 } 358 }
360 359
361 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite); 360 return IObjectWithSiteImpl<CPluginClass>::SetSite(unknownSite);
362 } 361 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 return; 488 return;
490 } 489 }
491 490
492 if (!urlVariant || urlVariant->vt != VT_BSTR) 491 if (!urlVariant || urlVariant->vt != VT_BSTR)
493 { 492 {
494 return; 493 return;
495 } 494 }
496 std::wstring url(V_BSTR(urlVariant), SysStringLen(V_BSTR(urlVariant))); 495 std::wstring url(V_BSTR(urlVariant), SysStringLen(V_BSTR(urlVariant)));
497 UnescapeUrl(url); 496 UnescapeUrl(url);
498 497
498 {
Oleksandr 2015/02/04 20:59:57 I would prefer for this to be a separate function
sergei 2015/04/13 08:06:58 I've extracted it into CPluginClass::EnsureWebBrow
sergei 2015/04/13 08:06:58 I guess here and below instead of CPluginClientFac
499 auto it = m_data->connectedWebBrowsersCache.find(webBrowser);
500 if (m_data->connectedWebBrowsersCache.end() == it)
Oleksandr 2015/02/04 20:59:57 This is Yoda condition, IMO
sergei 2015/04/13 08:06:58 fixed
501 {
502 ATL::CComObject<WebBrowserEventsListener>* listenerImpl = nullptr;
503 if (FAILED(ATL::CComObject<WebBrowserEventsListener>::CreateInstance(&list enerImpl)))
504 {
505 return;
506 }
507 ATL::CComPtr<IUnknown> listnerRefCounterGuard(listenerImpl->GetUnknown());
Oleksandr 2015/02/04 20:59:57 missing 'e'? listenerRefCounterGuard
sergei 2015/04/13 08:06:58 fixed
508 std::weak_ptr<Data> dataForCapturing = m_data;
509 auto onListenerDestroy = [webBrowser, dataForCapturing]
Oleksandr 2015/02/04 20:59:57 If this whole block is moved to CPluginClientFacto
sergei 2015/04/13 08:06:58 I think it will complicate the code because it is
510 {
511 if (auto data = dataForCapturing.lock())
512 {
513 data->connectedWebBrowsersCache.erase(webBrowser);
514 }
515 };
516 if (FAILED(listenerImpl->Init(webBrowser, onListenerDestroy)))
517 {
518 return;
519 }
520 listenerImpl->reloaded = [webBrowser, dataForCapturing]
521 {
522 if (auto data = dataForCapturing.lock())
523 {
524 auto frameSrc = GetLocationUrl(*webBrowser);
525 UnescapeUrl(frameSrc);
526 data->tab->OnDocumentComplete(webBrowser, ToCString(frameSrc), data->w ebBrowser2.IsEqualObject(webBrowser));
527 }
528 };
529 m_data->connectedWebBrowsersCache.emplace(webBrowser, listenerImpl);
530 }
531 }
532
499 //Register a mime filter if it's not registered yet 533 //Register a mime filter if it's not registered yet
500 if (s_mimeFilter == NULL) 534 if (s_mimeFilter == NULL)
501 { 535 {
502 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance(); 536 s_mimeFilter = CPluginClientFactory::GetMimeFilterClientInstance();
503 } 537 }
504 538
505 CString urlCString = ToCString(url); 539 CString urlCString = ToCString(url);
506 540
507 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na vigating new page 541 // If webbrowser2 is equal to top level browser (as set in SetSite), we are na vigating new page
508 CPluginClient* client = CPluginClient::GetInstance(); 542 CPluginClient* client = CPluginClient::GetInstance();
509 543
510 if (urlCString.Find(L"javascript") == 0) 544 if (urlCString.Find(L"javascript") == 0)
511 { 545 {
512 } 546 }
513 else if (GetBrowser().IsEqualObject(webBrowser)) 547 else if (GetBrowser().IsEqualObject(webBrowser))
514 { 548 {
515 m_tab->OnNavigate(urlCString); 549 m_data->tab->OnNavigate(urlCString);
516 550
517 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + urlCString + "\n============ ====================================================================") 551 DEBUG_GENERAL(L"============================================================ ====================\nBegin main navigation url:" + urlCString + "\n============ ====================================================================")
518 552
519 #ifdef ENABLE_DEBUG_RESULT 553 #ifdef ENABLE_DEBUG_RESULT
520 CPluginDebug::DebugResultDomain(urlCString); 554 CPluginDebug::DebugResultDomain(urlCString);
521 #endif 555 #endif
522 556
523 UpdateStatusBar(); 557 UpdateStatusBar();
524 } 558 }
525 else 559 else
526 { 560 {
527 DEBUG_NAVI(L"Navi::Begin navigation url:" + urlCString) 561 DEBUG_NAVI(L"Navi::Begin navigation url:" + urlCString)
528 m_tab->CacheFrame(urlCString); 562 m_data->tab->CacheFrame(urlCString);
529 } 563 }
530 } 564 }
531 565
532 void STDMETHODCALLTYPE CPluginClass::OnDownloadBegin() 566 void STDMETHODCALLTYPE CPluginClass::OnDownloadBegin()
533 { 567 {
534 DEBUG_NAVI("Navi::Download Begin") 568 DEBUG_NAVI("Navi::Download Begin")
535 } 569 }
536 570
537 void STDMETHODCALLTYPE CPluginClass::OnDownloadComplete() 571 void STDMETHODCALLTYPE CPluginClass::OnDownloadComplete()
538 { 572 {
539 DEBUG_NAVI("Navi::Download Complete") 573 DEBUG_NAVI("Navi::Download Complete")
540 ATL::CComPtr<IWebBrowser2> browser = GetBrowser(); 574 ATL::CComPtr<IWebBrowser2> browser = GetBrowser();
541 if (browser) 575 if (browser)
542 { 576 {
543 m_tab->OnDownloadComplete(browser); 577 m_data->tab->OnDownloadComplete(browser);
544 } 578 }
545 } 579 }
546 580
547 void STDMETHODCALLTYPE CPluginClass::OnDocumentComplete(IDispatch* frameBrowserD isp, VARIANT* /*urlOrPidl*/) 581 void STDMETHODCALLTYPE CPluginClass::OnDocumentComplete(IDispatch* frameBrowserD isp, VARIANT* /*urlOrPidl*/)
548 { 582 {
549 ATL::CComQIPtr<IWebBrowser2> webBrowser2 = frameBrowserDisp;
550 if (!webBrowser2)
551 {
552 return;
553 }
554 ATL::CString frameSrc;
555 ATL::CComBSTR locationUrl;
556 if (FAILED(webBrowser2->get_LocationURL(&locationUrl)) && !!locationUrl)
557 {
558 return;
559 }
560 frameSrc = locationUrl;
561 CPluginClient::UnescapeUrl(frameSrc);
562 bool isRootPageBrowser = GetBrowser().IsEqualObject(webBrowser2);
563 m_tab->OnDocumentComplete(webBrowser2, frameSrc, isRootPageBrowser);
564 } 583 }
565 584
566 void STDMETHODCALLTYPE CPluginClass::OnWindowStateChanged(unsigned long flags, u nsigned long validFlagsMask) 585 void STDMETHODCALLTYPE CPluginClass::OnWindowStateChanged(unsigned long flags, u nsigned long validFlagsMask)
567 { 586 {
568 DEBUG_GENERAL("Tab changed"); 587 DEBUG_GENERAL("Tab changed");
569 bool newtabshown = validFlagsMask == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLEC MDIDF_WINDOWSTATE_ENABLED) 588 bool newtabshown = validFlagsMask == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLEC MDIDF_WINDOWSTATE_ENABLED)
570 && flags == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLECMDIDF_WIN DOWSTATE_ENABLED); 589 && flags == (OLECMDIDF_WINDOWSTATE_USERVISIBLE | OLECMDIDF_WIN DOWSTATE_ENABLED);
571 if (newtabshown) 590 if (newtabshown)
572 { 591 {
573 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge tCurrentThreadId()); 592 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(Ge tCurrentThreadId());
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 } 975 }
957 } 976 }
958 } 977 }
959 s_criticalSectionLocal.Unlock(); 978 s_criticalSectionLocal.Unlock();
960 979
961 return result; 980 return result;
962 } 981 }
963 982
964 CPluginTab* CPluginClass::GetTab() 983 CPluginTab* CPluginClass::GetTab()
965 { 984 {
966 return m_tab; 985 return m_data->tab.get();
967 } 986 }
968 987
969 CPluginTab* CPluginClass::GetTab(DWORD dwThreadId) 988 CPluginTab* CPluginClass::GetTab(DWORD dwThreadId)
970 { 989 {
971 CPluginTab* tab = NULL; 990 CPluginTab* tab = NULL;
972 991
973 s_criticalSectionLocal.Lock(); 992 s_criticalSectionLocal.Lock();
974 { 993 {
975 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(dw ThreadId); 994 std::map<DWORD,CPluginClass*>::const_iterator it = s_threadInstances.find(dw ThreadId);
976 if (it != s_threadInstances.end()) 995 if (it != s_threadInstances.end())
977 { 996 {
978 tab = it->second->m_tab; 997 tab = it->second->m_data->tab.get();
979 } 998 }
980 } 999 }
981 s_criticalSectionLocal.Unlock(); 1000 s_criticalSectionLocal.Unlock();
982 1001
983 return tab; 1002 return tab;
984 } 1003 }
985 1004
986 1005
987 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText) 1006 STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, O LECMD prgCmds[], OLECMDTEXT* pCmdText)
988 { 1007 {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1222
1204 STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, V ARIANTARG*) 1223 STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, V ARIANTARG*)
1205 { 1224 {
1206 HWND hBrowserWnd = GetBrowserHWND(); 1225 HWND hBrowserWnd = GetBrowserHWND();
1207 if (!hBrowserWnd) 1226 if (!hBrowserWnd)
1208 { 1227 {
1209 return E_FAIL; 1228 return E_FAIL;
1210 } 1229 }
1211 1230
1212 // Create menu 1231 // Create menu
1213 HMENU hMenu = CreatePluginMenu(m_tab->GetDocumentUrl()); 1232 HMENU hMenu = CreatePluginMenu(m_data->tab->GetDocumentUrl());
1214 if (!hMenu) 1233 if (!hMenu)
1215 { 1234 {
1216 return E_FAIL; 1235 return E_FAIL;
1217 } 1236 }
1218 1237
1219 // Check if button in toolbar was pressed 1238 // Check if button in toolbar was pressed
1220 int nIDCommand = -1; 1239 int nIDCommand = -1;
1221 BOOL bRightAlign = FALSE; 1240 BOOL bRightAlign = FALSE;
1222 1241
1223 POINT pt; 1242 POINT pt;
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
1712 } 1731 }
1713 } 1732 }
1714 } 1733 }
1715 1734
1716 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT); 1735 hTabWnd = ::GetWindow(hTabWnd, GW_HWNDNEXT);
1717 } 1736 }
1718 1737
1719 return hTabWnd; 1738 return hTabWnd;
1720 1739
1721 } 1740 }
OLDNEW
« no previous file with comments | « src/plugin/PluginClass.h ('k') | src/plugin/PluginFilter.h » ('j') | src/plugin/PluginFilter.h » ('J')

Powered by Google App Engine
This is Rietveld