diff --git a/dll/win32/comdlg32/colordlg.c b/dll/win32/comdlg32/colordlg.c index 1e8c26bf324..74fdc6cd440 100644 --- a/dll/win32/comdlg32/colordlg.c +++ b/dll/win32/comdlg32/colordlg.c @@ -1096,6 +1096,7 @@ static LRESULT CC_WMLButtonUp( CCPRIV *infoPtr ) { if (infoPtr->capturedGraph) { + ClipCursor(NULL); infoPtr->capturedGraph = 0; ReleaseCapture(); CC_PaintCross(infoPtr); @@ -1173,6 +1174,12 @@ static LRESULT CC_WMLButtonDown( CCPRIV *infoPtr, LPARAM lParam ) } if (i) { + RECT rect; + if(infoPtr->capturedGraph) + { + GetWindowRect(GetDlgItem(infoPtr->hwndSelf, infoPtr->capturedGraph), &rect); + ClipCursor(&rect); + } CC_EditSetRGB(infoPtr); CC_EditSetHSL(infoPtr); CC_PaintCross(infoPtr); @@ -1215,7 +1222,8 @@ static INT_PTR CALLBACK ColorDlgProc( HWND hDlg, UINT message, case WM_INITDIALOG: return CC_WMInitDialog(hDlg, wParam, lParam); case WM_NCDESTROY: - DeleteDC(lpp->hdcMem); + ClipCursor(NULL); //in case closed before WM_LBUTTONUP received + DeleteDC(lpp->hdcMem); DeleteObject(lpp->hbmMem); heap_free(lpp); RemovePropW( hDlg, szColourDialogProp ); @@ -1236,11 +1244,11 @@ static INT_PTR CALLBACK ColorDlgProc( HWND hDlg, UINT message, if (CC_WMMouseMove(lpp, lParam)) return TRUE; break; - case WM_LBUTTONUP: /* FIXME: ClipCursor off (if in color graph)*/ + case WM_LBUTTONUP: if (CC_WMLButtonUp(lpp)) return TRUE; break; - case WM_LBUTTONDOWN:/* FIXME: ClipCursor on (if in color graph)*/ + case WM_LBUTTONDOWN: if (CC_WMLButtonDown(lpp, lParam)) return TRUE; break;