diff options
Diffstat (limited to 'win32')
| -rw-r--r-- | win32/PlatWin.cxx | 4 | ||||
| -rw-r--r-- | win32/ScintillaWin.cxx | 28 | 
2 files changed, 23 insertions, 9 deletions
| diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 654cf3a27..d2f76c916 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -880,8 +880,10 @@ void Platform::DebugPrintf(const char *, ...) {  static bool assertionPopUps = true; -void Platform::ShowAssertionPopUps(bool assertionPopUps_) { +bool Platform::ShowAssertionPopUps(bool assertionPopUps_) { +	bool ret = assertionPopUps;  	assertionPopUps = assertionPopUps_; +	return ret;  }  void Platform::Assert(const char *c, const char *file, int line) { diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 00e127f98..bdbba762c 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -294,15 +294,18 @@ LRESULT ScintillaWin::WndPaint(unsigned long wParam) {  	//LARGE_INTEGER performanceFreq;  	//QueryPerformanceFrequency(&performanceFreq);  	//QueryPerformanceCounter(&perfStart); +	 +	// Redirect assertions to debug output and save current state  +	bool assertsPopup = Platform::ShowAssertionPopUps(false);  	paintState = painting;  	PAINTSTRUCT ps;  	PAINTSTRUCT* pps; -    bool IsOcxCtrl = (wParam != 0); // if wParam != 0, it contains  +	bool IsOcxCtrl = (wParam != 0); // if wParam != 0, it contains   								   // a PAINSTRUCT* from the OCX -	if(IsOcxCtrl) +	if (IsOcxCtrl) {  		pps = reinterpret_cast<PAINTSTRUCT*>(wParam); -	else{ +	} else {  		pps = &ps;  		BeginPaint(wMain.GetID(), pps);  	} @@ -326,6 +329,10 @@ LRESULT ScintillaWin::WndPaint(unsigned long wParam) {  		FullPaint();  	}  	paintState = notPainting; + +	// Restore debug output state  +	Platform::ShowAssertionPopUps(assertsPopup); +	  	//QueryPerformanceCounter(&perfEnd);  	//__int64 start = perfStart.QuadPart;  	//__int64 end = perfEnd.QuadPart; @@ -581,6 +588,10 @@ LRESULT ScintillaWin::WndProc(unsigned int iMessage, unsigned long wParam, long  	case WM_ERASEBKGND:          	return 1;   // Avoid any background erasure as whole window painted.  +    	case WM_CAPTURECHANGED: +		capturedMouse = false; +		return 0; +	          // These are not handled in Scintilla and its faster to dispatch them here.          // Also moves time out to here so profile doesn't count lots of empty message calls.      	case WM_MOVE: @@ -590,7 +601,6 @@ LRESULT ScintillaWin::WndProc(unsigned int iMessage, unsigned long wParam, long  	case WM_NCPAINT:      	case WM_NCMOUSEMOVE:      	case WM_NCLBUTTONDOWN: -    	case WM_CAPTURECHANGED:      	case WM_IME_SETCONTEXT:      	case WM_IME_NOTIFY:      	case WM_SYSCOMMAND: @@ -632,10 +642,12 @@ void ScintillaWin::SetTicking(bool on) {  }  void ScintillaWin::SetMouseCapture(bool on) { -	if (on) { -		::SetCapture(wMain.GetID()); -	} else { -		::ReleaseCapture(); +	if (mouseDownCaptures) { +		if (on) { +			::SetCapture(wMain.GetID()); +		} else { +			::ReleaseCapture(); +		}  	}  	capturedMouse = on;  } | 
