ReactOS 0.4.16-dev-1489-g8fbbb41
clipboard.c File Reference
#include "editor.h"
Include dependency graph for clipboard.c:

Go to the source code of this file.

Classes

struct  DataObjectImpl
 
struct  EnumFormatImpl
 
struct  tagME_GlobalDestStruct
 

Typedefs

typedef struct DataObjectImpl DataObjectImpl
 
typedef struct EnumFormatImpl EnumFormatImpl
 
typedef struct tagME_GlobalDestStruct ME_GlobalDestStruct
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (richedit)
 
static HRESULT EnumFormatImpl_Create (const FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc)
 
static DataObjectImplimpl_from_IDataObject (IDataObject *iface)
 
static EnumFormatImplimpl_from_IEnumFORMATETC (IEnumFORMATETC *iface)
 
static HRESULT WINAPI EnumFormatImpl_QueryInterface (IEnumFORMATETC *iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI EnumFormatImpl_AddRef (IEnumFORMATETC *iface)
 
static ULONG WINAPI EnumFormatImpl_Release (IEnumFORMATETC *iface)
 
static HRESULT WINAPI EnumFormatImpl_Next (IEnumFORMATETC *iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched)
 
static HRESULT WINAPI EnumFormatImpl_Skip (IEnumFORMATETC *iface, ULONG celt)
 
static HRESULT WINAPI EnumFormatImpl_Reset (IEnumFORMATETC *iface)
 
static HRESULT WINAPI EnumFormatImpl_Clone (IEnumFORMATETC *iface, IEnumFORMATETC **ppenum)
 
static HRESULT EnumFormatImpl_Create (const FORMATETC *fmtetc, UINT fmtetc_cnt, IEnumFORMATETC **formatetc)
 
static HRESULT WINAPI DataObjectImpl_QueryInterface (IDataObject *iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI DataObjectImpl_AddRef (IDataObject *iface)
 
static ULONG WINAPI DataObjectImpl_Release (IDataObject *iface)
 
static HRESULT WINAPI DataObjectImpl_GetData (IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
 
static HRESULT WINAPI DataObjectImpl_GetDataHere (IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
 
static HRESULT WINAPI DataObjectImpl_QueryGetData (IDataObject *iface, FORMATETC *pformatetc)
 
static HRESULT WINAPI DataObjectImpl_GetCanonicalFormatEtc (IDataObject *iface, FORMATETC *pformatetcIn, FORMATETC *pformatetcOut)
 
static HRESULT WINAPI DataObjectImpl_SetData (IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
 
static HRESULT WINAPI DataObjectImpl_EnumFormatEtc (IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
 
static HRESULT WINAPI DataObjectImpl_DAdvise (IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
 
static HRESULT WINAPI DataObjectImpl_DUnadvise (IDataObject *iface, DWORD dwConnection)
 
static HRESULT WINAPI DataObjectImpl_EnumDAdvise (IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
 
static HGLOBAL get_unicode_text (ME_TextEditor *editor, const ME_Cursor *start, int nChars)
 
static DWORD CALLBACK ME_AppendToHGLOBAL (DWORD_PTR dwCookie, LPBYTE lpBuff, LONG cb, LONG *pcb)
 
static HGLOBAL get_rtf_text (ME_TextEditor *editor, const ME_Cursor *start, int nChars)
 
HRESULT ME_GetDataObject (ME_TextEditor *editor, const ME_Cursor *start, int nChars, IDataObject **dataobj)
 

Variables

static UINT cfRTF = 0
 
static const IEnumFORMATETCVtbl VT_EnumFormatImpl
 
static const IDataObjectVtbl VT_DataObjectImpl
 

Typedef Documentation

◆ DataObjectImpl

◆ EnumFormatImpl

◆ ME_GlobalDestStruct

Function Documentation

◆ DataObjectImpl_AddRef()

static ULONG WINAPI DataObjectImpl_AddRef ( IDataObject iface)
static

Definition at line 191 of file clipboard.c.

192{
195 TRACE("(%p) ref=%ld\n", This, ref);
196 return ref;
197}
#define InterlockedIncrement
Definition: armddk.h:53
static snapshot * impl_from_IDataObject(IDataObject *iface)
Definition: clipboard.c:159
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ DataObjectImpl_DAdvise()

static HRESULT WINAPI DataObjectImpl_DAdvise ( IDataObject iface,
FORMATETC *  pformatetc,
DWORD  advf,
IAdviseSink pAdvSink,
DWORD pdwConnection 
)
static

Definition at line 302 of file clipboard.c.

304{
306 FIXME("(%p): stub\n", This);
307 return E_NOTIMPL;
308}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DataObjectImpl_DUnadvise()

static HRESULT WINAPI DataObjectImpl_DUnadvise ( IDataObject iface,
DWORD  dwConnection 
)
static

Definition at line 310 of file clipboard.c.

311{
313 FIXME("(%p): stub\n", This);
314 return E_NOTIMPL;
315}

◆ DataObjectImpl_EnumDAdvise()

static HRESULT WINAPI DataObjectImpl_EnumDAdvise ( IDataObject iface,
IEnumSTATDATA **  ppenumAdvise 
)
static

Definition at line 317 of file clipboard.c.

318{
320 FIXME("(%p): stub\n", This);
321 return E_NOTIMPL;
322}

◆ DataObjectImpl_EnumFormatEtc()

static HRESULT WINAPI DataObjectImpl_EnumFormatEtc ( IDataObject iface,
DWORD  dwDirection,
IEnumFORMATETC **  ppenumFormatEtc 
)
static

Definition at line 287 of file clipboard.c.

289{
291 TRACE("(%p)->(%ld)\n", This, dwDirection);
292
293 if(dwDirection != DATADIR_GET) {
294 FIXME("Unsupported direction: %ld\n", dwDirection);
295 /* WinXP riched20 also returns E_NOTIMPL in this case */
296 *ppenumFormatEtc = NULL;
297 return E_NOTIMPL;
298 }
299 return EnumFormatImpl_Create(This->fmtetc, This->fmtetc_cnt, ppenumFormatEtc);
300}
#define NULL
Definition: types.h:112
static HRESULT EnumFormatImpl_Create(const FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc)

◆ DataObjectImpl_GetCanonicalFormatEtc()

static HRESULT WINAPI DataObjectImpl_GetCanonicalFormatEtc ( IDataObject iface,
FORMATETC *  pformatetcIn,
FORMATETC *  pformatetcOut 
)
static

Definition at line 266 of file clipboard.c.

268{
270 TRACE("(%p)->(%p,%p)\n", This, pformatetcIn, pformatetcOut);
271
272 if(pformatetcOut) {
273 *pformatetcOut = *pformatetcIn;
274 pformatetcOut->ptd = NULL;
275 }
277}
#define DATA_S_SAMEFORMATETC
Definition: winerror.h:2674

◆ DataObjectImpl_GetData()

static HRESULT WINAPI DataObjectImpl_GetData ( IDataObject iface,
FORMATETC *  pformatetc,
STGMEDIUM *  pmedium 
)
static

Definition at line 215 of file clipboard.c.

216{
218 TRACE("(%p)->(fmt=0x%08x tym=0x%08lx)\n", This, pformatetc->cfFormat, pformatetc->tymed);
219
220 if(pformatetc->lindex != -1)
221 return DV_E_LINDEX;
222
223 if(!(pformatetc->tymed & TYMED_HGLOBAL))
224 return DV_E_TYMED;
225
226 if(This->unicode && pformatetc->cfFormat == CF_UNICODETEXT)
227 pmedium->hGlobal = This->unicode;
228 else if(This->rtf && pformatetc->cfFormat == cfRTF)
229 pmedium->hGlobal = This->rtf;
230 else
231 return DV_E_FORMATETC;
232
233 pmedium->tymed = TYMED_HGLOBAL;
234 pmedium->pUnkForRelease = (LPUNKNOWN)iface;
235 IUnknown_AddRef(pmedium->pUnkForRelease);
236 return S_OK;
237}
#define CF_UNICODETEXT
Definition: constants.h:408
static UINT cfRTF
Definition: clipboard.c:25
#define S_OK
Definition: intsafe.h:52
static LPUNKNOWN
Definition: ndr_ole.c:49
#define DV_E_TYMED
Definition: winerror.h:2638
#define DV_E_FORMATETC
Definition: winerror.h:2633
#define DV_E_LINDEX
Definition: winerror.h:2637

◆ DataObjectImpl_GetDataHere()

static HRESULT WINAPI DataObjectImpl_GetDataHere ( IDataObject iface,
FORMATETC *  pformatetc,
STGMEDIUM *  pmedium 
)
static

Definition at line 239 of file clipboard.c.

240{
242 FIXME("(%p): stub\n", This);
243 return E_NOTIMPL;
244}

◆ DataObjectImpl_QueryGetData()

static HRESULT WINAPI DataObjectImpl_QueryGetData ( IDataObject iface,
FORMATETC *  pformatetc 
)
static

Definition at line 246 of file clipboard.c.

247{
249 UINT i;
250 BOOL foundFormat = FALSE;
251 TRACE("(%p)->(fmt=0x%08x tym=0x%08lx)\n", This, pformatetc->cfFormat, pformatetc->tymed);
252
253 if(pformatetc->lindex != -1)
254 return DV_E_LINDEX;
255
256 for(i=0; i<This->fmtetc_cnt; i++) {
257 if(This->fmtetc[i].cfFormat == pformatetc->cfFormat) {
258 foundFormat = TRUE;
259 if(This->fmtetc[i].tymed == pformatetc->tymed)
260 return S_OK;
261 }
262 }
263 return foundFormat?DV_E_FORMATETC:DV_E_TYMED;
264}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50

◆ DataObjectImpl_QueryInterface()

static HRESULT WINAPI DataObjectImpl_QueryInterface ( IDataObject iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 177 of file clipboard.c.

178{
180 TRACE("(%p)->(%s)\n", This, debugstr_guid(riid));
181
183 IDataObject_AddRef(iface);
184 *ppvObj = &This->IDataObject_iface;
185 return S_OK;
186 }
187 *ppvObj = NULL;
188 return E_NOINTERFACE;
189}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IDataObject
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ DataObjectImpl_Release()

static ULONG WINAPI DataObjectImpl_Release ( IDataObject iface)
static

Definition at line 199 of file clipboard.c.

200{
203 TRACE("(%p) ref=%ld\n",This, ref);
204
205 if(!ref) {
206 if(This->unicode) GlobalFree(This->unicode);
207 if(This->rtf) GlobalFree(This->rtf);
208 if(This->fmtetc) GlobalFree(This->fmtetc);
209 free(This);
210 }
211
212 return ref;
213}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611

◆ DataObjectImpl_SetData()

static HRESULT WINAPI DataObjectImpl_SetData ( IDataObject iface,
FORMATETC *  pformatetc,
STGMEDIUM *  pmedium,
BOOL  fRelease 
)
static

Definition at line 279 of file clipboard.c.

281{
283 FIXME("(%p): stub\n", This);
284 return E_NOTIMPL;
285}

◆ EnumFormatImpl_AddRef()

static ULONG WINAPI EnumFormatImpl_AddRef ( IEnumFORMATETC iface)
static

Definition at line 74 of file clipboard.c.

75{
78 TRACE("(%p) ref=%ld\n", This, ref);
79 return ref;
80}
static enum_fmtetc * impl_from_IEnumFORMATETC(IEnumFORMATETC *iface)
Definition: clipboard.c:238
long LONG
Definition: pedump.c:60

◆ EnumFormatImpl_Clone()

static HRESULT WINAPI EnumFormatImpl_Clone ( IEnumFORMATETC iface,
IEnumFORMATETC **  ppenum 
)
static

Definition at line 136 of file clipboard.c.

137{
139 HRESULT hr;
140 TRACE("(%p)->(%p)\n", This, ppenum);
141
142 if(!ppenum)
143 return E_INVALIDARG;
144 hr = EnumFormatImpl_Create(This->fmtetc, This->fmtetc_cnt, ppenum);
145 if(SUCCEEDED(hr))
146 hr = IEnumFORMATETC_Skip(*ppenum, This->cur);
147 return hr;
148}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT hr
Definition: shlfolder.c:183

◆ EnumFormatImpl_Create() [1/2]

static HRESULT EnumFormatImpl_Create ( const FORMATETC *  fmtetc,
UINT  fmtetc_cnt,
IEnumFORMATETC **  formatetc 
)
static

Definition at line 160 of file clipboard.c.

162{
164 TRACE("\n");
165
166 ret = malloc(sizeof(EnumFormatImpl));
167 ret->IEnumFORMATETC_iface.lpVtbl = &VT_EnumFormatImpl;
168 ret->ref = 1;
169 ret->cur = 0;
170 ret->fmtetc_cnt = fmtetc_cnt;
171 ret->fmtetc = GlobalAlloc(GMEM_ZEROINIT, fmtetc_cnt*sizeof(FORMATETC));
172 memcpy(ret->fmtetc, fmtetc, fmtetc_cnt*sizeof(FORMATETC));
173 *formatetc = &ret->IEnumFORMATETC_iface;
174 return S_OK;
175}
#define malloc
Definition: debug_ros.c:4
static const IEnumFORMATETCVtbl VT_EnumFormatImpl
Definition: clipboard.c:150
return ret
Definition: mutex.c:146
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define GMEM_ZEROINIT
Definition: winbase.h:339

◆ EnumFormatImpl_Create() [2/2]

static HRESULT EnumFormatImpl_Create ( const FORMATETC *  fmtetc,
UINT  size,
LPENUMFORMATETC lplpformatetc 
)
static

◆ EnumFormatImpl_Next()

static HRESULT WINAPI EnumFormatImpl_Next ( IEnumFORMATETC iface,
ULONG  celt,
FORMATETC *  rgelt,
ULONG pceltFetched 
)
static

Definition at line 96 of file clipboard.c.

98{
100 ULONG count = 0;
101 TRACE("(%p)->(%ld %p %p)\n", This, celt, rgelt, pceltFetched);
102
103 if(!rgelt)
104 return E_INVALIDARG;
105
106 count = min(celt, This->fmtetc_cnt-This->cur);
107 if(count > 0) {
108 memcpy(rgelt, This->fmtetc+This->cur, count*sizeof(FORMATETC));
109 This->cur += count;
110 }
111 if(pceltFetched)
112 *pceltFetched = count;
113 return count == celt ? S_OK : S_FALSE;
114}
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define min(a, b)
Definition: monoChain.cc:55
#define S_FALSE
Definition: winerror.h:2357

◆ EnumFormatImpl_QueryInterface()

static HRESULT WINAPI EnumFormatImpl_QueryInterface ( IEnumFORMATETC iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 60 of file clipboard.c.

61{
63 TRACE("%p %s\n", This, debugstr_guid(riid));
64
66 IEnumFORMATETC_AddRef(iface);
67 *ppvObj = &This->IEnumFORMATETC_iface;
68 return S_OK;
69 }
70 *ppvObj = NULL;
71 return E_NOINTERFACE;
72}
const GUID IID_IEnumFORMATETC

◆ EnumFormatImpl_Release()

static ULONG WINAPI EnumFormatImpl_Release ( IEnumFORMATETC iface)
static

Definition at line 82 of file clipboard.c.

83{
86 TRACE("(%p) ref=%ld\n", This, ref);
87
88 if(!ref) {
89 GlobalFree(This->fmtetc);
90 free(This);
91 }
92
93 return ref;
94}

◆ EnumFormatImpl_Reset()

static HRESULT WINAPI EnumFormatImpl_Reset ( IEnumFORMATETC iface)
static

Definition at line 127 of file clipboard.c.

128{
130 TRACE("(%p)\n", This);
131
132 This->cur = 0;
133 return S_OK;
134}

◆ EnumFormatImpl_Skip()

static HRESULT WINAPI EnumFormatImpl_Skip ( IEnumFORMATETC iface,
ULONG  celt 
)
static

Definition at line 116 of file clipboard.c.

117{
119 ULONG count = 0;
120 TRACE("(%p)->(%ld)\n", This, celt);
121
122 count = min(celt, This->fmtetc_cnt-This->cur);
123 This->cur += count;
124 return count == celt ? S_OK : S_FALSE;
125}

◆ get_rtf_text()

static HGLOBAL get_rtf_text ( ME_TextEditor editor,
const ME_Cursor start,
int  nChars 
)
static

Definition at line 388 of file clipboard.c.

389{
392
394 gds.nLength = 0;
395 es.dwCookie = (DWORD_PTR)&gds;
396 es.pfnCallback = ME_AppendToHGLOBAL;
397 ME_StreamOutRange(editor, SF_RTF, start, nChars, &es);
399 return gds.hData;
400}
static DWORD CALLBACK ME_AppendToHGLOBAL(DWORD_PTR dwCookie, LPBYTE lpBuff, LONG cb, LONG *pcb)
Definition: clipboard.c:366
LRESULT ME_StreamOutRange(ME_TextEditor *editor, DWORD dwFormat, const ME_Cursor *start, int nChars, EDITSTREAM *stream)
Definition: writer.c:1177
GLuint start
Definition: gl.h:1545
HGLOBAL NTAPI GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes, UINT uFlags)
Definition: heapmem.c:825
#define es
Definition: i386-dis.c:440
#define SF_RTF
Definition: richedit.h:721
#define DWORD_PTR
Definition: treelist.c:76
#define GMEM_MOVEABLE
Definition: winbase.h:327

Referenced by ME_GetDataObject().

◆ get_unicode_text()

static HGLOBAL get_unicode_text ( ME_TextEditor editor,
const ME_Cursor start,
int  nChars 
)
static

Definition at line 340 of file clipboard.c.

341{
342 int pars = 0;
343 WCHAR *data;
344 HANDLE ret;
345 ME_Paragraph *para;
346 int nEnd = ME_GetCursorOfs(start) + nChars;
347
348 /* count paragraphs in range */
349 para = start->para;
350 while ((para = para_next( para )) && para->nCharOfs <= nEnd)
351 pars++;
352
353 ret = GlobalAlloc(GMEM_MOVEABLE, sizeof(WCHAR) * (nChars + pars + 1));
355 ME_GetTextW(editor, data, nChars + pars, start, nChars, TRUE, FALSE);
357 return ret;
358}
int ME_GetCursorOfs(const ME_Cursor *cursor)
Definition: caret.c:923
int ME_GetTextW(ME_TextEditor *editor, WCHAR *buffer, int buflen, const ME_Cursor *start, int srcChars, BOOL bCRLF, BOOL bEOP)
Definition: editor.c:4325
ME_Paragraph * para_next(ME_Paragraph *para)
Definition: para.c:57
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by ME_GetDataObject().

◆ impl_from_IDataObject()

static DataObjectImpl * impl_from_IDataObject ( IDataObject iface)
inlinestatic

Definition at line 50 of file clipboard.c.

51{
52 return CONTAINING_RECORD(iface, DataObjectImpl, IDataObject_iface);
53}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

◆ impl_from_IEnumFORMATETC()

static EnumFormatImpl * impl_from_IEnumFORMATETC ( IEnumFORMATETC iface)
inlinestatic

Definition at line 55 of file clipboard.c.

56{
57 return CONTAINING_RECORD(iface, EnumFormatImpl, IEnumFORMATETC_iface);
58}

◆ ME_AppendToHGLOBAL()

static DWORD CALLBACK ME_AppendToHGLOBAL ( DWORD_PTR  dwCookie,
LPBYTE  lpBuff,
LONG  cb,
LONG pcb 
)
static

Definition at line 366 of file clipboard.c.

367{
369 int nMaxSize;
370 BYTE *pDest;
371
372 nMaxSize = GlobalSize(pData->hData);
373 if (pData->nLength+cb+1 >= cb) {
374 /* round up to 2^17 */
375 int nNewSize = (((nMaxSize+cb+1)|0x1FFFF)+1) & 0xFFFE0000;
376 pData->hData = GlobalReAlloc(pData->hData, nNewSize, GMEM_MOVEABLE);
377 }
378 pDest = GlobalLock(pData->hData);
379 memcpy(pDest + pData->nLength, lpBuff, cb);
380 pData->nLength += cb;
381 pDest[pData->nLength] = '\0';
382 GlobalUnlock(pData->hData);
383 *pcb = cb;
384
385 return 0;
386}
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
unsigned char BYTE
Definition: xxhash.c:193

Referenced by get_rtf_text().

◆ ME_GetDataObject()

HRESULT ME_GetDataObject ( ME_TextEditor editor,
const ME_Cursor start,
int  nChars,
IDataObject **  dataobj 
)

Definition at line 402 of file clipboard.c.

404{
406 TRACE("(%p,%d,%d)\n", editor, ME_GetCursorOfs(start), nChars);
407
408 obj = malloc(sizeof(DataObjectImpl));
409 if(cfRTF == 0)
410 cfRTF = RegisterClipboardFormatA("Rich Text Format");
411
413 obj->ref = 1;
414 obj->unicode = get_unicode_text(editor, start, nChars);
415 obj->rtf = NULL;
416
417 obj->fmtetc_cnt = 1;
418 if(editor->mode & TM_RICHTEXT)
419 obj->fmtetc_cnt++;
420 obj->fmtetc = GlobalAlloc(GMEM_ZEROINIT, obj->fmtetc_cnt*sizeof(FORMATETC));
421 InitFormatEtc(obj->fmtetc[0], CF_UNICODETEXT, TYMED_HGLOBAL);
422 if(editor->mode & TM_RICHTEXT) {
423 obj->rtf = get_rtf_text(editor, start, nChars);
424 InitFormatEtc(obj->fmtetc[1], cfRTF, TYMED_HGLOBAL);
425 }
426
427 *dataobj = &obj->IDataObject_iface;
428 return S_OK;
429}
static HGLOBAL get_unicode_text(ME_TextEditor *editor, const ME_Cursor *start, int nChars)
Definition: clipboard.c:340
static HGLOBAL get_rtf_text(ME_TextEditor *editor, const ME_Cursor *start, int nChars)
Definition: clipboard.c:388
static const IDataObjectVtbl VT_DataObjectImpl
Definition: clipboard.c:324
#define InitFormatEtc(fe, cf, med)
Definition: editor.h:32
#define TM_RICHTEXT
Definition: richedit.h:1029
IDataObject IDataObject_iface
Definition: usrmarshal.c:1273
UINT WINAPI RegisterClipboardFormatA(_In_ LPCSTR)

Referenced by editor_copy(), and IRichEditOle_fnGetClipboardData().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( richedit  )

Variable Documentation

◆ cfRTF

UINT cfRTF = 0
static

Definition at line 25 of file clipboard.c.

Referenced by DataObjectImpl_GetData(), and ME_GetDataObject().

◆ VT_DataObjectImpl

const IDataObjectVtbl VT_DataObjectImpl
static
Initial value:
=
{
}
static HRESULT WINAPI DataObjectImpl_GetDataHere(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
Definition: clipboard.c:239
static ULONG WINAPI DataObjectImpl_AddRef(IDataObject *iface)
Definition: clipboard.c:191
static HRESULT WINAPI DataObjectImpl_QueryGetData(IDataObject *iface, FORMATETC *pformatetc)
Definition: clipboard.c:246
static HRESULT WINAPI DataObjectImpl_DAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
Definition: clipboard.c:302
static HRESULT WINAPI DataObjectImpl_QueryInterface(IDataObject *iface, REFIID riid, LPVOID *ppvObj)
Definition: clipboard.c:177
static HRESULT WINAPI DataObjectImpl_DUnadvise(IDataObject *iface, DWORD dwConnection)
Definition: clipboard.c:310
static HRESULT WINAPI DataObjectImpl_EnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
Definition: clipboard.c:287
static ULONG WINAPI DataObjectImpl_Release(IDataObject *iface)
Definition: clipboard.c:199
static HRESULT WINAPI DataObjectImpl_GetData(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
Definition: clipboard.c:215
static HRESULT WINAPI DataObjectImpl_GetCanonicalFormatEtc(IDataObject *iface, FORMATETC *pformatetcIn, FORMATETC *pformatetcOut)
Definition: clipboard.c:266
static HRESULT WINAPI DataObjectImpl_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
Definition: clipboard.c:317
static HRESULT WINAPI DataObjectImpl_SetData(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
Definition: clipboard.c:279

Definition at line 324 of file clipboard.c.

Referenced by DataObjectImpl_CreateComplex(), DataObjectImpl_CreateFromHGlobal(), and ME_GetDataObject().

◆ VT_EnumFormatImpl

const IEnumFORMATETCVtbl VT_EnumFormatImpl
static
Initial value:
= {
}
static ULONG WINAPI EnumFormatImpl_AddRef(IEnumFORMATETC *iface)
Definition: clipboard.c:74
static HRESULT WINAPI EnumFormatImpl_Skip(IEnumFORMATETC *iface, ULONG celt)
Definition: clipboard.c:116
static ULONG WINAPI EnumFormatImpl_Release(IEnumFORMATETC *iface)
Definition: clipboard.c:82
static HRESULT WINAPI EnumFormatImpl_Next(IEnumFORMATETC *iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched)
Definition: clipboard.c:96
static HRESULT WINAPI EnumFormatImpl_Clone(IEnumFORMATETC *iface, IEnumFORMATETC **ppenum)
Definition: clipboard.c:136
static HRESULT WINAPI EnumFormatImpl_QueryInterface(IEnumFORMATETC *iface, REFIID riid, LPVOID *ppvObj)
Definition: clipboard.c:60
static HRESULT WINAPI EnumFormatImpl_Reset(IEnumFORMATETC *iface)
Definition: clipboard.c:127

Definition at line 150 of file clipboard.c.

Referenced by EnumFormatImpl_Create().