Index: src/plugin/PluginClass.cpp |
=================================================================== |
--- a/src/plugin/PluginClass.cpp |
+++ b/src/plugin/PluginClass.cpp |
@@ -971,14 +971,20 @@ |
return tab; |
} |
- |
+// Entry point |
STDMETHODIMP CPluginClass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT* pCmdText) |
{ |
- if (cCmds == 0) return E_INVALIDARG; |
- if (prgCmds == 0) return E_POINTER; |
+ try |
+ { |
+ if (cCmds == 0) return E_INVALIDARG; |
+ if (prgCmds == 0) return E_POINTER; |
- prgCmds[0].cmdf = OLECMDF_ENABLED; |
- |
+ prgCmds[0].cmdf = OLECMDF_ENABLED; |
+ } |
+ catch (...) |
+ { |
+ return E_FAIL; |
+ } |
return S_OK; |
} |
@@ -1180,116 +1186,123 @@ |
return true; |
} |
- |
+// Entry point |
STDMETHODIMP CPluginClass::Exec(const GUID*, DWORD nCmdID, DWORD, VARIANTARG*, VARIANTARG*) |
{ |
- HWND hBrowserWnd = GetBrowserHWND(); |
- if (!hBrowserWnd) |
+ try |
{ |
- return E_FAIL; |
- } |
+ HWND hBrowserWnd = GetBrowserHWND(); |
+ if (!hBrowserWnd) |
+ { |
+ return E_FAIL; |
+ } |
- // Create menu |
- HMENU hMenu = CreatePluginMenu(m_tab->GetDocumentUrl()); |
- if (!hMenu) |
- { |
- return E_FAIL; |
- } |
+ // Create menu |
+ HMENU hMenu = CreatePluginMenu(m_tab->GetDocumentUrl()); |
+ if (!hMenu) |
+ { |
+ return E_FAIL; |
+ } |
- // Check if button in toolbar was pressed |
- int nIDCommand = -1; |
- BOOL bRightAlign = FALSE; |
+ // Check if button in toolbar was pressed |
+ int nIDCommand = -1; |
+ BOOL bRightAlign = FALSE; |
- POINT pt; |
- GetCursorPos(&pt); |
+ POINT pt; |
+ GetCursorPos(&pt); |
- HWND hWndToolBar = ::WindowFromPoint(pt); |
+ HWND hWndToolBar = ::WindowFromPoint(pt); |
- DWORD nProcessId; |
- ::GetWindowThreadProcessId(hWndToolBar, &nProcessId); |
+ DWORD nProcessId; |
+ ::GetWindowThreadProcessId(hWndToolBar, &nProcessId); |
- if (hWndToolBar && ::GetCurrentProcessId() == nProcessId) |
- { |
- ::ScreenToClient(hWndToolBar, &pt); |
- int nButton = (int)::SendMessage(hWndToolBar, TB_HITTEST, 0, (LPARAM)&pt); |
+ if (hWndToolBar && ::GetCurrentProcessId() == nProcessId) |
+ { |
+ ::ScreenToClient(hWndToolBar, &pt); |
+ int nButton = (int)::SendMessage(hWndToolBar, TB_HITTEST, 0, (LPARAM)&pt); |
- if (nButton > 0) |
- { |
- TBBUTTON pTBBtn = {}; |
+ if (nButton > 0) |
+ { |
+ TBBUTTON pTBBtn = {}; |
- if (SendMessage(hWndToolBar, TB_GETBUTTON, nButton, (LPARAM)&pTBBtn)) |
- { |
- RECT rcButton; |
- nIDCommand = pTBBtn.idCommand; |
+ if (SendMessage(hWndToolBar, TB_GETBUTTON, nButton, (LPARAM)&pTBBtn)) |
+ { |
+ RECT rcButton; |
+ nIDCommand = pTBBtn.idCommand; |
- if (SendMessage(hWndToolBar, TB_GETRECT, nIDCommand, (LPARAM)&rcButton)) |
- { |
- pt.x = rcButton.left; |
- pt.y = rcButton.bottom; |
- ClientToScreen(hWndToolBar, &pt); |
- |
- RECT rcWorkArea; |
- SystemParametersInfo(SPI_GETWORKAREA, 0, (LPVOID)&rcWorkArea, 0); |
- if (rcWorkArea.right - pt.x < 150) |
+ if (SendMessage(hWndToolBar, TB_GETRECT, nIDCommand, (LPARAM)&rcButton)) |
{ |
- bRightAlign = TRUE; |
- pt.x = rcButton.right; |
+ pt.x = rcButton.left; |
pt.y = rcButton.bottom; |
ClientToScreen(hWndToolBar, &pt); |
+ |
+ RECT rcWorkArea; |
+ SystemParametersInfo(SPI_GETWORKAREA, 0, (LPVOID)&rcWorkArea, 0); |
+ if (rcWorkArea.right - pt.x < 150) |
+ { |
+ bRightAlign = TRUE; |
+ pt.x = rcButton.right; |
+ pt.y = rcButton.bottom; |
+ ClientToScreen(hWndToolBar, &pt); |
+ } |
} |
} |
} |
+ else |
+ { |
+ GetCursorPos(&pt); |
+ } |
+ } |
+ |
+ // Display menu |
+ UINT nFlags = 0; |
+ if (bRightAlign) |
+ { |
+ nFlags |= TPM_RIGHTALIGN; |
} |
else |
{ |
- GetCursorPos(&pt); |
+ nFlags |= TPM_LEFTALIGN; |
} |
+ |
+ DisplayPluginMenu(hMenu, nIDCommand, pt, nFlags); |
} |
- |
- // Display menu |
- UINT nFlags = 0; |
- if (bRightAlign) |
+ catch (...) |
{ |
- nFlags |= TPM_RIGHTALIGN; |
+ return E_FAIL; // |
Oleksandr
2016/01/04 10:46:13
Nit: there was a comment intended here?
Eric
2016/01/04 16:44:24
Yes. Added.
|
} |
- else |
- { |
- nFlags |= TPM_LEFTALIGN; |
- } |
- |
- DisplayPluginMenu(hMenu, nIDCommand, pt, nFlags); |
return S_OK; |
} |
-///////////////////////////////////////////////////////////////////////////// |
-// Window procedures |
- |
+// Entry point |
LRESULT CALLBACK CPluginClass::NewStatusProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
{ |
- // Find tab |
- CPluginClass *pClass = FindInstance(hWnd); |
- if (!pClass) |
+ try |
{ |
- return DefWindowProc(hWnd, message, wParam, lParam); |
- } |
+ // Find tab |
+ CPluginClass *pClass = FindInstance(hWnd); |
+ if (!pClass) |
+ { |
+ return DefWindowProc(hWnd, message, wParam, lParam); |
Eric
2016/01/04 16:44:24
Race condition here.
|
+ } |
- // Process message |
- switch (message) |
- { |
- case SB_SIMPLE: |
+ // Process message |
+ switch (message) |
+ { |
+ case SB_SIMPLE: |
{ |
ShowWindow(pClass->m_hPaneWnd, !wParam); |
break; |
} |
- case WM_SYSCOLORCHANGE: |
+ case WM_SYSCOLORCHANGE: |
{ |
pClass->UpdateTheme(); |
break; |
} |
- case SB_SETPARTS: |
+ case SB_SETPARTS: |
{ |
if (!lParam || !wParam || wParam > 30 || !IsWindow(pClass->m_hPaneWnd)) |
{ |
@@ -1302,7 +1315,7 @@ |
return CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wParam, lParam); |
} |
- HLOCAL hLocal = LocalAlloc(LHND, sizeof(int) * (nParts+1)); |
+ HLOCAL hLocal = LocalAlloc(LHND, sizeof(int) * (nParts + 1)); |
LPINT lpParts = (LPINT)LocalLock(hLocal); |
memcpy(lpParts, (void*)lParam, wParam*sizeof(int)); |
@@ -1332,15 +1345,19 @@ |
return hRet; |
} |
- default: |
- break; |
+ default: |
+ break; |
+ } |
+ |
+ LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wParam, lParam); |
+ |
+ |
+ return result; |
} |
- |
- LRESULT result = CallWindowProc(pClass->m_pWndProcStatus, hWnd, message, wParam, lParam); |
- |
- |
- return result; |
- |
+ catch (...) |
+ { |
+ return E_FAIL; |
Oleksandr
2016/01/04 10:46:13
I think we should call: return DefWindowProc(hWnd,
sergei
2016/01/04 11:27:36
It's better to use CallWindowProc instead of DefWi
Eric
2016/01/04 16:44:24
Sergei's right.
This observation also points out
|
+ } |
} |
@@ -1369,26 +1386,28 @@ |
return hIcon; |
} |
- |
+// Entry point |
LRESULT CALLBACK CPluginClass::PaneWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
{ |
- // Find tab |
- CPluginClass *pClass = FindInstance(GetParent(hWnd)); |
- if (!pClass) |
+ try |
{ |
- return ::DefWindowProc(hWnd, message, wParam, lParam); |
- } |
+ // Find tab |
+ CPluginClass *pClass = FindInstance(GetParent(hWnd)); |
+ if (!pClass) |
+ { |
+ return ::DefWindowProc(hWnd, message, wParam, lParam); |
+ } |
- // Process message |
- switch (message) |
- { |
+ // Process message |
+ switch (message) |
+ { |
- case WM_SETCURSOR: |
+ case WM_SETCURSOR: |
{ |
::SetCursor(::LoadCursor(NULL, IDC_ARROW)); |
return TRUE; |
} |
- case WM_PAINT: |
+ case WM_PAINT: |
{ |
PAINTSTRUCT ps; |
HDC hDC = ::BeginPaint(hWnd, &ps); |
@@ -1456,12 +1475,12 @@ |
#ifdef _DEBUG |
// Display version |
HFONT hFont = (HFONT)::SendMessage(pClass->m_hStatusBarWnd, WM_GETFONT, 0, 0); |
- HGDIOBJ hOldFont = ::SelectObject(hDC,hFont); |
+ HGDIOBJ hOldFont = ::SelectObject(hDC, hFont); |
AdblockPlus::Rectangle rcText = rcClient; |
rcText.left += offx; |
::SetBkMode(hDC, TRANSPARENT); |
- ::DrawTextW(hDC, IEPLUGIN_VERSION, -1, &rcText, DT_WORD_ELLIPSIS|DT_LEFT|DT_SINGLELINE|DT_VCENTER); |
+ ::DrawTextW(hDC, IEPLUGIN_VERSION, -1, &rcText, DT_WORD_ELLIPSIS | DT_LEFT | DT_SINGLELINE | DT_VCENTER); |
::SelectObject(hDC, hOldFont); |
#endif // _DEBUG |
@@ -1473,8 +1492,8 @@ |
return 0; |
} |
- case WM_LBUTTONUP: |
- case WM_RBUTTONUP: |
+ case WM_LBUTTONUP: |
+ case WM_RBUTTONUP: |
{ |
std::wstring url = pClass->GetBrowserUrl(); |
if (url != pClass->GetTab()->GetDocumentUrl()) |
@@ -1502,15 +1521,15 @@ |
pt.y = rc.top; |
} |
- pClass->DisplayPluginMenu(hMenu, -1, pt, TPM_LEFTALIGN|TPM_BOTTOMALIGN); |
+ pClass->DisplayPluginMenu(hMenu, -1, pt, TPM_LEFTALIGN | TPM_BOTTOMALIGN); |
} |
break; |
- case WM_DESTROY: |
- break; |
- case SC_CLOSE: |
- break; |
+ case WM_DESTROY: |
+ break; |
+ case SC_CLOSE: |
+ break; |
- case WM_UPDATEUISTATE: |
+ case WM_UPDATEUISTATE: |
{ |
CPluginTab* tab = GetTab(::GetCurrentThreadId()); |
if (tab) |
@@ -1518,7 +1537,7 @@ |
tab->OnActivate(); |
RECT rect; |
GetWindowRect(pClass->m_hPaneWnd, &rect); |
- pClass->notificationMessage.Move(rect.left + (rect.right - rect.left) / 2, rect.top + (rect.bottom - rect.top) / 2); |
+ pClass->notificationMessage.Move(rect.left + (rect.right - rect.left) / 2, rect.top + (rect.bottom - rect.top) / 2); |
} |
if (LOWORD(wParam) == UIS_CLEAR) |
{ |
@@ -1526,17 +1545,17 @@ |
} |
} |
break; |
- case WM_WINDOWPOSCHANGING: |
+ case WM_WINDOWPOSCHANGING: |
{ |
RECT rect; |
GetWindowRect(pClass->m_hPaneWnd, &rect); |
if (pClass->notificationMessage.IsVisible()) |
{ |
- pClass->notificationMessage.Move(rect.left + (rect.right - rect.left) / 2, rect.top + (rect.bottom - rect.top) / 2); |
+ pClass->notificationMessage.Move(rect.left + (rect.right - rect.left) / 2, rect.top + (rect.bottom - rect.top) / 2); |
} |
} |
break; |
- case WM_WINDOWPOSCHANGED: |
+ case WM_WINDOWPOSCHANGED: |
{ |
WINDOWPOS* wndPos = reinterpret_cast<WINDOWPOS*>(lParam); |
if (wndPos->flags & SWP_HIDEWINDOW) |
@@ -1545,7 +1564,7 @@ |
} |
} |
break; |
- case WM_ALREADY_UP_TO_DATE: |
+ case WM_ALREADY_UP_TO_DATE: |
{ |
Dictionary* dictionary = Dictionary::GetInstance(); |
std::wstring upToDateText = dictionary->Lookup("updater", "update-already-up-to-date-text"); |
@@ -1553,7 +1572,7 @@ |
pClass->notificationMessage.SetTextAndIcon(upToDateText, upToDateTitle, TTI_INFO); |
} |
break; |
- case WM_UPDATE_CHECK_ERROR: |
+ case WM_UPDATE_CHECK_ERROR: |
{ |
Dictionary* dictionary = Dictionary::GetInstance(); |
std::wstring errorText = dictionary->Lookup("updater", "update-error-text"); |
@@ -1561,7 +1580,7 @@ |
pClass->notificationMessage.SetTextAndIcon(errorText, errorText, TTI_ERROR); |
} |
break; |
- case WM_DOWNLOADING_UPDATE: |
+ case WM_DOWNLOADING_UPDATE: |
{ |
Dictionary* dictionary = Dictionary::GetInstance(); |
std::wstring downloadingText = dictionary->Lookup("updater", "downloading-update-text"); |
@@ -1569,9 +1588,14 @@ |
pClass->notificationMessage.SetTextAndIcon(downloadingText, downloadingTitle, TTI_INFO); |
} |
break; |
+ } |
+ |
+ return DefWindowProc(hWnd, message, wParam, lParam); |
} |
- |
- return DefWindowProc(hWnd, message, wParam, lParam); |
+ catch (...) |
+ { |
+ return E_FAIL; |
Oleksandr
2016/01/04 10:46:13
Same here. I think we should do 'return DefWindowP
Eric
2016/01/04 16:44:24
Done.
Replace with a comment. Moved call to 'DefW
|
+ } |
} |