BOOL LaunchCPanel(HWND hwnd, LPCTSTR applet)
{
TCHAR szParams[MAX_PATH];
- _tcscpy(szParams, TEXT("shell32.dll,Control_RunDLL "));
- _tcscat(szParams, applet);
+
+ StringCbCopy(szParams, sizeof(szParams),
+ TEXT("shell32.dll,Control_RunDLL "));
+ if (FAILED(StringCbCat(szParams, sizeof(szParams),
+ applet)))
+ return FALSE;
+
return (ShellExecute(hwnd, TEXT("open"), TEXT("rundll32.exe"), szParams, NULL, SW_SHOWDEFAULT) > (HINSTANCE)32);
}
}
case WM_NCLBUTTONDBLCLK:
+ {
/* We "handle" this message so users can't cause a weird maximize/restore
window animation when double-clicking the tray window! */
+
+ /* We should forward mouse messages to child windows here.
+ Right now, this is only clock double-click */
+ RECT rcClock;
+ if (TrayNotify_GetClockRect(This->hwndTrayNotify, &rcClock))
+ {
+ POINT ptClick;
+ ptClick.x = MAKEPOINTS(lParam).x;
+ ptClick.y = MAKEPOINTS(lParam).y;
+ if (PtInRect(&rcClock, ptClick))
+ LaunchCPanel(NULL, TEXT("timedate.cpl"));
+ }
break;
+ }
case WM_NCCREATE:
{
break;
case TWM_OPENSTARTMENU:
- SendMessage(This->hWnd, WM_COMMAND, MAKEWPARAM(BN_CLICKED, IDC_STARTBTN), (LPARAM)This->hwndStart);
- break;
+ {
+ HWND hwndStartMenu;
+ HRESULT hr = IUnknown_GetWindow((IUnknown*)This->StartMenuPopup, &hwndStartMenu);
+ if (FAILED(hr))
+ break;
+ if (IsWindowVisible(hwndStartMenu))
+ SetWindowPos(hwndStartMenu, 0,0,0,0,0, SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
+ else
+ SendMessage(This->hWnd, WM_COMMAND, MAKEWPARAM(BN_CLICKED, IDC_STARTBTN), (LPARAM)This->hwndStart);
+
+ break;
+ }
case WM_COMMAND:
if ((HWND)lParam == This->hwndStart)
{
{
/* FIXME: Handle these commands as well */
case IDM_TASKBARANDSTARTMENU:
+
+ ITrayWindowImpl_DisplayProperties(ITrayWindow_from_impl(This));
+ break;
+
case IDM_SEARCH:
case IDM_HELPANDSUPPORT:
break;