Changeset 2770 for trunk/synergy/lib/platform/CPMClipboard.cpp
- Timestamp:
- Aug 20, 2006, 8:15:41 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/synergy/lib/platform/CPMClipboard.cpp (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/synergy/lib/platform/CPMClipboard.cpp
r2752 r2770 3 3 * Copyright (C) 2002 Chris Schoeneman 4 4 * Copyright (C) 2006 Knut St. Osmundsen 5 * 5 * 6 6 * This package is free software; you can redistribute it and/or 7 7 * modify it under the terms of the GNU General Public License 8 8 * found in the file COPYING that should have accompanied this file. 9 * 9 * 10 10 * This package is distributed in the hope that it will be useful, 11 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of … … 25 25 // 26 26 27 ATOM CPMClipboard::s_ownershipFormat = 0;27 ATOMCPMClipboard::s_ownershipFormat = 0; 28 28 29 29 CPMClipboard::CPMClipboard(HWND window) : 30 m_window(window),31 m_time(0)32 { 33 // add converters, most desired first34 m_converters.push_back(new CPMClipboardTextConverter);35 m_converters.push_back(new CPMClipboardBitmapConverter);36 m_converters.push_back(new CPMClipboardHTMLConverter);30 m_window(window), 31 m_time(0) 32 { 33 // add converters, most desired first 34 m_converters.push_back(new CPMClipboardTextConverter); 35 m_converters.push_back(new CPMClipboardBitmapConverter); 36 m_converters.push_back(new CPMClipboardHTMLConverter); 37 37 } 38 38 39 39 CPMClipboard::~CPMClipboard() 40 40 { 41 clearConverters();41 clearConverters(); 42 42 } 43 43 … … 45 45 CPMClipboard::emptyUnowned() 46 46 { 47 LOG((CLOG_DEBUG "empty clipboard"));48 49 // empty the clipboard (and take ownership)50 if (!WinEmptyClipbrd(CPMUtil::getHAB())) {51 LOG((CLOG_DEBUG "failed to grab clipboard"));52 return false;53 }54 55 return true;47 LOG((CLOG_DEBUG "empty clipboard")); 48 49 // empty the clipboard (and take ownership) 50 if (!WinEmptyClipbrd(CPMUtil::getHAB())) { 51 LOG((CLOG_DEBUG "failed to grab clipboard")); 52 return false; 53 } 54 55 return true; 56 56 } 57 57 … … 59 59 CPMClipboard::empty() 60 60 { 61 if (!emptyUnowned()) {62 return false;63 }64 65 // mark clipboard as being owned by synergy61 if (!emptyUnowned()) { 62 return false; 63 } 64 65 // mark clipboard as being owned by synergy 66 66 PVOID pv = NULL; 67 67 APIRET rc = DosAllocSharedMem(&pv, NULL, 1, PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_GETTABLE | OBJ_GIVEABLE); … … 70 70 return false; 71 71 } 72 return !!WinSetClipbrdData(CPMUtil::getHAB(), (ULONG)pv, getOwnershipFormat(), CFI_POINTER);72 return !!WinSetClipbrdData(CPMUtil::getHAB(), (ULONG)pv, getOwnershipFormat(), CFI_POINTER); 73 73 } 74 74 … … 76 76 CPMClipboard::add(EFormat format, const CString& data) 77 77 { 78 LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));79 80 // convert data to win32 form81 for (ConverterList::const_iterator index = m_converters.begin();82 index != m_converters.end();83 ++index) {84 IPMClipboardConverter* converter = *index;85 86 // skip converters for other formats87 if (converter->getFormat() == format) {88 ULONG ulPMData = converter->fromIClipboard(data);89 if (ulPMData != NULL) {90 ULONG ulPMFormat = converter->getPMFormat();78 LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format)); 79 80 // convert data to win32 form 81 for (ConverterList::const_iterator index = m_converters.begin(); 82 index != m_converters.end(); 83 ++index) { 84 IPMClipboardConverter* converter = *index; 85 86 // skip converters for other formats 87 if (converter->getFormat() == format) { 88 ULONG ulPMData = converter->fromIClipboard(data); 89 if (ulPMData != NULL) { 90 ULONG ulPMFormat = converter->getPMFormat(); 91 91 ULONG ulPMFormatInfo = converter->getPMFormatInfo(); 92 if (!WinSetClipbrdData(CPMUtil::getHAB(), ulPMData, ulPMFormat, ulPMFormatInfo)) {93 // free converted data if we couldn't put it on the clipboard92 if (!WinSetClipbrdData(CPMUtil::getHAB(), ulPMData, ulPMFormat, ulPMFormatInfo)) { 93 // free converted data if we couldn't put it on the clipboard 94 94 converter->freePMData(ulPMData); 95 }96 }97 }98 }95 } 96 } 97 } 98 } 99 99 } 100 100 … … 102 102 CPMClipboard::open(Time time) const 103 103 { 104 LOG((CLOG_DEBUG "open clipboard"));105 106 if (!WinOpenClipbrd(m_window)) {107 LOG((CLOG_WARN "failed to open clipboard"));108 return false;109 }110 111 m_time = time;112 113 return true;104 LOG((CLOG_DEBUG "open clipboard")); 105 106 if (!WinOpenClipbrd(m_window)) { 107 LOG((CLOG_WARN "failed to open clipboard")); 108 return false; 109 } 110 111 m_time = time; 112 113 return true; 114 114 } 115 115 … … 117 117 CPMClipboard::close() const 118 118 { 119 LOG((CLOG_DEBUG "close clipboard"));120 WinCloseClipbrd(CPMUtil::getHAB());119 LOG((CLOG_DEBUG "close clipboard")); 120 WinCloseClipbrd(CPMUtil::getHAB()); 121 121 } 122 122 … … 124 124 CPMClipboard::getTime() const 125 125 { 126 return m_time;126 return m_time; 127 127 } 128 128 … … 130 130 CPMClipboard::has(EFormat format) const 131 131 { 132 for (ConverterList::const_iterator index = m_converters.begin();133 index != m_converters.end();134 ++index) {135 IPMClipboardConverter* converter = *index;136 if (converter->getFormat() == format) {132 for (ConverterList::const_iterator index = m_converters.begin(); 133 index != m_converters.end(); 134 ++index) { 135 IPMClipboardConverter* converter = *index; 136 if (converter->getFormat() == format) { 137 137 ULONG fFmtInfo; 138 if (WinQueryClipbrdFmtInfo(CPMUtil::getHAB(), getOwnershipFormat(), &fFmtInfo)) {139 return true;140 }141 }142 }143 return false;138 if (WinQueryClipbrdFmtInfo(CPMUtil::getHAB(), getOwnershipFormat(), &fFmtInfo)) { 139 return true; 140 } 141 } 142 } 143 return false; 144 144 } 145 145 … … 147 147 CPMClipboard::get(EFormat format) const 148 148 { 149 // find the converter for the first clipboard format we can handle150 IPMClipboardConverter* converter = NULL;151 ULONG pmFormat = WinEnumClipbrdFmts(CPMUtil::getHAB(), 0);152 while (converter == NULL && pmFormat != 0) {153 for (ConverterList::const_iterator index = m_converters.begin();154 index != m_converters.end(); 149 // find the converter for the first clipboard format we can handle 150 IPMClipboardConverter* converter = NULL; 151 ULONG pmFormat = WinEnumClipbrdFmts(CPMUtil::getHAB(), 0); 152 while (converter == NULL && pmFormat != 0) { 153 for (ConverterList::const_iterator index = m_converters.begin(); 154 index != m_converters.end(); 155 155 ++index) { 156 converter = *index;157 if (converter->getPMFormat() == pmFormat &&158 converter->getFormat() == format) {159 break;160 }161 converter = NULL;162 }163 pmFormat = WinEnumClipbrdFmts(CPMUtil::getHAB(), pmFormat);164 }165 166 // if no converter then we don't recognize any formats167 if (converter == NULL) {168 return CString();169 }170 171 // get a handle to the clipboard data172 ULONG ulData = WinQueryClipbrdData(CPMUtil::getHAB(), converter->getPMFormat());173 if (ulData == 0) {174 return CString();175 }176 177 // convert178 return converter->toIClipboard(ulData);156 converter = *index; 157 if (converter->getPMFormat() == pmFormat && 158 converter->getFormat() == format) { 159 break; 160 } 161 converter = NULL; 162 } 163 pmFormat = WinEnumClipbrdFmts(CPMUtil::getHAB(), pmFormat); 164 } 165 166 // if no converter then we don't recognize any formats 167 if (converter == NULL) { 168 return CString(); 169 } 170 171 // get a handle to the clipboard data 172 ULONG ulData = WinQueryClipbrdData(CPMUtil::getHAB(), converter->getPMFormat()); 173 if (ulData == 0) { 174 return CString(); 175 } 176 177 // convert 178 return converter->toIClipboard(ulData); 179 179 } 180 180 … … 182 182 CPMClipboard::clearConverters() 183 183 { 184 for (ConverterList::iterator index = m_converters.begin();185 index != m_converters.end();186 ++index) {187 delete *index;188 }189 m_converters.clear();184 for (ConverterList::iterator index = m_converters.begin(); 185 index != m_converters.end(); 186 ++index) { 187 delete *index; 188 } 189 m_converters.clear(); 190 190 } 191 191 … … 194 194 { 195 195 ULONG fFmtInfo; 196 return (!!WinQueryClipbrdFmtInfo(CPMUtil::getHAB(), getOwnershipFormat(), &fFmtInfo));196 return (!!WinQueryClipbrdFmtInfo(CPMUtil::getHAB(), getOwnershipFormat(), &fFmtInfo)); 197 197 } 198 198 … … 200 200 CPMClipboard::getOwnershipFormat() 201 201 { 202 // create ownership format if we haven't yet203 if (s_ownershipFormat == 0) {202 // create ownership format if we haven't yet 203 if (s_ownershipFormat == 0) { 204 204 ATOM hAtom = WinAddAtom(WinQuerySystemAtomTable(), (PCSZ)"SynergyOwnership"); 205 205 if (hAtom == 0) … … 207 207 assert(hAtom != 0); 208 208 s_ownershipFormat = hAtom; 209 }210 211 // return the format212 return s_ownershipFormat;213 } 209 } 210 211 // return the format 212 return s_ownershipFormat; 213 }
Note:
See TracChangeset
for help on using the changeset viewer.
