From d1097e2198146a16fb26331350fa39f57f7e1b69 Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 26 Feb 2012 18:22:35 +0000 Subject: [PATCH] .CtrlCore: Debug mode for clipboard operations git-svn-id: svn://ultimatepp.org/upp/trunk@4625 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlCore/Win32Clip.cpp | 43 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/uppsrc/CtrlCore/Win32Clip.cpp b/uppsrc/CtrlCore/Win32Clip.cpp index 683f905ee..601aea645 100644 --- a/uppsrc/CtrlCore/Win32Clip.cpp +++ b/uppsrc/CtrlCore/Win32Clip.cpp @@ -47,31 +47,37 @@ int GetClipboardFormatCode(const char *format_id) return format_map[f]; } +bool DebugClipboard() +{ + static bool b = GetIniKey("DebugClipboard") == "1"; + return b; +} + void ClipboardLog(const char *txt) { -#ifdef flagCHECKCLIPBOARD + if(!DebugClipboard()) + return; FileAppend f(GetExeDirFile("clip.log")); - f << txt << "\n"; -#endif + f << GetSysTime() << ": " << txt << "\n"; } void ClipboardError(const char *txt) { -#ifdef flagCHECKCLIPBOARD + if(!DebugClipboard()) + return; String s = txt; s << "\n" << GetLastErrorMessage(); MessageBox(::GetActiveWindow(), s, "Clipboard error", MB_ICONSTOP | MB_OK | MB_APPLMODAL); ClipboardLog(String().Cat() << s << " ERROR"); -#endif } String FromWin32CF(int cf); void ClipboardError(const char *txt, int format) { -#ifdef flagCHECKCLIPBOARD + if(!DebugClipboard()) + return; ClipboardError(String().Cat() << txt << ' ' << FromWin32CF(format)); -#endif } bool ClipboardOpen() @@ -80,10 +86,13 @@ bool ClipboardOpen() // right after we close it thus blocking us to send more formats // So the solution is to wait and retry... (mirek, 2011-01-09) for(int i = 0; i < 200; i++) { - if(OpenClipboard(utilityHWND)) + if(OpenClipboard(utilityHWND)) { + ClipboardLog("----- ClipboardOpen OK"); return true; + } Sleep(10); } + ClipboardError("ClipboardOpen has failed!"); return false; } @@ -91,9 +100,6 @@ void ClearClipboard() { GuiLock __; sClipMap().Clear(); -#ifdef flagCHECKCLIPBOARD - DeleteFile(GetExeDirFile("clip.log")); -#endif ClipboardLog("* ClearClipboard"); if(ClipboardOpen()) { if(!EmptyClipboard()) @@ -101,11 +107,6 @@ void ClearClipboard() if(!CloseClipboard()) ClipboardError("CloseClipboard ERROR"); } -#ifdef flagCHECKCLIPBOARD - else { - ClipboardError("OpenClipboard ERROR"); - } -#endif } void SetClipboardRaw(int format, const byte *data, int length) @@ -117,11 +118,11 @@ void SetClipboardRaw(int format, const byte *data, int length) handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, length + 2); byte *ptr; if(!handle) { - ClipboardLog("GlobalAlloc ERROR"); + ClipboardError("GlobalAlloc ERROR"); return; } if(!(ptr = (byte *)GlobalLock(handle))) { - ClipboardLog("GlobalLock ERROR"); + ClipboardError("GlobalLock ERROR"); GlobalFree(handle); return; } @@ -146,8 +147,6 @@ void AppendClipboard(int format, const byte *data, int length) if(!CloseClipboard()) ClipboardError("CloseClipboard", format); } - else - ClipboardError("OpenClipboard", format); } void AppendClipboard(const char *format, const byte *data, int length) @@ -204,10 +203,11 @@ void Ctrl::DestroyClipboard() String ReadClipboard(const char *format) { GuiLock __; - if(!OpenClipboard(NULL)) + if(!ClipboardOpen()) return Null; HGLOBAL hmem = GetClipboardData(GetClipboardFormatCode(format)); if(hmem == 0) { + ClipboardError("GetClipboardData failed"); CloseClipboard(); return Null; } @@ -215,6 +215,7 @@ String ReadClipboard(const char *format) ASSERT(src); int length = (int)GlobalSize(hmem); if(length < 0) { + ClipboardError("ReadCliboard length < 0"); CloseClipboard(); return Null; }