- Timestamp:
- Jul 29, 2006, 6:43:07 AM (19 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/synergy/lib/platform/CPMClipboardAnyTextConverter.cpp
r2751 r2752 2 2 * synergy -- mouse and keyboard sharing utility 3 3 * Copyright (C) 2002 Chris Schoeneman 4 * Copyright (C) 2006 Knut St. Osmundsen 4 5 * 5 6 * This package is free software; you can redistribute it and/or … … 13 14 */ 14 15 15 #include "C MSWindowsClipboardAnyTextConverter.h"16 #include "CPMClipboardAnyTextConverter.h" 16 17 17 18 // 18 // C MSWindowsClipboardAnyTextConverter19 // CPMClipboardAnyTextConverter 19 20 // 20 21 21 C MSWindowsClipboardAnyTextConverter::CMSWindowsClipboardAnyTextConverter()22 CPMClipboardAnyTextConverter::CPMClipboardAnyTextConverter() 22 23 { 23 24 // do nothing 24 25 } 25 26 26 C MSWindowsClipboardAnyTextConverter::~CMSWindowsClipboardAnyTextConverter()27 CPMClipboardAnyTextConverter::~CPMClipboardAnyTextConverter() 27 28 { 28 29 // do nothing … … 30 31 31 32 IClipboard::EFormat 32 C MSWindowsClipboardAnyTextConverter::getFormat() const33 CPMClipboardAnyTextConverter::getFormat() const 33 34 { 34 35 return IClipboard::kText; 35 36 } 37 ULONG 38 CPMClipboardAnyTextConverter::getPMFormatInfo() const 39 { 40 return CFI_POINTER; 41 } 36 42 37 HANDLE 38 C MSWindowsClipboardAnyTextConverter::fromIClipboard(const CString& data) const43 ULONG 44 CPMClipboardAnyTextConverter::fromIClipboard(const CString& data) const 39 45 { 40 46 // convert linefeeds and then convert to desired encoding 41 CString text = doFromIClipboard(convertLinefeedTo Win32(data));42 UInt32 size= text.size();47 CString text = doFromIClipboard(convertLinefeedToPM(data)); 48 UInt32 cb = text.size(); 43 49 44 50 // copy to memory handle 45 HGLOBAL gData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, size); 46 if (gData != NULL) { 47 // get a pointer to the allocated memory 48 char* dst = (char*)GlobalLock(gData); 49 if (dst != NULL) { 50 memcpy(dst, text.data(), size); 51 GlobalUnlock(gData); 52 } 53 else { 54 GlobalFree(gData); 55 gData = NULL; 56 } 57 } 51 PVOID pv = NULL; 52 APIRET rc = DosAllocSharedMem(&pv, NULL, cb, PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_GETTABLE | OBJ_GIVEABLE); 53 if (rc == NO_ERROR) { 54 return (ULONG)memcpy(pv, text.data(), cb); 55 } 56 return 0; 57 } 58 58 59 return gData; 59 void 60 CPMClipboardAnyTextConverter::freePMData(ULONG ulPMData) const 61 { 62 DosFreeMem((PVOID)ulPMData); 60 63 } 61 64 62 65 CString 63 C MSWindowsClipboardAnyTextConverter::toIClipboard(HANDLEdata) const66 CPMClipboardAnyTextConverter::toIClipboard(ULONG data) const 64 67 { 65 // get datator66 const char* src = (const char*)GlobalLock(data);67 UInt32 srcSize = (UInt32)GlobalSize(data);68 if (src == NULL || srcSize <= 1) {69 return CString();70 }71 72 68 // convert text 73 CString text = doToIClipboard(CString(src, srcSize)); 74 75 // release handle 76 GlobalUnlock(data); 69 const char *psz = (const char *)data; 70 CString text = doToIClipboard(CString(psz)); 77 71 78 72 // convert newlines … … 81 75 82 76 CString 83 CMSWindowsClipboardAnyTextConverter::convertLinefeedToWin32( 84 const CString& src) const 77 CPMClipboardAnyTextConverter::convertLinefeedToPM(const CString& src) const 85 78 { 86 79 // note -- we assume src is a valid UTF-8 string … … 115 108 116 109 CString 117 CMSWindowsClipboardAnyTextConverter::convertLinefeedToUnix( 118 const CString& src) const 110 CPMClipboardAnyTextConverter::convertLinefeedToUnix(const CString& src) const 119 111 { 120 112 // count newlines in string
Note:
See TracChangeset
for help on using the changeset viewer.